Blame src/dbus/abrt_problems2_session.h

Packit 8ea169
/*
Packit 8ea169
  Copyright (C) 2015  ABRT team
Packit 8ea169
Packit 8ea169
  This program is free software; you can redistribute it and/or modify
Packit 8ea169
  it under the terms of the GNU General Public License as published by
Packit 8ea169
  the Free Software Foundation; either version 2 of the License, or
Packit 8ea169
  (at your option) any later version.
Packit 8ea169
Packit 8ea169
  This program is distributed in the hope that it will be useful,
Packit 8ea169
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 8ea169
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 8ea169
  GNU General Public License for more details.
Packit 8ea169
Packit 8ea169
  You should have received a copy of the GNU General Public License along
Packit 8ea169
  with this program; if not, write to the Free Software Foundation, Inc.,
Packit 8ea169
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Packit 8ea169
Packit 8ea169
  ------------------------------------------------------------------------------
Packit 8ea169
Packit 8ea169
  This file declares functions for org.freedesktop.Problems2.Session interface.
Packit 8ea169
Packit 8ea169
  Every client must have a session, therefore sessions are created
Packit 8ea169
  automatically. Every session belongs to a one D-Bus caller (client) and no
Packit 8ea169
  other D-Bus caller can access it.
Packit 8ea169
Packit 8ea169
  Session hold status of authorization and manages client's tasks. Client's
Packit 8ea169
  session destroys client's task when client disconnects. Session should not
Packit 8ea169
  allow a client to consume too much resources by allowing him to create
Packit 8ea169
  enormous number of tasks. D-Bus clients must not be able to work with task of
Packit 8ea169
  other clients.
Packit 8ea169
Packit 8ea169
  Session have two public states and one internal state. The public states are
Packit 8ea169
  authorized or not. The internal state is 'authorization pending' - when
Packit 8ea169
  client requested to authorize the session but PolKit hasn't replied yet.
Packit 8ea169
Packit 8ea169
  If requested, authorization should be automatically granted to users who
Packit 8ea169
  already owns an authorized session.
Packit 8ea169
*/
Packit 8ea169
Packit 8ea169
#ifndef ABRT_PROBLEMS2_SESSION_H
Packit 8ea169
#define ABRT_PROBLEMS2_SESSION_H
Packit 8ea169
Packit 8ea169
#ifdef HAVE_CONFIG_H
Packit 8ea169
#include <config.h>
Packit 8ea169
#endif
Packit 8ea169
Packit 8ea169
#include "abrt_problems2_task.h"
Packit 8ea169
Packit 8ea169
#ifdef HAVE_POLKIT
Packit 8ea169
#include <polkit/polkit.h>
Packit 8ea169
#else
Packit 8ea169
struct _PolkitAuthority;
Packit 8ea169
typedef struct _PolkitAuthority PolkitAuthority;
Packit 8ea169
struct _PolkitDetails;
Packit 8ea169
typedef struct _PolkitDetails PolkitDetails;
Packit 8ea169
typedef struct _PolkitSubject PolkitSubject;
Packit 8ea169
#endif
Packit 8ea169
Packit 8ea169
#include <glib-object.h>
Packit 8ea169
#include <gio/gio.h>
Packit 8ea169
#include <inttypes.h>
Packit 8ea169
Packit 8ea169
G_BEGIN_DECLS
Packit 8ea169
Packit 8ea169
#define TYPE_ABRT_P2_SESSION abrt_p2_session_get_type ()
Packit 8ea169
GType abrt_p2_session_get_type (void);
Packit 8ea169
Packit 8ea169
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 8ea169
typedef struct _AbrtP2Session AbrtP2Session;
Packit 8ea169
Packit 8ea169
typedef struct
Packit 8ea169
{
Packit 8ea169
    GObjectClass parent_class;
Packit 8ea169
Packit 8ea169
    void (*authorization_changed)(AbrtP2Session *session, gint32 status);
Packit 8ea169
} AbrtP2SessionClass;
Packit 8ea169
Packit 8ea169
_GLIB_DEFINE_AUTOPTR_CHAINUP(AbrtP2Session, GObject)
Packit 8ea169
Packit 8ea169
static inline AbrtP2Session *ABRT_P2_SESSION(gconstpointer ptr)
Packit 8ea169
{
Packit 8ea169
    return G_TYPE_CHECK_INSTANCE_CAST(ptr, abrt_p2_session_get_type(), AbrtP2Session);
Packit 8ea169
}
Packit 8ea169
Packit 8ea169
static inline gboolean ABRT_P2_IS_SESSION(gconstpointer ptr)
Packit 8ea169
{
Packit 8ea169
    return G_TYPE_CHECK_INSTANCE_TYPE(ptr, abrt_p2_session_get_type());
Packit 8ea169
}
Packit 8ea169
G_GNUC_END_IGNORE_DEPRECATIONS
Packit 8ea169
Packit 8ea169
Packit 8ea169
AbrtP2Session *abrt_p2_session_new(char *caller, uid_t uid);
Packit 8ea169
Packit 8ea169
uid_t abrt_p2_session_uid(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
const char *abrt_p2_session_caller(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
int abrt_p2_session_is_authorized(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
typedef enum {
Packit 8ea169
    ABRT_P2_SESSION_AUTHORIZE_FAILED = -1,
Packit 8ea169
    ABRT_P2_SESSION_AUTHORIZE_GRANTED = 0,
Packit 8ea169
    ABRT_P2_SESSION_AUTHORIZE_ACCEPTED = 1,
Packit 8ea169
    ABRT_P2_SESSION_AUTHORIZE_PENDING = 2,
Packit 8ea169
} AbrtP2SessionAuthRequestRet;
Packit 8ea169
Packit 8ea169
typedef enum {
Packit 8ea169
    ABRT_P2_SESSION_CHANGED_AUTHORIZED = 0,
Packit 8ea169
    ABRT_P2_SESSION_CHANGED_PENDING = 1,
Packit 8ea169
    ABRT_P2_SESSION_CHANGED_NOT_AUTHORIZED = 2,
Packit 8ea169
    ABRT_P2_SESSION_CHANGED_FAILED = 3,
Packit 8ea169
} AbrtP2SessionAuthChangedStatus;
Packit 8ea169
Packit 8ea169
AbrtP2SessionAuthRequestRet abrt_p2_session_authorize(AbrtP2Session *session,
Packit 8ea169
            GVariant *parameters,
Packit 8ea169
            GList *peers,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
AbrtP2SessionAuthRequestRet abrt_p2_session_grant_authorization(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
void abrt_p2_session_revoke_authorization(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
int abrt_p2_session_check_sanity(AbrtP2Session *session,
Packit 8ea169
            const char *caller,
Packit 8ea169
            uid_t caller_uid,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
uint32_t abrt_p2_session_add_task(AbrtP2Session *session,
Packit 8ea169
            AbrtP2Task *task,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
void abrt_p2_session_remove_task(AbrtP2Session *session,
Packit 8ea169
            AbrtP2Task *task,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_session_owns_task(AbrtP2Session *session,
Packit 8ea169
            AbrtP2Task *task);
Packit 8ea169
Packit 8ea169
GList *abrt_p2_session_tasks(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
int abrt_p2_session_tasks_count(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
void abrt_p2_session_clean_tasks(AbrtP2Session *session);
Packit 8ea169
Packit 8ea169
const char *abrt_p2_session_generate_token(AbrtP2Session *session,
Packit 8ea169
            unsigned int duration,
Packit 8ea169
            GError **error);
Packit 8ea169
Packit 8ea169
int abrt_p2_session_revoke_token(AbrtP2Session *session,
Packit 8ea169
            const char *token);
Packit 8ea169
Packit 8ea169
/*
Packit 8ea169
 * Shared PolKit authority with other entities.
Packit 8ea169
 */
Packit 8ea169
PolkitAuthority *abrt_p2_session_class_set_polkit_authority(PolkitAuthority *pk_authority);
Packit 8ea169
Packit 8ea169
PolkitAuthority *abrt_p2_session_class_polkit_authority(void);
Packit 8ea169
Packit 8ea169
PolkitAuthority *abrt_p2_session_class_release_polkit_authority(void);
Packit 8ea169
Packit 8ea169
G_END_DECLS
Packit 8ea169
Packit 8ea169
#endif/*ABRT_PROBLEMS2_SESSION_H*/