summaryrefslogtreecommitdiff
path: root/clients/bokfctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/bokfctl.c')
-rw-r--r--clients/bokfctl.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/clients/bokfctl.c b/clients/bokfctl.c
index 1f1372c..b5ecf47 100644
--- a/clients/bokfctl.c
+++ b/clients/bokfctl.c
@@ -17,6 +17,7 @@ static void usage(void)
" (env BOKFD_SOCKET, default /run/bokfd/bokfd.sock)\n"
" --user NAME login user (env BOKFD_USER)\n"
" --password PW login password (env BOKFD_PASSWORD)\n"
+ " --token TOKEN API token instead of user/password (env BOKFD_TOKEN)\n"
" --org ID active org for this request\n"
" --version\n"
"\n"
@@ -39,6 +40,7 @@ int main(int argc, char **argv)
target = "/run/bokfd/bokfd.sock";
const char *user = getenv("BOKFD_USER");
const char *password = getenv("BOKFD_PASSWORD");
+ const char *token = getenv("BOKFD_TOKEN");
int64_t org = 0;
const char *cmd = NULL;
const char *args_json = NULL;
@@ -70,6 +72,14 @@ int main(int argc, char **argv)
return 2;
}
password = val;
+ } else if (!strncmp(a, "--token", 7) &&
+ (a[7] == '\0' || a[7] == '=')) {
+ val = a[7] == '=' ? a + 8 : (i + 1 < argc ? argv[++i] : NULL);
+ if (!val) {
+ fprintf(stderr, "bokfctl: --token requires a value\n");
+ return 2;
+ }
+ token = val;
} else if (!strncmp(a, "--org", 5) &&
(a[5] == '\0' || a[5] == '=')) {
val = a[5] == '=' ? a + 6 : (i + 1 < argc ? argv[++i] : NULL);
@@ -111,14 +121,19 @@ int main(int argc, char **argv)
char *session = NULL;
if (!is_local_cmd(cmd)) {
- if (!user || !password) {
+ char *lerr = NULL;
+ int login_rc;
+ if (token && *token) {
+ login_rc = client_token_login(&conn, token, &session, &lerr);
+ } else if (user && password) {
+ login_rc = client_login(&conn, user, password, &session, &lerr);
+ } else {
fprintf(stderr,
- "bokfctl: set BOKFD_USER and BOKFD_PASSWORD (or --user/--password) to log in\n");
+ "bokfctl: set BOKFD_TOKEN or BOKFD_USER/BOKFD_PASSWORD (or --token/--user/--password) to log in\n");
client_close(&conn);
return 2;
}
- char *lerr = NULL;
- if (client_login(&conn, user, password, &session, &lerr) != 0) {
+ if (login_rc != 0) {
fprintf(stderr, "%s\n", lerr ? lerr : "login failed");
int rc = lerr && lerr[0] == '{' ? 1 : 2;
free(lerr);