diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/full_example.c | 67 | ||||
-rw-r--r-- | examples/meson.build | 24 | ||||
-rw-r--r-- | examples/simple_example.c | 36 |
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); +} |