#include "webserver.h"
#include <ctype.h>
+
+void display_reg(int during_login);
+
/*
* Access level definitions. This is initialized from a function rather than a
* static array so that the strings may be localized.
* Display the login screen
* mesg = the error message if last attempt failed.
*/
-void display_login(char *mesg)
+void display_login(void)
{
- char buf[SIZ];
-
- output_headers(1, 1, 2, 0, 0, 0);
- wprintf("<div id=\"login_screen\">\n");
-
- if (mesg != NULL) if (!IsEmptyStr(mesg)) {
- stresc(buf, SIZ, mesg, 0, 0);
- svprintf(HKEY("MESG"), WCS_STRING, "%s", buf);
- }
-
- svprintf(HKEY("LOGIN_INSTRUCTIONS"), WCS_STRING,
- _("<ul>"
- "<li><b>If you already have an account on %s</b>, "
- "enter your user name and password and click "Login." "
- "<li><b>If you are a new user</b>, enter the name and password "
- "you wish to use, "
- "and click "New User." "
- "<li>Please log off properly when finished. "
- "<li>You must use a browser that supports <i>frames</i> and "
- "<i>cookies</i>. "
- "<li>Also keep in mind that if your browser is "
- "configured to block pop-up windows, you will not be able "
- "to receive any instant messages.<br />"
- "</ul>"),
- serv_info.serv_humannode
- );
-
- svput("USERNAME_BOX", WCS_STRING, _("User name:"));
- svput("PASSWORD_BOX", WCS_STRING, _("Password:"));
- svput("LANGUAGE_BOX", WCS_STRING, _("Language:"));
- svput("LOGIN_BUTTON", WCS_STRING, _("Login"));
- svput("NEWUSER_BUTTON", WCS_STRING, _("New User"));
- svput("EXIT_BUTTON", WCS_STRING, _("Exit"));
- svput("HELLO", WCS_SERVCMD, "MESG hello");
- svprintf(HKEY("BOXTITLE"), WCS_STRING, _("%s - powered by <a href=\"http://www.citadel.org\">Citadel</a>"),
- serv_info.serv_humannode);
- svcallback("DO_LANGUAGE_BOX", offer_languages);
- if (serv_info.serv_newuser_disabled) {
- svput("NEWUSER_BUTTON_PRE", WCS_STRING, "<div style=\"display:none;\">");
- svput("NEWUSER_BUTTON_POST", WCS_STRING, "</div>");
- }
- else {
- svput("NEWUSER_BUTTON_PRE", WCS_STRING, "");
- svput("NEWUSER_BUTTON_POST", WCS_STRING, "");
- }
-
- if (serv_info.serv_supports_openid) {
- svprintf(HKEY("OFFER_OPENID_LOGIN"), WCS_STRING,
- "<div align=center>"
- "<a href=\"display_openid_login\">"
- "<img src=\"static/openid-small.gif\" border=0 valign=middle>"
- "%s</a>"
- "</div>"
- ,
- "Log in using OpenID"
- );
- }
- else {
- svput("OFFER_OPENID_LOGIN", WCS_STRING, "");
- }
-
- do_template("login");
-
- wDumpContent(2);
+ begin_burst();
+ output_headers(1, 0, 0, 0, 1, 0);
+ do_template("login", NULL);
+ end_burst();
}
output_headers(1, 1, 2, 0, 0, 0);
wprintf("<div id=\"login_screen\">\n");
- if (mesg != NULL) if (!IsEmptyStr(mesg)) {
- stresc(buf, SIZ, mesg, 0, 0);
- svprintf(HKEY("MESG"), WCS_STRING, "%s", buf);
+ if ((mesg != NULL) && (!IsEmptyStr(mesg))) {
+ stresc(buf, SIZ, mesg, 0, 0);
+ svprintf(HKEY("MESG"), WCS_STRING, "%s", buf);
}
svprintf(HKEY("LOGIN_INSTRUCTIONS"), WCS_STRING,
"</ul>")
);
- svput("OPENID_BOX", WCS_STRING, _("OpenID URL:"));
- svput("LANGUAGE_BOX", WCS_STRING, _("Language:"));
- svput("LOGIN_BUTTON", WCS_STRING, _("Login"));
- svput("EXIT_BUTTON", WCS_STRING, _("Exit"));
svput("HELLO", WCS_SERVCMD, "MESG hello");
- svprintf(HKEY("BOXTITLE"), WCS_STRING, _("%s - powered by <a href=\"http://www.citadel.org\">Citadel</a>"),
- serv_info.serv_humannode);
- svcallback("DO_LANGUAGE_BOX", offer_languages);
-
+
svprintf(HKEY("OFFER_CONVENTIONAL_LOGIN"), WCS_STRING,
"<div align=center>"
"<a href=\"display_login\">"
"Log in using a user name and password"
);
- do_template("openid_login");
+ do_template("openid_login", NULL);
wDumpContent(2);
}
svprintf(HKEY("BOXTITLE"), WCS_STRING, _("%s - powered by <a href=\"http://www.citadel.org\">Citadel</a>"),
serv_info.serv_humannode);
- do_template("openid_manual_create");
+ do_template("openid_manual_create", NULL);
wDumpContent(2);
}
void become_logged_in(char *user, char *pass, char *serv_response)
{
char buf[SIZ];
+ StrBuf *FloorDiv;
WC->logged_in = 1;
extract_token(WC->wc_fullname, &serv_response[4], 0, '|', sizeof WC->wc_fullname);
extract_token(WC->cs_inet_email, &buf[4], 3, '|', sizeof WC->cs_inet_email);
}
- get_preference("current_iconbar", buf, sizeof buf);
- WC->current_iconbar = atoi(buf);
+ get_pref_long("current_iconbar", &WC->current_iconbar, current_iconbar_menu);
- get_preference("floordiv_expanded", WC->floordiv_expanded, sizeof WC->floordiv_expanded);
+ get_preference("floordiv_expanded", &FloorDiv);
+ WC->floordiv_expanded = FloorDiv;
}
*/
void do_login(void)
{
+ wcsession *WCC = WC;
char buf[SIZ];
if (havebstr("language")) {
if (buf[0] == '2') {
become_logged_in(bstr("name"), bstr("pass"), buf);
} else {
- display_login(&buf[4]);
+ snprintf(WCC->ImportantMessage,
+ sizeof (WCC->ImportantMessage),
+ "%s",
+ &buf[4]);
+ display_login();
return;
}
} else {
- display_login(&buf[4]);
+ snprintf(WCC->ImportantMessage,
+ sizeof (WCC->ImportantMessage),
+ "%s",
+ &buf[4]);
+ display_login();
return;
}
}
if (havebstr("newuser_action")) {
if (!havebstr("pass")) {
- display_login(_("Blank passwords are not allowed."));
+ snprintf(WCC->ImportantMessage,
+ sizeof (WCC->ImportantMessage),
+ "%s",
+ _("Blank passwords are not allowed."));
+ display_login();
return;
}
serv_printf("NEWU %s", bstr("name"));
serv_printf("SETP %s", bstr("pass"));
serv_getln(buf, sizeof buf);
} else {
- display_login(&buf[4]);
+ snprintf(WCC->ImportantMessage,
+ sizeof (WCC->ImportantMessage),
+ "%s",
+ &buf[4]);
+ display_login();
return;
}
}
- if (WC->logged_in) {
- if (WC->need_regi) {
+ if (WCC->logged_in) {
+ set_preference("language", NewStrBufPlain(bstr("language"), -1), 1);
+ if (WCC->need_regi) {
display_reg(1);
- } else if (WC->need_vali) {
+ } else if (WCC->need_vali) {
validate();
} else {
do_welcome();
}
} else {
- display_login(_("Your password was not accepted."));
+ snprintf(WCC->ImportantMessage,
+ sizeof (WCC->ImportantMessage),
+ "%s",
+ _("Your password was not accepted."));
+ display_login();
}
}
*/
void openid_manual_create(void)
{
+ char buf[1024];
+
if (havebstr("exit_action")) {
do_logout();
return;
}
- char buf[1024];
if (havebstr("newuser_action")) {
serv_printf("OIDC %s", bstr("name"));
serv_getln(buf, sizeof buf);
void finalize_openid_login(void)
{
char buf[1024];
- struct wcsession *WCC = WC;
+ wcsession *WCC = WC;
int already_logged_in = (WCC->logged_in) ;
int linecount = 0;
char result[128] = "";
urlcontent *u;
void *U;
long HKLen;
- char *HKey;
+ const char *HKey;
HashPos *Cursor;
- Cursor = GetNewHashPos ();
+ Cursor = GetNewHashPos (WCC->urlstrings, 0);
while (GetNextHashPos(WCC->urlstrings, Cursor, &HKLen, &HKey, &U)) {
u = (urlcontent*) U;
if (!strncasecmp(u->url_key, "openid.", 7)) {
- serv_printf("%s|%s", &u->url_key[7], u->url_data);
+ serv_printf("%s|%s", &u->url_key[7], ChrPtr(u->url_data));
}
}
*/
void do_welcome(void)
{
- char buf[SIZ];
+ StrBuf *Buf;
#ifdef XXX_NOT_FINISHED_YET_XXX
FILE *fp;
int i;
/*
* Go to the user's preferred start page
*/
- get_preference("startpage", buf, sizeof buf);
- if (IsEmptyStr(buf)) {
- safestrncpy(buf, "dotskip&room=_BASEROOM_", sizeof buf);
- set_preference("startpage", buf, 1);
+ if (!get_preference("startpage", &Buf)) {
+ Buf = NewStrBuf ();
+ StrBufPrintf(Buf, "dotskip&room=_BASEROOM_");
+ set_preference("startpage", Buf, 1);
}
- if (buf[0] == '/') {
- strcpy(buf, &buf[1]);
+ if (ChrPtr(Buf)[0] == '/') {
+ StrBufCutLeft(Buf, 1);
}
- http_redirect(buf);
+ if (StrLength(Buf) == 0)
+ StrBufAppendBufPlain(Buf, "dotgoto?room=_BASEROOM_", -1, 0);
+ http_redirect(ChrPtr(Buf));
}
* Disconnect from the Citadel server, and end this WebCit session
*/
void end_webcit_session(void) {
- char buf[256];
-
+
if (WC->logged_in) {
- sprintf(buf, "%d", WC->current_iconbar);
- set_preference("current_iconbar", buf, 0);
- set_preference("floordiv_expanded", WC->floordiv_expanded, 1);
+ set_pref_long("current_iconbar", WC->current_iconbar, 0);
}
serv_puts("QUIT");
wprintf(_("Select access level for this user:"));
wprintf("<br />\n");
for (a = 0; a <= 6; ++a) {
- wprintf("<a href=\"validate?nonce=%ld?user=", WC->nonce);
+ wprintf("<a href=\"validate?nonce=%d?user=", WC->nonce);
urlescputs(user);
wprintf("&axlevel=%d\">%s</A> \n",
a, axdefs[a]);
void display_changepw(void)
{
char buf[SIZ];
-
+ StrBuf *Buf;
output_headers(1, 1, 1, 0, 0, 0);
- svput("BOXTITLE", WCS_STRING, _("Change your password"));
- do_template("beginbox");
+ Buf = NewStrBufPlain(_("Change your password"), -1);
+ DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+ FreeStrBuf(&Buf);
if (!IsEmptyStr(WC->ImportantMessage)) {
wprintf("<span class=\"errormsg\">"
}
wprintf("<form name=\"changepwform\" action=\"changepw\" method=\"post\">\n");
- wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%ld\">\n", WC->nonce);
+ wprintf("<input type=\"hidden\" name=\"nonce\" value=\"%d\">\n", WC->nonce);
wprintf("<table class=\"altern\" ");
wprintf("<tr class=\"even\"><td>");
wprintf(_("Enter new password:"));
wprintf("</div>\n");
wprintf("</form>\n");
- do_template("endbox");
+ do_template("endbox", NULL);
wDumpContent(1);
}
}
}
+int ConditionalAide(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ return (WC->is_aide == 0);
+}
+int ConditionalRoomAide(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ return (WC->is_room_aide == 0);
+}
-void InitModule_AUTH(void)
+int ConditionalRoomAcessDelete(WCTemplateToken *Tokens, void *Context, int ContextType)
{
- WebcitAddUrlHandler(HKEY("do_welcome"), do_welcome, 0);
+ wcsession *WCC = WC;
+ return ( (WCC->is_room_aide) || (WCC->is_mailbox) || (WCC->room_flags2 & QR2_COLLABDEL) );
+}
+
+
+
+void _display_openid_login(void) {display_openid_login(NULL);}
+void _display_reg(void) {display_reg(0);}
+
+
+void
+InitModule_AUTH
+(void)
+{
+ WebcitAddUrlHandler(HKEY("do_welcome"), do_welcome, ANONYMOUS);
+ WebcitAddUrlHandler(HKEY("login"), do_login, ANONYMOUS);
+ 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, 0);
+ 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);
+
+ RegisterConditional(HKEY("COND:AIDE"), 2, ConditionalAide, CTX_NONE);
+ RegisterConditional(HKEY("COND:ROOMAIDE"), 2, ConditionalRoomAide, CTX_NONE);
+ RegisterConditional(HKEY("COND:ACCESS:DELETE"), 2, ConditionalRoomAcessDelete, CTX_NONE);
+
return ;
}