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)); }
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); }
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); }
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); } }