application/davcontroller.c

changeset 56
294d5515583a
parent 54
3ca3acefc66a
child 58
0d25f15e2625
--- 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;
 }
 
 

mercurial