]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blobdiff - tests/src/test-session.c
Set hints for in-session-greeters
[sojka/lightdm.git] / tests / src / test-session.c
index 00b983c748a97101c4d8f62754db1fb188eef421..8323b2fccd4788770960c5937fb58025f4e45ec1 100644 (file)
@@ -11,6 +11,7 @@
 #include <gio/gio.h>
 #include <glib-unix.h>
 #include <glib/gstdio.h>
+#include <lightdm/greeter.h>
 
 #include "status.h"
 
@@ -24,6 +25,8 @@ static GKeyFile *config;
 
 static xcb_connection_t *connection;
 
+static LightDMGreeter *greeter = NULL;
+
 static gboolean
 sigint_cb (gpointer user_data)
 {
@@ -40,9 +43,37 @@ sigterm_cb (gpointer user_data)
     return TRUE;
 }
 
+static void
+show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
+{
+    status_notify ("%s GREETER-SHOW-MESSAGE TEXT=\"%s\"", session_id, text);
+}
+
+static void
+show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
+{
+    status_notify ("%s GREETER-SHOW-PROMPT TEXT=\"%s\"", session_id, text);
+}
+
+static void
+authentication_complete_cb (LightDMGreeter *greeter)
+{
+    if (lightdm_greeter_get_authentication_user (greeter))
+        status_notify ("%s GREETER-AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
+                       session_id,
+                       lightdm_greeter_get_authentication_user (greeter),
+                       lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
+    else
+        status_notify ("%s GREETER-AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
+                       session_id,
+                       lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
+}
+
 static void
 request_cb (const gchar *name, GHashTable *params)
 {
+    GError *error = NULL;
+
     if (!name)
     {
         g_main_loop_quit (loop);
@@ -224,12 +255,97 @@ request_cb (const gchar *name, GHashTable *params)
         else
             status_notify ("%s WRITE-SHARED-DATA ERROR=NO_XDG_GREETER_DATA_DIR", session_id);
     }
+
+    else if (strcmp (name, "GREETER-START") == 0)
+    {
+        int timeout;
+        GError *error = NULL;
+
+        g_assert (greeter == NULL);
+        greeter = lightdm_greeter_new ();
+        g_signal_connect (greeter, LIGHTDM_GREETER_SIGNAL_SHOW_MESSAGE, G_CALLBACK (show_message_cb), NULL);
+        g_signal_connect (greeter, LIGHTDM_GREETER_SIGNAL_SHOW_PROMPT, G_CALLBACK (show_prompt_cb), NULL);
+        g_signal_connect (greeter, LIGHTDM_GREETER_SIGNAL_AUTHENTICATION_COMPLETE, G_CALLBACK (authentication_complete_cb), NULL);
+        if (lightdm_greeter_connect_to_daemon_sync (greeter, &error))
+            status_notify ("%s GREETER-STARTED", session_id);
+        else
+        {
+            status_notify ("%s GREETER-FAILED ERROR=%s", session_id, error->message);
+            g_clear_error (&error);
+        }
+
+        if (lightdm_greeter_get_select_user_hint (greeter))
+            status_notify ("%s GREETER-SELECT-USER-HINT USERNAME=%s", session_id, lightdm_greeter_get_select_user_hint (greeter));
+        if (lightdm_greeter_get_select_guest_hint (greeter))
+            status_notify ("%s GREETER-SELECT-GUEST-HINT", session_id);
+        if (lightdm_greeter_get_lock_hint (greeter))
+            status_notify ("%s GREETER-LOCK-HINT", session_id);
+        if (!lightdm_greeter_get_has_guest_account_hint (greeter))
+            status_notify ("%s GREETER-HAS-GUEST-ACCOUNT-HINT=FALSE", session_id);
+        if (lightdm_greeter_get_hide_users_hint (greeter))
+            status_notify ("%s GREETER-HIDE-USERS-HINT", session_id);
+        if (lightdm_greeter_get_show_manual_login_hint (greeter))
+            status_notify ("%s GREETER-SHOW-MANUAL-LOGIN-HINT", session_id);
+        if (!lightdm_greeter_get_show_remote_login_hint (greeter))
+            status_notify ("%s GREETER-SHOW-REMOTE-LOGIN-HINT=FALSE", session_id);
+        timeout = lightdm_greeter_get_autologin_timeout_hint (greeter);
+        if (lightdm_greeter_get_autologin_user_hint (greeter))
+        {
+            if (timeout != 0)
+                status_notify ("%s GREETER-AUTOLOGIN-USER USERNAME=%s TIMEOUT=%d", session_id, lightdm_greeter_get_autologin_user_hint (greeter), timeout);
+            else
+                status_notify ("%s GREETER-AUTOLOGIN-USER USERNAME=%s", session_id, lightdm_greeter_get_autologin_user_hint (greeter));
+        }
+        else if (lightdm_greeter_get_autologin_guest_hint (greeter))
+        {
+            if (timeout != 0)
+                status_notify ("%s GREETER-AUTOLOGIN-GUEST TIMEOUT=%d", session_id, timeout);
+            else
+                status_notify ("%s GREETER-AUTOLOGIN-GUEST", session_id);
+        }     
+    }
+
+    else if (strcmp (name, "GREETER-LOG-DEFAULT-SESSION") == 0)
+        status_notify ("%s GREETER-LOG-DEFAULT-SESSION SESSION=%s", session_id, lightdm_greeter_get_default_session_hint (greeter));
+
+    else if (strcmp (name, "GREETER-AUTHENTICATE") == 0)
+    {
+        if (!lightdm_greeter_authenticate (greeter, g_hash_table_lookup (params, "USERNAME"), &error))
+        {
+            status_notify ("%s FAIL-AUTHENTICATE ERROR=%s", session_id, error->message);
+            g_clear_error (&error);
+        }
+    }
+
+    else if (strcmp (name, "GREETER-RESPOND") == 0)
+    {
+        if (!lightdm_greeter_respond (greeter, g_hash_table_lookup (params, "TEXT"), &error))
+        {
+            status_notify ("%s FAIL-RESPOND ERROR=%s", session_id, error->message);
+            g_clear_error (&error);
+        }
+    }
+
+    else if (strcmp (name, "GREETER-START-SESSION") == 0)
+    {
+        if (!lightdm_greeter_start_session_sync (greeter, g_hash_table_lookup (params, "SESSION"), &error))
+        {
+            status_notify ("%s FAIL-START-SESSION ERROR=%s", session_id, error->message);
+            g_clear_error (&error);          
+        }
+    }
+
+    else if (strcmp (name, "GREETER-STOP") == 0)
+    {
+        g_assert (greeter != NULL);
+        g_clear_object (&greeter);
+    }
 }
 
 int
 main (int argc, char **argv)
 {
-    gchar *display, *xdg_seat, *xdg_vtnr, *xdg_current_desktop, *xdg_greeter_data_dir, *xdg_session_class, *xdg_session_type, *xdg_session_desktop, *mir_socket, *mir_vt, *mir_id;
+    gchar *display, *xdg_seat, *xdg_vtnr, *xdg_current_desktop, *xdg_greeter_data_dir, *xdg_session_cookie, *xdg_session_class, *xdg_session_type, *xdg_session_desktop, *mir_server_host_socket, *mir_vt, *mir_id;
     GString *status_text;
     int fd, open_max;
 
@@ -238,10 +354,11 @@ main (int argc, char **argv)
     xdg_vtnr = getenv ("XDG_VTNR");
     xdg_current_desktop = getenv ("XDG_CURRENT_DESKTOP");
     xdg_greeter_data_dir = getenv ("XDG_GREETER_DATA_DIR");
+    xdg_session_cookie = getenv ("XDG_SESSION_COOKIE");
     xdg_session_class = getenv ("XDG_SESSION_CLASS");
     xdg_session_type = getenv ("XDG_SESSION_TYPE");
     xdg_session_desktop = getenv ("XDG_SESSION_DESKTOP");
-    mir_socket = getenv ("MIR_SOCKET");
+    mir_server_host_socket = getenv ("MIR_SERVER_HOST_SOCKET");
     mir_vt = getenv ("MIR_SERVER_VT");
     mir_id = getenv ("MIR_SERVER_NAME");
     if (display)
@@ -253,8 +370,10 @@ main (int argc, char **argv)
     }
     else if (mir_id)
         session_id = g_strdup_printf ("SESSION-MIR-%s", mir_id);
-    else if (mir_socket || mir_vt)
+    else if (mir_server_host_socket || mir_vt)
         session_id = g_strdup ("SESSION-MIR");
+    else if (g_strcmp0 (xdg_session_type, "wayland") == 0)
+        session_id = g_strdup ("SESSION-WAYLAND");
     else
         session_id = g_strdup ("SESSION-UNKNOWN");
 
@@ -289,6 +408,8 @@ main (int argc, char **argv)
         g_string_append_printf (status_text, " XDG_CURRENT_DESKTOP=%s", xdg_current_desktop);
     if (xdg_greeter_data_dir)
         g_string_append_printf (status_text, " XDG_GREETER_DATA_DIR=%s", xdg_greeter_data_dir);
+    if (xdg_session_cookie)
+        g_string_append_printf (status_text, " XDG_SESSION_COOKIE=%s", xdg_session_cookie);
     if (xdg_session_class)
         g_string_append_printf (status_text, " XDG_SESSION_CLASS=%s", xdg_session_class);
     if (xdg_session_type)