diff -r 1ce14068ef31 -r 294d5515583a application/davcontroller.c --- a/application/davcontroller.c Wed Oct 23 10:37:43 2024 +0200 +++ b/application/davcontroller.c Wed Oct 23 17:40:45 2024 +0200 @@ -93,8 +93,46 @@ char *dav_path = util_concat_path(browser->repo_base, path); ui_set(browser->path, dav_path); free(dav_path); + + SessionAuthData *auth = cxMalloc(sn->mp->allocator, sizeof(SessionAuthData)); + auth->obj = ui; + auth->cond = ui_condvar_create(); + auth->sn = sn; + auth->user = repo->user.value.ptr ? cx_strdup_a(sn->mp->allocator, cx_strcast(repo->user.value)).ptr : NULL; + auth->password = NULL; + dav_session_set_authcallback(sn, jobthr_davbrowser_auth, auth); + + davbrowser_query_path(ui, browser, path); +} - davbrowser_query_path(ui, browser, path); +// ------------------------------ davbrowser_auth ------------------------------ + +static int davbrowser_auth_dialog(void *data) { + SessionAuthData *auth = data; + auth_dialog(auth); + return 0; +} + +void davbrowser_auth_set_user_pwd(SessionAuthData *auth, const char *user, const char *password) { + dav_session_free(auth->sn, auth->user); + dav_session_free(auth->sn, auth->password); + auth->user = user ? dav_session_strdup(auth->sn, user) : NULL; + auth->password = password ? dav_session_strdup(auth->sn, password) : NULL; +} + +int jobthr_davbrowser_auth(DavSession *sn, void *data) { + SessionAuthData *auth = data; + + ui_call_mainthread(davbrowser_auth_dialog, auth); + ui_condvar_wait(auth->cond); + + if(auth->cond->intdata) { + dav_session_set_auth(sn, auth->user, auth->password); + } + dav_session_free(auth->sn, auth->password); + auth->password = NULL; + + return 0; }