summaryrefslogtreecommitdiff
path: root/examples/full_example.c
diff options
context:
space:
mode:
authorkotontrion <[email protected]>2024-05-19 12:04:34 +0200
committerkotontrion <[email protected]>2024-05-19 12:04:34 +0200
commitd8802b1fa2c586d05c73e53fb541e1ef482a527e (patch)
tree0196108ca63c7e5b7b3a23296aa4508f916b536e /examples/full_example.c
parent3fc76b2f36e1bdebf2bd7a91af5469aff18ce852 (diff)
init 0.1.0
Diffstat (limited to 'examples/full_example.c')
-rw-r--r--examples/full_example.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/examples/full_example.c b/examples/full_example.c
new file mode 100644
index 0000000..5174edd
--- /dev/null
+++ b/examples/full_example.c
@@ -0,0 +1,67 @@
+#include "pam.h"
+#include <bsd/readpassphrase.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);
+}