diff options
| author | Anders Betts <anders.betts@gmail.com> | 2026-09-18 10:58:49 +0200 |
|---|---|---|
| committer | Anders Betts <anders.betts@gmail.com> | 2026-09-18 10:58:49 +0200 |
| commit | f60f0dde660df10233db52bd8ea10481a01f26ce (patch) | |
| tree | d17b73b4f7f90864f09f5991a933257b21a7e3d6 /clients/bokftui.c | |
| parent | d3964826a83e55d493a4454e07f812f6e2997153 (diff) | |
| download | bokf-f60f0dde660df10233db52bd8ea10481a01f26ce.tar.gz bokf-f60f0dde660df10233db52bd8ea10481a01f26ce.zip | |
bokftui: recover from expired sessions; carry the password across Ctrl+Rv0.1.17
- stale BOKFD_SESSION falls back to token/password auto-login and shows
a message before the login screen when neither is available
- the password typed this session is handed to the re-exec'd process
Diffstat (limited to 'clients/bokftui.c')
| -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; |
