Ejemplo n.º 1
0
static void
accounts_init (Accounts *accounts)
{
  accounts->act_user_to_account = g_hash_table_new_full (g_direct_hash,
                                                         g_direct_equal,
                                                         NULL,
                                                         g_object_unref);
  accounts->um = act_user_manager_get_default ();

  gboolean loaded;
  g_object_get (accounts->um, "is-loaded", &loaded, NULL);
  if (loaded)
    users_loaded (accounts->um, NULL, accounts);
  else
    g_signal_connect (accounts->um, "notify::is-loaded", G_CALLBACK (users_loaded), accounts);

  /* A "role" is a POSIX group plus localized descriptions.
     Eventually, this will be configurable by dropping files into a
     directory, but for now we just hard code some to get started.
  */

  GVariantBuilder roles_builder;
  g_variant_builder_init (&roles_builder, G_VARIANT_TYPE ("a(ss)"));
  g_variant_builder_add (&roles_builder, "(ss)",
                         COCKPIT_ROLE_ADMIN, "Server Administrator");
  g_variant_builder_add (&roles_builder, "(ss)",
                         COCKPIT_ROLE_USER_ADMIN, "User Account Administrator");
  g_variant_builder_add (&roles_builder, "(ss)",
                         COCKPIT_ROLE_REALM_ADMIN, "Realm Administrator");
  g_variant_builder_add (&roles_builder, "(ss)",
                         COCKPIT_ROLE_STORAGE_ADMIN, "Storage Administrator");
  cockpit_accounts_set_roles (COCKPIT_ACCOUNTS (accounts), g_variant_builder_end (&roles_builder));
}
Ejemplo n.º 2
0
static gboolean
handle_delete (CockpitAccount *object,
               GDBusMethodInvocation *invocation,
               gboolean remove_files)
{
  Account *acc = ACCOUNT (object);

  if (!auth_check_sender_role (invocation, COCKPIT_ROLE_USER_ADMIN))
    return TRUE;

  if (acc->u)
    {
      CallData *data = g_new0 (CallData, 1);
      data->object = object;
      data->invocation = invocation;

      act_user_manager_delete_user_async (act_user_manager_get_default (),
                                          acc->u,
                                          remove_files,
                                          NULL,
                                          (GAsyncReadyCallback)delete_account_done,
                                          data);
      return TRUE;
    }

  cockpit_account_complete_delete (object, invocation);
  return TRUE;
}
static void
language_changed (CcLanguageChooser  *chooser,
                  GParamSpec         *pspec,
                  GisLanguagePage    *page)
{
  GisLanguagePagePrivate *priv = gis_language_page_get_instance_private (page);
  ActUser *user;
  GisDriver *driver;

  if (priv->selection_done_source > 0)
    {
      g_source_remove (priv->selection_done_source);
      priv->selection_done_source = 0;
    }

  priv->new_locale_id = cc_language_chooser_get_language (chooser);
  driver = GIS_PAGE (page)->driver;

  setlocale (LC_MESSAGES, priv->new_locale_id);
  gis_driver_locale_changed (driver);

  if (gis_driver_get_mode (driver) == GIS_DRIVER_MODE_NEW_USER) {
      if (g_permission_get_allowed (priv->permission)) {
          set_localed_locale (page);
      }
      else if (g_permission_get_can_acquire (priv->permission)) {
          g_permission_acquire_async (priv->permission,
                                      NULL,
                                      change_locale_permission_acquired,
                                      page);
      }
  }
  user = act_user_manager_get_user (act_user_manager_get_default (),
                                    g_get_user_name ());
  if (act_user_is_loaded (user))
    act_user_set_language (user, priv->new_locale_id);
  else
    g_signal_connect (user,
                      "notify::is-loaded",
                      G_CALLBACK (user_loaded),
                      g_strdup (priv->new_locale_id));

  gis_driver_set_user_language (driver, priv->new_locale_id);

  priv->selection_done_source = g_timeout_add (500, _selection_done,
                                               (gpointer)driver);
}
Ejemplo n.º 4
0
gboolean
would_demote_only_admin (ActUser *user)
{

        ActUserManager *um = act_user_manager_get_default ();

        /* Prevent the user from demoting the only admin account.
         * Returns TRUE when user is an administrator and there is only
         * one enabled administrator. */

        if (act_user_get_account_type (user) == ACT_USER_ACCOUNT_TYPE_STANDARD
            ||  act_user_get_locked (user))
                return FALSE;

        if (get_num_active_admin (um) > 1)
                return FALSE;

        return TRUE;
}
static void
gis_account_page_enterprise_constructed (GObject *object)
{
  GisAccountPageEnterprise *page = GIS_ACCOUNT_PAGE_ENTERPRISE (object);
  GisAccountPageEnterprisePrivate *priv = gis_account_page_enterprise_get_instance_private (page);

  G_OBJECT_CLASS (gis_account_page_enterprise_parent_class)->constructed (object);

  priv->act_client = act_user_manager_get_default ();

  priv->realmd_watch = g_bus_watch_name (G_BUS_TYPE_SYSTEM, "org.freedesktop.realmd",
                                         G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
                                         on_realmd_appeared, on_realmd_disappeared,
                                         page, NULL);

  g_signal_connect (priv->join_dialog, "response",
                    G_CALLBACK (on_join_response), page);
  g_signal_connect (priv->domain, "changed",
                    G_CALLBACK (on_domain_changed), page);
  g_signal_connect (priv->login, "changed",
                    G_CALLBACK (on_entry_changed), page);
}
Ejemplo n.º 6
0
void
um_photo_dialog_set_user (UmPhotoDialog *um,
                          ActUser       *user)
{
        ActUserManager *manager;
        GSList *list, *l;
        ActUser *u;
        GIcon *icon;
        GEmblem *emblem;
        GList *children, *c;

        g_return_if_fail (um != NULL);

        if (um->user) {
                g_object_unref (um->user);
                um->user = NULL;
        }
        um->user = user;

        if (um->user) {
                g_object_ref (um->user);

                children = gtk_container_get_children (GTK_CONTAINER (um->photo_popup));
                g_list_foreach (children, (GFunc) clear_tip, NULL);

                manager = act_user_manager_get_default ();
                list = act_user_manager_list_users (manager);

                icon = g_themed_icon_new ("avatar-default");
                emblem = g_emblem_new (icon);
                g_object_unref (icon);

                for (l = list; l; l = l->next) {
                        const char *filename;

                        u = l->data;
                        if (u == user)
                                continue;
                        filename = act_user_get_icon_file (u);
                        if (filename  == NULL)
                                continue;
                        for (c = children; c; c = c->next) {
                                const char *f;

                                f = g_object_get_data (G_OBJECT (c->data), "filename");
                                if (f == NULL)
                                        continue;
                                if (strcmp (f, filename) == 0) {
                                        char *tip;

                                        tip = g_strdup_printf (_("Used by %s"),
                                                               act_user_get_real_name (u));
                                        set_tip (GTK_WIDGET (c->data), tip, emblem);
                                        g_free (tip);
                                        break;
                                }
                        }
                }
                g_slist_free (list);

                g_object_unref (emblem);
        }
}