]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - tests/src/test-gobject-greeter.c
Rename ldm_greeter_provide_secret to ldm_greeter_respond - responses may not be secrets
[sojka/lightdm.git] / tests / src / test-gobject-greeter.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <xcb/xcb.h>
4 #include <lightdm/greeter.h>
5
6 #include "status.h"
7
8 static GKeyFile *config;
9
10 static void
11 connected_cb (LdmGreeter *greeter)
12 {  
13     notify_status ("GREETER CONNECTED-TO-DAEMON");
14
15     if (ldm_greeter_get_is_first (greeter))
16     {
17         gchar *username;
18
19         username = g_key_file_get_string (config, "test-greeter-config", "username", NULL);
20
21         if (g_key_file_get_boolean (config, "test-greeter-config", "login-guest", NULL))
22         {
23             notify_status ("GREETER LOGIN-GUEST");
24             ldm_greeter_login_as_guest (greeter);
25         }
26         else if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
27         {
28             notify_status ("GREETER LOGIN");
29             ldm_greeter_login (greeter, NULL);
30         }
31         else if (username)
32         {
33             notify_status ("GREETER LOGIN USERNAME=%s", username);
34             ldm_greeter_login (greeter, username);
35         }
36
37         g_free (username);
38     }
39 }
40
41 static void
42 show_message_cb (LdmGreeter *greeter, const gchar *text)
43 {
44     notify_status ("GREETER SHOW-MESSAGE TEXT=\"%s\"", text);
45 }
46
47 static void
48 show_error_cb (LdmGreeter *greeter, const gchar *text)
49 {
50     notify_status ("GREETER SHOW-ERROR TEXT=\"%s\"", text);
51 }
52
53 static void
54 show_prompt_cb (LdmGreeter *greeter, const gchar *text)
55 {
56     gchar *username, *password, *response = NULL;
57
58     notify_status ("GREETER SHOW-PROMPT TEXT=\"%s\"", text);
59
60     username = g_key_file_get_string (config, "test-greeter-config", "username", NULL);
61     password = g_key_file_get_string (config, "test-greeter-config", "password", NULL);
62
63     if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
64     {
65         g_key_file_set_boolean (config, "test-greeter-config", "prompt-username", FALSE);
66         response = username;
67     }
68     else if (password)
69         response = password;
70
71     if (response)
72     {
73         notify_status ("GREETER RESPOND TEXT=\"%s\"", response);
74         ldm_greeter_respond (greeter, response);
75     }
76
77     g_free (username);
78     g_free (password);
79 }
80
81 static void
82 authentication_complete_cb (LdmGreeter *greeter)
83 {
84     notify_status ("GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=%s", ldm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
85     if (ldm_greeter_get_is_authenticated (greeter))
86         ldm_greeter_start_default_session (greeter);
87 }
88
89 static void
90 quit_cb (LdmGreeter *greeter)
91 {
92     notify_status ("GREETER QUIT");
93     exit (EXIT_SUCCESS);
94 }
95
96 static void
97 signal_cb (int signum)
98 {
99     notify_status ("GREETER TERMINATE SIGNAL=%d", signum);
100     exit (EXIT_SUCCESS);
101 }
102
103 int
104 main (int argc, char **argv)
105 {
106     LdmGreeter *greeter;
107     xcb_connection_t *connection;
108
109     signal (SIGINT, signal_cb);
110     signal (SIGTERM, signal_cb);
111
112     notify_status ("GREETER START");
113
114     config = g_key_file_new ();
115     if (g_getenv ("TEST_CONFIG"))
116         g_key_file_load_from_file (config, g_getenv ("TEST_CONFIG"), G_KEY_FILE_NONE, NULL);
117
118     g_type_init ();
119
120     connection = xcb_connect (NULL, NULL);
121
122     if (xcb_connection_has_error (connection))
123     {
124         fprintf (stderr, "Error connecting\n");
125         return EXIT_FAILURE;
126     }
127
128     notify_status ("GREETER CONNECT-XSERVER %s", getenv ("DISPLAY"));
129
130     greeter = ldm_greeter_new ();
131     g_signal_connect (greeter, "connected", G_CALLBACK (connected_cb), NULL);
132     g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
133     g_signal_connect (greeter, "show-error", G_CALLBACK (show_error_cb), NULL);
134     g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
135     g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
136     g_signal_connect (greeter, "quit", G_CALLBACK (quit_cb), NULL);
137
138     notify_status ("GREETER CONNECT-TO-DAEMON");
139     ldm_greeter_connect_to_server (greeter);
140
141     g_main_loop_run (g_main_loop_new (NULL, FALSE));
142
143     return EXIT_SUCCESS;
144 }