Performed a bunch of markup fixes suggested by validator.w3.org
[citadel.git] / webcit / auth.c
index d35df874c311067ebcede5a455b92e8a516d8289..9373d19a4249e3c5c3dad3f4af90af711a104acf 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * WebcitAuth; Handles authentication of users to a Citadel server.
+ * These functions handle authentication of users to a Citadel server.
  *
  * Copyright (c) 1996-2010 by the citadel.org team
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This program is open source software.  You can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
 #include "webcit.h"
@@ -242,6 +242,31 @@ void do_login(void)
        FreeStrBuf(&Buf);
 }
 
+
+
+/* 
+ * modal/ajax version of 'login' (username and password)
+ */
+void ajax_login_username_password(void) {
+       StrBuf *Buf = NewStrBuf();
+
+       serv_printf("USER %s", bstr("name"));
+       StrBuf_ServGetln(Buf);
+       if (GetServerStatus(Buf, NULL) == 3) {
+               serv_printf("PASS %s", bstr("pass"));
+               StrBuf_ServGetln(Buf);
+               if (GetServerStatus(Buf, NULL) == 2) {
+                       become_logged_in(sbstr("name"), sbstr("pass"), Buf);
+               }
+       }
+
+       /* The client is expecting to read back a citadel protocol response */
+       wc_printf("%s", ChrPtr(Buf));
+       FreeStrBuf(&Buf);
+}
+
+
+
 /* 
  * Try to create an account manually after an OpenID was verified
  */
@@ -543,14 +568,20 @@ void do_logout(void)
 
        FlushStrBuf(WCC->wc_username);
        FlushStrBuf(WCC->wc_password);
-       FlushStrBuf(WCC->CurRoom.name);
        FlushStrBuf(WCC->wc_fullname);
 
-       /* FIXME: this is to suppress the iconbar displaying, because we aren't
-          actually logged out yet */
+       serv_puts("LOUT");
+       serv_getln(buf, sizeof buf);
        WCC->logged_in = 0;
 
-       /** Calling output_headers() this way causes the cookies to be un-set */
+       if (WC->serv_info->serv_supports_guest) {
+               display_default_landing_page();
+               return;
+       }
+
+       FlushStrBuf(WCC->CurRoom.name);
+
+       /* Calling output_headers() this way causes the cookies to be un-set */
        output_headers(1, 1, 0, 1, 0, 0);
 
        wc_printf("<div id=\"logout_screen\">");
@@ -582,16 +613,6 @@ void do_logout(void)
                "<span class=\"button_link\"><a href=\".\">");
        wc_printf(_("Log in again"));
        wc_printf("</a></span>");
-
-       /* The "close window" link is commented out because some browsers don't
-        * allow it to work.
-        *
-       wc_printf("&nbsp;&nbsp;&nbsp;<span class=\"button_link\">"
-               "<a href=\"javascript:window.close();\">");
-       wc_printf(_("Close window"));
-       wc_printf("</a></span>");
-        */
-
        wc_printf("</div></div></div>\n");
        wDumpContent(2);
        end_webcit_session();
@@ -713,19 +734,19 @@ void validate(void)
                                        atoi(buf), axdefs[atoi(buf)]);
                } while (strcmp(buf, "000"));
        } else {
-               wc_printf("<H1>%s</H1>%s<br />\n", user, &cmd[4]);
+               wc_printf("<H1>%s</H1>%s<br>\n", user, &cmd[4]);
        }
 
        wc_printf("<hr />");
        wc_printf(_("Select access level for this user:"));
-       wc_printf("<br />\n");
+       wc_printf("<br>\n");
        for (a = 0; a <= 6; ++a) {
                wc_printf("<a href=\"validate?nonce=%d?user=", WC->nonce);
                urlescputs(user);
                wc_printf("&axlevel=%d\">%s</A>&nbsp;&nbsp;&nbsp;\n",
                        a, axdefs[a]);
        }
-       wc_printf("<br />\n");
+       wc_printf("<br>\n");
 
        wc_printf("</div>\n");
        wc_printf("</td></tr></table>\n");
@@ -814,7 +835,7 @@ void display_changepw(void)
 
        if (!IsEmptyStr(WC->ImportantMessage)) {
                wc_printf("<span class=\"errormsg\">"
-                       "%s</span><br />\n", WC->ImportantMessage);
+                       "%s</span><br>\n", WC->ImportantMessage);
                safestrncpy(WC->ImportantMessage, "", sizeof WC->ImportantMessage);
        }
 
@@ -1055,16 +1076,19 @@ InitModule_AUTH
        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("ajax_login_username_password"), "", 0, ajax_login_username_password, AJAX);
        WebcitAddUrlHandler(HKEY("validate"), "", 0, validate, 0);
+       WebcitAddUrlHandler(HKEY("do_welcome"), "", 0, do_welcome, 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:LOGGEDIN"), 2, ConditionalIsLoggedIn, CTX_NONE);
        RegisterConditional(HKEY("COND:MAY_CREATE_ROOM"), 2,  ConditionalHaveAccessCreateRoom, CTX_NONE);
-       return ;
+       return;
 }