summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
Diffstat (limited to 'amiga')
-rwxr-xr-xamiga/login.c21
-rwxr-xr-xamiga/login.h8
-rw-r--r--amiga/sslcert.c28
3 files changed, 43 insertions, 14 deletions
diff --git a/amiga/login.c b/amiga/login.c
index 66c3d326d..bfa373926 100755
--- a/amiga/login.c
+++ b/amiga/login.c
@@ -39,17 +39,18 @@
#include <images/label.h>
#include <reaction/reaction_macros.h>
-void gui_401login_open(struct browser_window *bw, hlcache_handle *c,
- const char *realm)
+void gui_401login_open(const char *url, const char *realm,
+ nserror (*cb)(bool proceed, void *pw), void *cbpw)
{
struct gui_login_window *lw = AllocVec(sizeof(struct gui_login_window),MEMF_PRIVATE | MEMF_CLEAR);
char *host;
- url_host(content_get_url(c), &host);
+ url_host(url, &host);
lw->host = host;
- lw->url = content_get_url(c);
+ lw->url = url;
lw->realm = (char *)realm;
- lw->bw = bw;
+ lw->cb = cb;
+ lw->cbpw = cbpw;
lw->objects[OID_MAIN] = WindowObject,
WA_ScreenTitle,nsscreentitle,
@@ -126,6 +127,10 @@ void gui_401login_open(struct browser_window *bw, hlcache_handle *c,
void ami_401login_close(struct gui_login_window *lw)
{
+ /* If continuation exists, then forbid refetch */
+ if (lw->cb != NULL)
+ lw->cb(false, lw->cbpw);
+
DisposeObject(lw->objects[OID_MAIN]);
free(lw->host);
DelObject(lw->node);
@@ -143,7 +148,11 @@ void ami_401login_login(struct gui_login_window *lw)
urldb_set_auth_details(lw->url,lw->realm,userpass);
FreeVec(userpass);
- browser_window_go(lw->bw,lw->url,0,true);
+ lw->cb(true, lw->cbpw);
+
+ /* Invalidate continuation */
+ lw->cb = NULL;
+ lw->cbpw = NULL;
ami_401login_close(lw);
}
diff --git a/amiga/login.h b/amiga/login.h
index 1f0236d72..82fe3d5f8 100755
--- a/amiga/login.h
+++ b/amiga/login.h
@@ -18,11 +18,17 @@
#ifndef AMIGA_LOGIN_H
#define AMIGA_LOGIN_H
+
+#include <stdbool.h>
+
+#include "utils/errors.h"
+
struct gui_login_window {
struct nsObject *node;
struct Window *win;
Object *objects[GID_LAST];
- struct browser_window *bw;
+ nserror (*cb)(bool proceed, void *pw);
+ void *cbpw;
char *url;
char *realm;
char *host;
diff --git a/amiga/sslcert.c b/amiga/sslcert.c
index 41b51a20a..c02329449 100644
--- a/amiga/sslcert.c
+++ b/amiga/sslcert.c
@@ -21,6 +21,7 @@
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/utility.h>
+#include "utils/errors.h"
#include "utils/utils.h"
#include "utils/messages.h"
#include "content/urldb.h"
@@ -32,7 +33,8 @@
struct session_data {
struct session_cert *certs;
unsigned long num;
- struct browser_window *bw;
+ nserror (*cb)(bool proceed, void *pw);
+ void *cbpw;
char *url;
struct tree *tree;
};
@@ -47,8 +49,9 @@ struct session_cert {
void ami_gui_cert_close(struct session_data *data);
bool ami_gui_cert_apply(struct session_data *session);
-void gui_cert_verify(struct browser_window *bw, hlcache_handle *c,
- const struct ssl_cert_info *certs, unsigned long num)
+void gui_cert_verify(const char *url,
+ const struct ssl_cert_info *certs, unsigned long num,
+ nserror (*cb)(bool proceed, void *pw), void *cbpw)
{
const struct ssl_cert_info *from;
struct session_cert *to;
@@ -60,7 +63,7 @@ void gui_cert_verify(struct browser_window *bw, hlcache_handle *c,
int res = 0;
struct treeview_window *twin;
- assert(bw && c && certs);
+ assert(certs);
/* copy the certificate information */
data = calloc(1, sizeof(struct session_data));
@@ -68,13 +71,14 @@ void gui_cert_verify(struct browser_window *bw, hlcache_handle *c,
warn_user("NoMemory", 0);
return;
}
- data->url = strdup(content_get_url(c));
+ data->url = strdup(url);
if (!data->url) {
free(data);
warn_user("NoMemory", 0);
return;
}
- data->bw = bw;
+ data->cb = cb;
+ data->cbpw = cbpw;
data->num = num;
data->certs = calloc(num, sizeof(struct session_cert));
if (!data->certs) {
@@ -205,6 +209,10 @@ void ami_gui_cert_close(struct session_data *data)
}
*/
+ /* Send failure if callback exists */
+ if (data->cb != NULL)
+ data->cb(false, data->cbpw);
+
if (data->tree) {
tree_delete_node(data->tree, data->tree->root, false);
free(data->tree);
@@ -220,6 +228,12 @@ bool ami_gui_cert_apply(struct session_data *session)
assert(session);
urldb_set_cert_permissions(session->url, true);
- browser_window_go(session->bw, session->url, 0, true);
+
+ session->cb(true, session->cbpw);
+
+ /* Invalidate callback */
+ session->cb = NULL;
+ session->cbpw = NULL;
+
return true;
}