summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-18 12:54:16 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-18 12:54:16 +0200
commitc6869bb32bd0031118d9bdf8b8ce8a562eb18f8f (patch)
treed46b203da958e530e280e0ce8d6debc55b711c69
parent33b8635d06f785f9d088d4c9485d89f00898424a (diff)
downloadbokf-c6869bb32bd0031118d9bdf8b8ce8a562eb18f8f.tar.gz
bokf-c6869bb32bd0031118d9bdf8b8ce8a562eb18f8f.zip
bokftui: wait for the server before auto-login (reload during deploy)v0.1.19
-rw-r--r--clients/bokftui.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/clients/bokftui.c b/clients/bokftui.c
index 25e5464..ceaf525 100644
--- a/clients/bokftui.c
+++ b/clients/bokftui.c
@@ -4119,6 +4119,15 @@ static void config_save(const struct app *a)
chmod(path, 0600);
}
+static int server_reachable(const char *socket)
+{
+ struct client_conn c;
+ if (client_connect(socket, &c) != 0)
+ return 0;
+ client_close(&c);
+ return 1;
+}
+
/* Connects and opens a session. Returns 0 on success, -2 when the
connection failed and -1 when the server rejected the login. */
static int try_login(struct app *a, const char *user, const char *pass,
@@ -4399,6 +4408,19 @@ int main(int argc, char **argv)
const char *env_session = getenv("BOKFD_SESSION");
const char *session_arg = cli_session ? cli_session : env_session;
+ const char *token = getenv("BOKFD_TOKEN");
+ const char *env_pass = getenv("BOKFD_PASSWORD");
+ int have_auto = (session_arg && *session_arg) || (token && *token) ||
+ (app.username[0] && env_pass && *env_pass);
+ if (have_auto) {
+ for (int i = 0; i < 30; i++) {
+ if (server_reachable(app.socket))
+ break;
+ mvprintw(LINES / 2, 2, "Ansluter till servern... (%ds)", i + 1);
+ refresh();
+ sleep(1);
+ }
+ }
int stale_session = 0;
if (session_arg && *session_arg &&
client_connect(app.socket, &app.conn) == 0) {
@@ -4413,7 +4435,6 @@ int main(int argc, char **argv)
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)
@@ -4424,7 +4445,6 @@ int main(int argc, char **argv)
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) {