summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/full_example.c67
-rw-r--r--examples/meson.build24
-rw-r--r--examples/simple_example.c36
3 files changed, 127 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);
+}
diff --git a/examples/meson.build b/examples/meson.build
new file mode 100644
index 0000000..b02ed55
--- /dev/null
+++ b/examples/meson.build
@@ -0,0 +1,24 @@
+astal_auth = declare_dependency(
+ link_with : astal_auth_lib,
+ include_directories : astal_auth_inc)
+
+
+deps_example = [
+ dependency('gobject-2.0'),
+ dependency('libbsd'),
+ astal_auth
+]
+
+astal_auth_full_exmple = executable(
+ 'astal_auth_full_example',
+ files('full_example.c'),
+ build_by_default : get_option('examples'),
+ dependencies : deps_example,
+ install : false)
+
+astal_auth_simple_example = executable(
+ 'astal_auth_simple_example',
+ files('simple_example.c'),
+ build_by_default : get_option('examples'),
+ dependencies : deps_example,
+ install : false)
diff --git a/examples/simple_example.c b/examples/simple_example.c
new file mode 100644
index 0000000..e48bc78
--- /dev/null
+++ b/examples/simple_example.c
@@ -0,0 +1,36 @@
+#include <bsd/readpassphrase.h>
+#include "pam.h"
+
+GMainLoop *loop;
+
+void ready_callback(AstalAuthPam *pam,
+ GAsyncResult *res,
+ gpointer user_data) {
+ GError *error = NULL;
+ astal_auth_pam_authenticate_finish(res, &error);
+ if (error == NULL) {
+ g_print("success\n");
+ } else {
+ g_print("failure: %s\n", error->message);
+ g_error_free(error);
+ }
+
+ g_main_loop_quit(loop);
+}
+
+int main(void) {
+
+ GMainContext *loopctx = NULL;
+ loop = g_main_loop_new(loopctx, FALSE);
+
+ gchar *passbuf = calloc(1024, sizeof(gchar));
+ readpassphrase("Password: ", passbuf, 1024, RPP_ECHO_OFF);
+ astal_auth_pam_authenticate(passbuf,
+ (GAsyncReadyCallback) ready_callback,
+ NULL
+ );
+ g_free(passbuf);
+
+ g_main_loop_run(loop);
+ exit(EXIT_SUCCESS);
+}