X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fauth.c;h=fc0da9507a8253d1857fa0198e2e20c4c683b795;hb=8e165dd308679f195af8614d62dbdb4e43238495;hp=22dbcfbf29911dba2adc680d3c004189487f6a80;hpb=f8f14fab4d4a851c271528df8f0a33a2a17e5b04;p=citadel.git diff --git a/webcit/auth.c b/webcit/auth.c index 22dbcfbf2..fc0da9507 100644 --- a/webcit/auth.c +++ b/webcit/auth.c @@ -63,7 +63,7 @@ void display_openid_name_request(const StrBuf *claimed_id, const StrBuf *usernam StrBuf *Buf = NULL; output_headers(1, 1, 2, 0, 0, 0); - wprintf("
\n"); + wc_printf("
\n"); Buf = NewStrBufPlain(NULL, StrLength(claimed_id)); StrEscAppend(Buf, claimed_id, NULL, 0, 0); @@ -74,7 +74,7 @@ void display_openid_name_request(const StrBuf *claimed_id, const StrBuf *usernam if (StrLength(username) > 0) { Buf = NewStrBufPlain(NULL, StrLength(username)); - StrEscAppend(Buf, claimed_id, NULL, 0, 0); + StrEscAppend(Buf, username, NULL, 0, 0); svprintf(HKEY("REASON"), WCS_STRING, _("However, the user name '%s' conflicts with an existing user."), ChrPtr(Buf)); @@ -173,8 +173,6 @@ void do_login(void) wcsession *WCC = WC; StrBuf *Buf; - lprintf(9, "SELECTED LANGUAGE: '%s'\n", bstr("language")); - if (havebstr("language")) { set_selected_language(bstr("language")); go_selected_language(); @@ -508,14 +506,16 @@ void do_welcome(void) */ if (!get_preference("startpage", &Buf)) { Buf = NewStrBuf (); - StrBufPrintf(Buf, "dotskip&room=_BASEROOM_"); + StrBufPrintf(Buf, "dotskip?room=_BASEROOM_"); set_preference("startpage", Buf, 1); } if (ChrPtr(Buf)[0] == '/') { StrBufCutLeft(Buf, 1); } - if (StrLength(Buf) == 0) + if (StrLength(Buf) == 0) { StrBufAppendBufPlain(Buf, "dotgoto?room=_BASEROOM_", -1, 0); + } + lprintf(9, "Redirecting to user's start page: %s\n", ChrPtr(Buf)); http_redirect(ChrPtr(Buf)); } @@ -550,11 +550,11 @@ void do_logout(void) /** Calling output_headers() this way causes the cookies to be un-set */ output_headers(1, 1, 0, 1, 0, 0); - wprintf("
"); - wprintf("
"); - wprintf("
"); - wprintf(_("Log off")); - wprintf("
"); + wc_printf("
"); + wc_printf("
"); + wc_printf("
"); + wc_printf(_("Log off")); + wc_printf("
"); serv_puts("MESG goodbye"); serv_getln(buf, sizeof buf); @@ -562,34 +562,34 @@ void do_logout(void) if (buf[0] == '1') { fmout("CENTER"); } else { - wprintf("Goodbye\n"); + wc_printf("Goodbye\n"); } } else { - wprintf(_("This program was unable to connect or stay " + wc_printf(_("This program was unable to connect or stay " "connected to the Citadel server. Please report " "this problem to your system administrator.") ); - wprintf("%s", _("Read More...")); } - wprintf("
" + wc_printf("
" ""); - wprintf(_("Log in again")); - wprintf(""); + wc_printf(_("Log in again")); + wc_printf(""); /* The "close window" link is commented out because some browsers don't * allow it to work. * - wprintf("   " + wc_printf("   " ""); - wprintf(_("Close window")); - wprintf(""); + wc_printf(_("Close window")); + wc_printf(""); */ - wprintf("
\n"); + wc_printf("
\n"); wDumpContent(2); end_webcit_session(); } @@ -606,13 +606,13 @@ void validate(void) int a; output_headers(1, 1, 2, 0, 0, 0); - wprintf("
\n"); - wprintf("

"); - wprintf(_("Validate new users")); - wprintf("

"); - wprintf("
\n"); + wc_printf("
\n"); + wc_printf("

"); + wc_printf(_("Validate new users")); + wc_printf("

"); + wc_printf("
\n"); - wprintf("
\n"); + wc_printf("
\n"); /* If the user just submitted a validation, process it... */ safestrncpy(buf, bstr("user"), sizeof buf); @@ -621,7 +621,7 @@ void validate(void) serv_printf("VALI %s|%s", buf, bstr("axlevel")); serv_getln(buf, sizeof buf); if (buf[0] != '2') { - wprintf("%s
\n", &buf[4]); + wc_printf("%s
\n", &buf[4]); } } } @@ -630,21 +630,21 @@ void validate(void) serv_puts("GNUR"); serv_getln(buf, sizeof buf); if (buf[0] == '2') { - wprintf(""); - wprintf(_("No users require validation at this time.")); - wprintf("
\n"); + wc_printf(""); + wc_printf(_("No users require validation at this time.")); + wc_printf("
\n"); wDumpContent(1); return; } if (buf[0] != '3') { - wprintf("%s
\n", &buf[4]); + wc_printf("%s
\n", &buf[4]); wDumpContent(1); return; } - wprintf("
" + wc_printf("
" "
\n"); - wprintf("
"); + wc_printf("
"); safestrncpy(user, &buf[4], sizeof user); serv_printf("GREG %s", user); @@ -655,7 +655,7 @@ void validate(void) serv_getln(buf, sizeof buf); ++a; if (a == 1) - wprintf("#%s

%s

", + wc_printf("#%s

%s

", buf, &cmd[4]); if (a == 2) { char *pch; @@ -692,41 +692,41 @@ void validate(void) pch = _("strong"); } - wprintf("PW: %s
\n", pch); + wc_printf("PW: %s
\n", pch); } if (a == 3) - wprintf("%s
\n", buf); + wc_printf("%s
\n", buf); if (a == 4) - wprintf("%s
\n", buf); + wc_printf("%s
\n", buf); if (a == 5) - wprintf("%s, ", buf); + wc_printf("%s, ", buf); if (a == 6) - wprintf("%s ", buf); + wc_printf("%s ", buf); if (a == 7) - wprintf("%s
\n", buf); + wc_printf("%s
\n", buf); if (a == 8) - wprintf("%s
\n", buf); + wc_printf("%s
\n", buf); if (a == 9) - wprintf(_("Current access level: %d (%s)\n"), + wc_printf(_("Current access level: %d (%s)\n"), atoi(buf), axdefs[atoi(buf)]); } while (strcmp(buf, "000")); } else { - wprintf("

%s

%s
\n", user, &cmd[4]); + wc_printf("

%s

%s
\n", user, &cmd[4]); } - wprintf("
"); - wprintf(_("Select access level for this user:")); - wprintf("
\n"); + wc_printf("
"); + wc_printf(_("Select access level for this user:")); + wc_printf("
\n"); for (a = 0; a <= 6; ++a) { - wprintf("nonce); + wc_printf("nonce); urlescputs(user); - wprintf("&axlevel=%d\">%s   \n", + wc_printf("&axlevel=%d\">%s   \n", a, axdefs[a]); } - wprintf("
\n"); + wc_printf("
\n"); - wprintf("
\n"); - wprintf("
\n"); + wc_printf("
\n"); + wc_printf("
\n"); wDumpContent(1); } @@ -741,14 +741,19 @@ void validate(void) void display_reg(int during_login) { StrBuf *Buf; - message_summary *VCMsg; - wc_mime_attachment *VCAtt; + message_summary *VCMsg = NULL; + wc_mime_attachment *VCAtt = NULL; long vcard_msgnum; Buf = NewStrBuf(); if (goto_config_room(Buf) != 0) { - if (during_login) do_welcome(); - else display_main_menu(); + lprintf(9, "display_reg() exiting because goto_config_room() failed\n"); + if (during_login) { + do_welcome(); + } + else { + display_main_menu(); + } FreeStrBuf(&Buf); return; } @@ -756,8 +761,13 @@ void display_reg(int during_login) FreeStrBuf(&Buf); vcard_msgnum = locate_user_vcard_in_this_room(&VCMsg, &VCAtt); if (vcard_msgnum < 0L) { - if (during_login) do_welcome(); - else display_main_menu(); + lprintf(9, "display_reg() exiting because locate_user_vcard_in_this_room() failed\n"); + if (during_login) { + do_welcome(); + } + else { + display_main_menu(); + } return; } @@ -765,9 +775,14 @@ void display_reg(int during_login) do_edit_vcard(vcard_msgnum, "1", VCMsg, VCAtt, "do_welcome", USERCONFIGROOM); } else { - do_edit_vcard(vcard_msgnum, "1", VCMsg, VCAtt, "display_main_menu", USERCONFIGROOM); + StrBuf *ReturnTo; + ReturnTo = NewStrBufPlain(HKEY("display_main_menu?gotofirst=")); + StrBufAppendBuf(ReturnTo, WC->wc_roomname, 0); + do_edit_vcard(vcard_msgnum, "1", VCMsg, VCAtt, ChrPtr(ReturnTo), USERCONFIGROOM); + FreeStrBuf(&ReturnTo); } + /* FIXME - don't we have to free VCMsg and VCAtt ?? */ } @@ -792,7 +807,7 @@ void display_changepw(void) FreeStrBuf(&Buf); if (!IsEmptyStr(WC->ImportantMessage)) { - wprintf("" + wc_printf("" "%s
\n", WC->ImportantMessage); safestrncpy(WC->ImportantMessage, "", sizeof WC->ImportantMessage); } @@ -803,25 +818,25 @@ void display_changepw(void) fmout("CENTER"); } - wprintf("
\n"); - wprintf("\n", WC->nonce); - wprintf("\n"); - wprintf("\n"); - wprintf("
"); - wprintf(_("Enter new password:")); - wprintf(""); - wprintf("
"); - wprintf(_("Enter it again to confirm:")); - wprintf(""); - wprintf("
\n"); - - wprintf("
\n"); - wprintf("", _("Change password")); - wprintf(" "); - wprintf("\n", _("Cancel")); - wprintf("
\n"); - wprintf("
\n"); + wc_printf("
\n"); + wc_printf("\n", WC->nonce); + wc_printf("\n"); + wc_printf("\n"); + wc_printf("
"); + wc_printf(_("Enter new password:")); + wc_printf(""); + wc_printf("
"); + wc_printf(_("Enter it again to confirm:")); + wc_printf(""); + wc_printf("
\n"); + + wc_printf("
\n"); + wc_printf("", _("Change password")); + wc_printf(" "); + wc_printf("\n", _("Cancel")); + wc_printf("
\n"); + wc_printf("
\n"); do_template("endbox", NULL); wDumpContent(1); @@ -892,11 +907,14 @@ int ConditionalRoomAide(StrBuf *Target, WCTemplputParams *TP) return (WCC != NULL)? (WCC->is_room_aide == 0) : 0; } + int ConditionalIsLoggedIn(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; return (WCC != NULL)? (WCC->logged_in == 0) : 0; } + + int ConditionalRoomAcessDelete(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; @@ -904,9 +922,15 @@ int ConditionalRoomAcessDelete(StrBuf *Target, WCTemplputParams *TP) } +void _display_openid_login(void) { + display_openid_login(NULL); +} + + +void _display_reg(void) { + display_reg(0); +} -void _display_openid_login(void) {display_openid_login(NULL);} -void _display_reg(void) {display_reg(0);} void Header_HandleAuth(StrBuf *Line, ParsedHttpHdrs *hdr) { @@ -933,7 +957,10 @@ void CheckAuthBasic(ParsedHttpHdrs *hdr) StrBufAppendBufPlain(hdr->HR.plainauth, HKEY(":"), 0); StrBufAppendBuf(hdr->HR.plainauth, hdr->HR.user_agent, 0); hdr->HR.SessionKey = hashlittle(SKEY(hdr->HR.plainauth), 89479832); - +/* + lprintf(1, "CheckAuthBasic: calculated sessionkey %ld\n", + hdr->HR.SessionKey); +*/ } void GetAuthBasic(ParsedHttpHdrs *hdr) @@ -964,14 +991,6 @@ void Header_HandleCookie(StrBuf *Line, ParsedHttpHdrs *hdr) StrBufCutLeft(hdr->HR.RawCookie, (pch - ChrPtr(hdr->HR.RawCookie)) + 7); StrBufDecodeHex(hdr->HR.RawCookie); - if (hdr->c_username == NULL) - hdr->c_username = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_USER)); - if (hdr->c_password == NULL) - hdr->c_password = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_PASS)); - if (hdr->c_roomname == NULL) - hdr->c_roomname = NewStrBuf(); - if (hdr->c_language == NULL) - hdr->c_language = NewStrBuf(); cookie_to_stuff(Line, &hdr->HR.desired_session, hdr->c_username, hdr->c_password, @@ -981,6 +1000,25 @@ void Header_HandleCookie(StrBuf *Line, ParsedHttpHdrs *hdr) hdr->HR.got_auth = AUTH_COOKIE; } +void +HttpNewModule_AUTH +(ParsedHttpHdrs *httpreq) +{ + httpreq->c_username = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_USER)); + httpreq->c_password = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_PASS)); + httpreq->c_roomname = NewStrBuf(); + httpreq->c_language = NewStrBuf(); +} +void +HttpDetachModule_AUTH +(ParsedHttpHdrs *httpreq) +{ + FLUSHStrBuf(httpreq->c_username); + FLUSHStrBuf(httpreq->c_password); + FLUSHStrBuf(httpreq->c_roomname); + FLUSHStrBuf(httpreq->c_language); +} + void HttpDestroyModule_AUTH (ParsedHttpHdrs *httpreq) @@ -998,19 +1036,19 @@ InitModule_AUTH RegisterHeaderHandler(HKEY("COOKIE"), Header_HandleCookie); RegisterHeaderHandler(HKEY("AUTHORIZATION"), Header_HandleAuth); - WebcitAddUrlHandler(HKEY(""), do_welcome, ANONYMOUS|COOKIEUNNEEDED); /* no url pattern at all? Show login. */ - WebcitAddUrlHandler(HKEY("do_welcome"), do_welcome, ANONYMOUS|COOKIEUNNEEDED); - WebcitAddUrlHandler(HKEY("login"), do_login, ANONYMOUS|COOKIEUNNEEDED); - WebcitAddUrlHandler(HKEY("display_openid_login"), _display_openid_login, ANONYMOUS); - WebcitAddUrlHandler(HKEY("openid_login"), do_openid_login, ANONYMOUS); - WebcitAddUrlHandler(HKEY("finalize_openid_login"), finalize_openid_login, ANONYMOUS); - WebcitAddUrlHandler(HKEY("openid_manual_create"), openid_manual_create, ANONYMOUS); - WebcitAddUrlHandler(HKEY("do_logout"), do_logout, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); - WebcitAddUrlHandler(HKEY("validate"), validate, 0); - WebcitAddUrlHandler(HKEY("display_reg"), _display_reg, 0); - WebcitAddUrlHandler(HKEY("display_changepw"), display_changepw, 0); - WebcitAddUrlHandler(HKEY("changepw"), changepw, 0); - WebcitAddUrlHandler(HKEY("termquit"), do_logout, 0); + WebcitAddUrlHandler(HKEY(""), "", 0, do_welcome, ANONYMOUS|COOKIEUNNEEDED); /* no url pattern at all? Show login. */ + WebcitAddUrlHandler(HKEY("do_welcome"), "", 0, do_welcome, ANONYMOUS|COOKIEUNNEEDED); + WebcitAddUrlHandler(HKEY("login"), "", 0, do_login, ANONYMOUS|COOKIEUNNEEDED); + WebcitAddUrlHandler(HKEY("display_openid_login"), "", 0, _display_openid_login, ANONYMOUS); + WebcitAddUrlHandler(HKEY("openid_login"), "", 0, do_openid_login, ANONYMOUS); + WebcitAddUrlHandler(HKEY("finalize_openid_login"), "", 0, finalize_openid_login, ANONYMOUS); + WebcitAddUrlHandler(HKEY("openid_manual_create"), "", 0, openid_manual_create, ANONYMOUS); + WebcitAddUrlHandler(HKEY("do_logout"), "", 0, do_logout, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); + WebcitAddUrlHandler(HKEY("validate"), "", 0, validate, 0); + WebcitAddUrlHandler(HKEY("display_reg"), "", 0, _display_reg, 0); + WebcitAddUrlHandler(HKEY("display_changepw"), "", 0, display_changepw, 0); + WebcitAddUrlHandler(HKEY("changepw"), "", 0, changepw, 0); + WebcitAddUrlHandler(HKEY("termquit"), "", 0, do_logout, 0); RegisterConditional(HKEY("COND:AIDE"), 2, ConditionalAide, CTX_NONE); RegisterConditional(HKEY("COND:ROOMAIDE"), 2, ConditionalRoomAide, CTX_NONE);