summaryrefslogtreecommitdiff
path: root/tests/src/test-gobject-greeter.c
blob: 55e9a627bb177f2b00852090d6c7ffdbb9ecd3aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdlib.h>
#include <stdio.h>
#include <xcb/xcb.h>
#include <lightdm/greeter.h>

#include "status.h"

static void
connected_cb (LdmGreeter *greeter)
{  
    gchar *username;

    notify_status ("GREETER CONNECTED-TO-DAEMON");

    username = ldm_greeter_get_string_property (greeter, "username");
    if (username)
    {
        notify_status ("GREETER LOGIN USERNAME=%s", username);
        ldm_greeter_login (greeter, username);
    }
}

static void
show_message_cb (LdmGreeter *greeter, const gchar *text)
{
    notify_status ("GREETER SHOW-MESSAGE TEXT=\"%s\"", text);
}

static void
show_error_cb (LdmGreeter *greeter, const gchar *text)
{
    notify_status ("GREETER SHOW-ERROR TEXT=\"%s\"", text);
}

static void
show_prompt_cb (LdmGreeter *greeter, const gchar *text)
{
    gchar *password;

    notify_status ("GREETER SHOW-PROMPT TEXT=\"%s\"", text);

    password = ldm_greeter_get_string_property (greeter, "password");
    if (password)
    {
        notify_status ("GREETER PROVIDE-SECRET TEXT=\"%s\"", password);
        ldm_greeter_provide_secret (greeter, password);
    }
}

static void
authentication_complete_cb (LdmGreeter *greeter)
{
    notify_status ("GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=%s", ldm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
    if (ldm_greeter_get_is_authenticated (greeter))
        ldm_greeter_start_session_with_defaults (greeter);
}

static void
quit_cb (LdmGreeter *greeter)
{
    notify_status ("GREETER QUIT");
    exit (EXIT_SUCCESS);
}

static void
signal_cb (int signum)
{
    notify_status ("GREETER TERMINATE SIGNAL=%d", signum);
    exit (EXIT_SUCCESS);
}

int
main (int argc, char **argv)
{
    LdmGreeter *greeter;
    xcb_connection_t *connection;

    signal (SIGINT, signal_cb);
    signal (SIGTERM, signal_cb);

    g_debug ("Starting greeter");

    notify_status ("GREETER START");

    g_type_init ();

    connection = xcb_connect (NULL, NULL);

    if (xcb_connection_has_error (connection))
    {
        fprintf (stderr, "Error connecting\n");
        return EXIT_FAILURE;
    }

    notify_status ("GREETER CONNECT-XSERVER %s", getenv ("DISPLAY"));

    greeter = ldm_greeter_new ();
    g_signal_connect (greeter, "connected", G_CALLBACK (connected_cb), NULL);
    g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
    g_signal_connect (greeter, "show-error", G_CALLBACK (show_error_cb), NULL);
    g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
    g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
    g_signal_connect (greeter, "quit", G_CALLBACK (quit_cb), NULL);

    notify_status ("GREETER CONNECT-TO-DAEMON");
    ldm_greeter_connect_to_server (greeter);

    g_main_loop_run (g_main_loop_new (NULL, FALSE));

    return EXIT_SUCCESS;
}