* rework login screen to utilize more modern templating
[citadel.git] / webcit / auth.c
index ff1350be14c43bc1f53c60d497a69324a9013064..618956d615a3e02c61f5446f212b8ead5b8e3688 100644 (file)
@@ -34,72 +34,12 @@ void initialize_axdefs(void) {
  * 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 &quot;Login.&quot; "
-               "<li><b>If you are a new user</b>, enter the name and password "
-               "you wish to use, "
-               "and click &quot;New User.&quot; "
-               "<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, "");
-       }
-
+       begin_burst();
+       output_headers(1, 0, 0, 0, 1, 0);
        do_template("login", NULL);
-
-       wDumpContent(2);
+       end_burst();
 }
 
 
@@ -116,9 +56,9 @@ void display_openid_login(char *mesg)
        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,
@@ -135,15 +75,8 @@ void display_openid_login(char *mesg)
                "</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\">"
@@ -209,6 +142,7 @@ void display_openid_name_request(char *claimed_id, char *username) {
 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);
@@ -232,7 +166,8 @@ void become_logged_in(char *user, char *pass, char *serv_response)
 
        get_pref_long("current_iconbar", &WC->current_iconbar, current_iconbar_menu);
 
-       get_preference("floordiv_expanded", &WC->floordiv_expanded);
+       get_preference("floordiv_expanded", &FloorDiv);
+       WC->floordiv_expanded = FloorDiv;
 }
 
 
@@ -241,6 +176,7 @@ void become_logged_in(char *user, char *pass, char *serv_response)
  */
 void do_login(void)
 {
+       struct wcsession *WCC = WC;
        char buf[SIZ];
 
        if (havebstr("language")) {
@@ -261,17 +197,29 @@ void do_login(void)
                        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"));
@@ -281,21 +229,29 @@ void do_login(void)
                        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 (WCC->logged_in) {
                set_preference("language", NewStrBufPlain(bstr("language"), -1), 1);
-               if (WC->need_regi) {
+               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();
        }
 
 }
@@ -553,7 +509,6 @@ void end_webcit_session(void) {
        
        if (WC->logged_in) {
                set_pref_long("current_iconbar", WC->current_iconbar, 0);
-               set_preference("floordiv_expanded", WC->floordiv_expanded, 1);
        }
 
        serv_puts("QUIT");
@@ -791,11 +746,13 @@ void display_reg(int during_login)
 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", NULL);
+       Buf = NewStrBufPlain(_("Change your password"), -1);
+       DoTemplate(HKEY("beginbox"), NULL, Buf, CTX_STRBUF);
+
+       FreeStrBuf(&Buf);
 
        if (!IsEmptyStr(WC->ImportantMessage)) {
                wprintf("<span class=\"errormsg\">"
@@ -881,16 +838,22 @@ void changepw(void)
        }
 }
 
-int ConditionalAide(WCTemplateToken *Token, void *Context)
+int ConditionalAide(WCTemplateToken *Tokens, void *Context, int ContextType)
 {
        return (WC->is_aide == 0);
 }
 
-int ConditionalRoomAide(WCTemplateToken *Token, void *Context)
+int ConditionalRoomAide(WCTemplateToken *Tokens, void *Context, int ContextType)
 {
        return (WC->is_room_aide == 0);
 }
 
+int ConditionalRoomAcessDelete(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+       struct 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);}
@@ -914,8 +877,9 @@ InitModule_AUTH
        WebcitAddUrlHandler(HKEY("changepw"), changepw, 0);
        WebcitAddUrlHandler(HKEY("termquit"), do_logout, 0);
 
-       RegisterConditional(HKEY("COND:AIDE"), 2, ConditionalAide);
-       RegisterConditional(HKEY("COND:ROOMAIDE"), 2, ConditionalRoomAide);
+       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 ;
 }