6
#include <core/dbus/bus.h>
7
#include <core/trust/dbus_agent.h>
8
#include <core/trust/agent.h>
10
#include <pulse/cdecl.h>
13
#include <pulsecore/core-util.h>
14
#include <pulse/xmalloc.h>
15
#include <pulsecore/log.h>
17
#include "truststore.h"
22
std::shared_ptr<core::trust::Agent> agent;
25
pa_trust_store* pa_trust_store_new() {
27
auto bus = std::make_shared<core::dbus::Bus>(core::dbus::WellKnownBus::session);
28
auto agent = core::trust::dbus::create_multi_user_agent_for_bus_connection(bus, "PulseAudio");
29
auto ts = new TrustStore();
31
return (pa_trust_store *) ts;
32
} catch(const std::exception &e) {
33
pa_log_error("Could not create Ubuntu touch trust store connection: %s",
36
pa_log_error("Could not create Ubuntu touch trust store connection");
41
void pa_trust_store_free(pa_trust_store *t) {
43
auto ts = (TrustStore*) t;
47
bool pa_trust_store_check(pa_trust_store *t, const char *appname,
48
uid_t uid, pid_t pid, const char *description) {
49
auto ts = (TrustStore*) t;
52
core::trust::Agent::RequestParameters params {
53
core::trust::Uid{uid},
54
core::trust::Pid{pid},
56
core::trust::Feature{0},
59
pa_log_debug("Asking Ubuntu touch trust store for permission (app: %s)",
60
params.application.id.c_str());
61
auto answer = ts->agent->authenticate_request_with_parameters(params);
62
if (answer == core::trust::Request::Answer::granted) {
63
pa_log_debug("Request granted.");
66
pa_log_info("Request denied.");
67
} catch(const std::exception &e) {
68
pa_log_error("Could not ask Ubuntu touch trust store for permission: %s",
71
pa_log_error("Could not ask Ubuntu touch trust store for permission");