diff options
Diffstat (limited to 'clients')
| -rw-r--r-- | clients/bokftui.c | 27 |
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; |
