summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clients/bokftui.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/clients/bokftui.c b/clients/bokftui.c
index a7bbf7c..1514126 100644
--- a/clients/bokftui.c
+++ b/clients/bokftui.c
@@ -46,6 +46,7 @@ struct app {
char socket[256];
char session[128];
char username[64];
+ char password[128]; /* typed or from BOKFD_PASSWORD, kept for Ctrl+R */
int64_t org;
char org_name[128];
char role[32];
@@ -3983,6 +3984,8 @@ static void do_reload(struct app *a, const char *self)
argv[n++] = g_reload_scene[0] ? g_reload_scene : g_scene;
argv[n] = NULL;
setenv("BOKFD_SESSION", a->session, 1);
+ if (a->password[0])
+ setenv("BOKFD_PASSWORD", a->password, 1);
endwin();
execvp(argv[0], argv);
fprintf(stderr, "bokftui: kunde inte ladda om: %s\n", strerror(errno));
@@ -4273,6 +4276,7 @@ static int login_screen(struct app *a)
free(err);
continue;
}
+ snprintf(a->password, sizeof a->password, "%s", pass);
config_save(a);
return 0;
}
@@ -4395,28 +4399,45 @@ int main(int argc, char **argv)
const char *env_session = getenv("BOKFD_SESSION");
const char *session_arg = cli_session ? cli_session : env_session;
+ int stale_session = 0;
if (session_arg && *session_arg &&
client_connect(app.socket, &app.conn) == 0) {
char *resp =
client_rpc(&app.conn, "session.whoami", session_arg, 0, NULL);
if (resp && client_ok(resp))
snprintf(app.session, sizeof app.session, "%s", session_arg);
- else
+ else {
+ stale_session = 1;
client_close(&app.conn);
+ }
free(resp);
}
const char *token = getenv("BOKFD_TOKEN");
if (!app.session[0] && token && *token) {
char *err = NULL;
- if (try_login(&app, NULL, NULL, token, &err) == 0) {
+ if (try_login(&app, NULL, NULL, token, &err) == 0)
config_save(&app);
- } else {
+ else {
message("Token", "Token-inloggning misslyckades: %s",
err ? err : "okänt fel");
free(err);
}
}
+ const char *env_pass = getenv("BOKFD_PASSWORD");
+ if (!app.session[0] && app.username[0] && env_pass && *env_pass) {
+ char *err = NULL;
+ if (try_login(&app, app.username, env_pass, NULL, &err) == 0) {
+ snprintf(app.password, sizeof app.password, "%s", env_pass);
+ config_save(&app);
+ } else {
+ message("Inloggning", "Automatisk inloggning misslyckades: %s",
+ err ? err : "okänt fel");
+ free(err);
+ }
+ }
+ if (!app.session[0] && stale_session)
+ message("Session", "Sessionen har gått ut, logga in igen.");
if (!app.session[0] && login_screen(&app) != 0) {
endwin();
return 0;