summaryrefslogtreecommitdiff
path: root/auth/examples/full_example.c
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-09-01 03:19:31 +0200
committerAylur <[email protected]>2024-09-01 03:19:31 +0200
commit6adcd2884ee48ec0b1c8b7486e42b2eeffc48159 (patch)
tree6c9eb7a3a47d5fc2a3bdd866d36dc8fd9201c0d0 /auth/examples/full_example.c
parent43e6bd47863c45b9232f0f74e973b83b8354bd3a (diff)
move to monorepo
Diffstat (limited to 'auth/examples/full_example.c')
-rw-r--r--auth/examples/full_example.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/auth/examples/full_example.c b/auth/examples/full_example.c
new file mode 100644
index 0000000..a20c02b
--- /dev/null
+++ b/auth/examples/full_example.c
@@ -0,0 +1,66 @@
+#include <bsd/readpassphrase.h>
+
+#include "astal-auth.h"
+
+GMainLoop *loop;
+
+static void authenticate(AstalAuthPam *pam) {
+ if (!astal_auth_pam_start_authenticate(pam)) {
+ g_print("could not start authentication process\n");
+ g_object_unref(pam);
+ g_main_loop_quit(loop);
+ }
+}
+
+static void on_visible(AstalAuthPam *pam, const gchar *data) {
+ gchar passbuf[1024];
+ readpassphrase(data, passbuf, sizeof(passbuf), RPP_ECHO_ON);
+ astal_auth_pam_supply_secret(pam, passbuf);
+}
+
+static void on_hidden(AstalAuthPam *pam, const gchar *data) {
+ gchar passbuf[1024];
+ readpassphrase(data, passbuf, sizeof(passbuf), RPP_ECHO_OFF);
+ astal_auth_pam_supply_secret(pam, passbuf);
+}
+
+static void on_info(AstalAuthPam *pam, const gchar *data) {
+ g_print("info: %s\n", data);
+ astal_auth_pam_supply_secret(pam, NULL);
+}
+
+static void on_error(AstalAuthPam *pam, const gchar *data) {
+ g_print("error: %s\n", data);
+ astal_auth_pam_supply_secret(pam, NULL);
+}
+
+static void on_success(AstalAuthPam *pam) {
+ g_print("success\n");
+ g_object_unref(pam);
+ g_main_loop_quit(loop);
+}
+
+static void on_fail(AstalAuthPam *pam, const gchar *data) {
+ g_print("fail: %s\n", data);
+ authenticate(pam);
+}
+
+int main(void) {
+ GMainContext *loopctx = NULL;
+
+ loop = g_main_loop_new(loopctx, FALSE);
+
+ AstalAuthPam *pam = g_object_new(ASTAL_AUTH_TYPE_PAM, NULL);
+
+ g_signal_connect(pam, "auth-prompt-visible", G_CALLBACK(on_visible), NULL);
+ g_signal_connect(pam, "auth-prompt-hidden", G_CALLBACK(on_hidden), NULL);
+ g_signal_connect(pam, "auth-info", G_CALLBACK(on_info), NULL);
+ g_signal_connect(pam, "auth-error", G_CALLBACK(on_error), NULL);
+
+ g_signal_connect(pam, "success", G_CALLBACK(on_success), NULL);
+ g_signal_connect(pam, "fail", G_CALLBACK(on_fail), NULL);
+
+ authenticate(pam);
+
+ g_main_loop_run(loop);
+}