summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorMichael Drake <michael.drake@codethink.co.uk>2018-08-14 11:15:44 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2018-08-15 07:29:58 +0100
commitc55a31aa110cd5f469a7758f63c0f0dbb26da2c9 (patch)
tree63c2de964b684d6102f434ee38f65661f5dad78a /frontends
parent97810d0c1aeab995d0b27c976c8d3e9e1a0c8b3f (diff)
downloadnetsurf-c55a31aa110cd5f469a7758f63c0f0dbb26da2c9.tar.gz
netsurf-c55a31aa110cd5f469a7758f63c0f0dbb26da2c9.tar.bz2
RISC OS: Update to new HTTP auth API.
Diffstat (limited to 'frontends')
-rw-r--r--frontends/riscos/401login.c77
-rw-r--r--frontends/riscos/gui.h8
2 files changed, 42 insertions, 43 deletions
diff --git a/frontends/riscos/401login.c b/frontends/riscos/401login.c
index 4b2deb16b..f14cdbbfb 100644
--- a/frontends/riscos/401login.c
+++ b/frontends/riscos/401login.c
@@ -43,7 +43,11 @@ static void ro_gui_401login_close(wimp_w w);
static bool ro_gui_401login_apply(wimp_w w);
static void ro_gui_401login_open(nsurl *url, lwc_string *host,
const char *realm,
- nserror (*cb)(bool proceed, void *pw), void *cbpw);
+ const char *username, const char *password,
+ nserror (*cb)(const char *username,
+ const char *password,
+ void *pw),
+ void *cbpw);
static wimp_window *dialog_401_template;
@@ -53,7 +57,9 @@ struct session_401 {
char uname[256]; /**< Buffer for username */
nsurl *url; /**< URL being fetched */
char pwd[256]; /**< Buffer for password */
- nserror (*cb)(bool proceed, void *pw); /**< Continuation callback */
+ nserror (*cb)(const char *username,
+ const char *password,
+ void *pw); /**< Continuation callback */
void *cbpw; /**< Continuation callback data */
};
@@ -72,12 +78,16 @@ void ro_gui_401login_init(void)
* Open the login dialog
*/
void gui_401login_open(nsurl *url, const char *realm,
- nserror (*cb)(bool proceed, void *pw), void *cbpw)
+ const char *username, const char *password,
+ nserror (*cb)(const char *username,
+ const char *password,
+ void *pw),
+ void *cbpw)
{
lwc_string *host = nsurl_get_component(url, NSURL_HOST);
assert(host != NULL);
- ro_gui_401login_open(url, host, realm, cb, cbpw);
+ ro_gui_401login_open(url, host, realm, username, password, cb, cbpw);
lwc_string_unref(host);
}
@@ -88,11 +98,19 @@ void gui_401login_open(nsurl *url, const char *realm,
*/
void ro_gui_401login_open(nsurl *url, lwc_string *host, const char *realm,
- nserror (*cb)(bool proceed, void *pw), void *cbpw)
+ const char *username, const char *password,
+ nserror (*cb)(const char *username,
+ const char *password,
+ void *pw),
+ void *cbpw)
{
struct session_401 *session;
+ size_t len;
wimp_w w;
- const char *auth;
+
+ assert(host != NULL);
+ assert(username != NULL);
+ assert(password != NULL);
session = calloc(1, sizeof(struct session_401));
if (!session) {
@@ -100,32 +118,23 @@ void ro_gui_401login_open(nsurl *url, lwc_string *host, const char *realm,
return;
}
- session->url = nsurl_ref(url);
if (realm == NULL)
realm = "Secure Area";
- auth = urldb_get_auth_details(session->url, realm);
- if (auth == NULL) {
- session->uname[0] = '\0';
- session->pwd[0] = '\0';
- } else {
- const char *pwd;
- size_t pwd_len;
-
- pwd = strchr(auth, ':');
- assert(pwd && pwd < auth + sizeof(session->uname));
- memcpy(session->uname, auth, pwd - auth);
- session->uname[pwd - auth] = '\0';
- ++pwd;
- pwd_len = strlen(pwd);
- assert(pwd_len < sizeof(session->pwd));
- memcpy(session->pwd, pwd, pwd_len);
- session->pwd[pwd_len] = '\0';
- }
+
+ session->url = nsurl_ref(url);
session->host = lwc_string_ref(host);
session->realm = strdup(realm);
session->cb = cb;
session->cbpw = cbpw;
+ len = strlen(username);
+ assert(len < sizeof(session->uname));
+ memcpy(session->uname, username, len + 1);
+
+ len = strlen(password);
+ assert(len < sizeof(session->pwd));
+ memcpy(session->pwd, password, len + 1);
+
if (!session->realm) {
nsurl_unref(session->url);
lwc_string_unref(session->host);
@@ -182,7 +191,7 @@ void ro_gui_401login_close(wimp_w w)
/* If ok didn't happen, send failure response */
if (session->cb != NULL)
- session->cb(false, session->cbpw);
+ session->cb(NULL, NULL, session->cbpw);
nsurl_unref(session->url);
lwc_string_unref(session->host);
@@ -205,26 +214,12 @@ void ro_gui_401login_close(wimp_w w)
bool ro_gui_401login_apply(wimp_w w)
{
struct session_401 *session;
- char *auth;
session = (struct session_401 *)ro_gui_wimp_event_get_user_data(w);
assert(session);
- auth = malloc(strlen(session->uname) + strlen(session->pwd) + 2);
- if (!auth) {
- NSLOG(netsurf, INFO, "calloc failed");
- ro_warn_user("NoMemory", 0);
- return false;
- }
-
- sprintf(auth, "%s:%s", session->uname, session->pwd);
-
- urldb_set_auth_details(session->url, session->realm, auth);
-
- free(auth);
-
- session->cb(true, session->cbpw);
+ session->cb(session->uname, session->pwd, session->cbpw);
/* Flag that we sent response by invalidating callback details */
session->cb = NULL;
diff --git a/frontends/riscos/gui.h b/frontends/riscos/gui.h
index 49a8ba417..b308c00c8 100644
--- a/frontends/riscos/gui.h
+++ b/frontends/riscos/gui.h
@@ -136,8 +136,12 @@ extern struct gui_download_table *riscos_download_table;
/* in 401login.c */
void ro_gui_401login_init(void);
-void gui_401login_open(struct nsurl *url, const char *realm,
- nserror (*cb)(bool proceed, void *pw), void *cbpw);
+void gui_401login_open(nsurl *url, const char *realm,
+ const char *username, const char *password,
+ nserror (*cb)(const char *username,
+ const char *password,
+ void *pw),
+ void *cbpw);
/* in schedule.c */
extern bool sched_active;