summaryrefslogtreecommitdiffstats
path: root/panels/sharing/cc-gnome-remote-desktop.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 14:36:24 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 14:36:24 +0000
commit9b6d8e63db85c30007b463e91f91a791969fa83f (patch)
tree0899af51d73c1bf986f73ae39a03c4436083018a /panels/sharing/cc-gnome-remote-desktop.c
parentInitial commit. (diff)
downloadgnome-control-center-9b6d8e63db85c30007b463e91f91a791969fa83f.tar.xz
gnome-control-center-9b6d8e63db85c30007b463e91f91a791969fa83f.zip
Adding upstream version 1:3.38.4.upstream/1%3.38.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'panels/sharing/cc-gnome-remote-desktop.c')
-rw-r--r--panels/sharing/cc-gnome-remote-desktop.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/panels/sharing/cc-gnome-remote-desktop.c b/panels/sharing/cc-gnome-remote-desktop.c
new file mode 100644
index 0000000..c59f3b0
--- /dev/null
+++ b/panels/sharing/cc-gnome-remote-desktop.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2018 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "config.h"
+
+#include "cc-gnome-remote-desktop.h"
+
+const SecretSchema *
+cc_grd_vnc_password_get_schema (void)
+{
+ static const SecretSchema grd_vnc_password_schema = {
+ .name = "org.gnome.RemoteDesktop.VncPassword",
+ .flags = SECRET_SCHEMA_NONE,
+ .attributes = {
+ { "password", SECRET_SCHEMA_ATTRIBUTE_STRING },
+ { "NULL", 0 },
+ },
+ };
+
+ return &grd_vnc_password_schema;
+}
+
+gboolean
+cc_grd_get_is_auth_method_prompt (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char * auth_method;
+
+ auth_method = g_variant_get_string (variant, NULL);
+
+ if (g_strcmp0 (auth_method, "prompt") == 0)
+ {
+ g_value_set_boolean (value, TRUE);
+ }
+ else if (g_strcmp0 (auth_method, "password") == 0)
+ {
+ g_value_set_boolean (value, FALSE);
+ }
+ else
+ {
+ g_warning ("Unhandled VNC auth method %s", auth_method);
+ g_value_set_boolean (value, FALSE);
+ }
+
+ return TRUE;
+}
+
+GVariant *
+cc_grd_set_is_auth_method_prompt (const GValue *value,
+ const GVariantType *type,
+ gpointer user_data)
+{
+ char *auth_method;
+
+ if (g_value_get_boolean (value))
+ auth_method = "prompt";
+ else
+ auth_method = "password";
+
+ return g_variant_new_string (auth_method);
+}
+
+gboolean
+cc_grd_get_is_auth_method_password (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *auth_method;
+
+ auth_method = g_variant_get_string (variant, NULL);
+
+ if (g_strcmp0 (auth_method, "prompt") == 0)
+ {
+ g_value_set_boolean (value, FALSE);
+ }
+ else if (g_strcmp0 (auth_method, "password") == 0)
+ {
+ g_value_set_boolean (value, TRUE);
+ }
+ else
+ {
+ g_warning ("Unhandled VNC auth method %s", auth_method);
+ g_value_set_boolean (value, FALSE);
+ }
+
+ return TRUE;
+}
+
+GVariant *
+cc_grd_set_is_auth_method_password (const GValue *value,
+ const GVariantType *type,
+ gpointer user_data)
+{
+ char *auth_method;
+
+ if (g_value_get_boolean (value))
+ auth_method = "password";
+ else
+ auth_method = "prompt";
+
+ return g_variant_new_string (auth_method);
+}
+
+static void
+on_password_stored (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+
+ if (!secret_password_store_finish (result, &error))
+ {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ g_warning ("Failed to store VNC password: %s", error->message);
+ }
+ g_error_free (error);
+ }
+}
+
+void
+cc_grd_store_vnc_password (const gchar *password, GCancellable *cancellable)
+{
+ secret_password_store (CC_GRD_VNC_PASSWORD_SCHEMA,
+ SECRET_COLLECTION_DEFAULT,
+ "GNOME Remote Desktop VNC password",
+ password,
+ cancellable, on_password_stored, NULL,
+ NULL);
+}
+
+gchar *
+cc_grd_lookup_vnc_password (GCancellable *cancellable)
+{
+ g_autoptr(GError) error = NULL;
+ g_autofree gchar *password = NULL;
+
+ password = secret_password_lookup_sync (CC_GRD_VNC_PASSWORD_SCHEMA,
+ cancellable, &error,
+ NULL);
+ if (error)
+ g_warning ("Failed to get password: %s", error->message);
+
+ return g_steal_pointer (&password);
+}