]> code.citadel.org Git - citadel.git/blobdiff - webcit/auth.c
* do_login(): if we're already logged in, don't show st00pit shit, but the main-menu...
[citadel.git] / webcit / auth.c
index 2ed2413bd1eb7b4cbc2f99e26099404a15b386e4..dd97fe8d11290f2a3635fa912be2ac71aba73cb4 100644 (file)
@@ -2,6 +2,22 @@
  * $Id$
  *
  * WebcitAuth; Handles 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 distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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
  */
 
 #include "webcit.h"
@@ -152,7 +168,7 @@ void become_logged_in(const StrBuf *user, const StrBuf *pass, StrBuf *serv_respo
                const char *pch;
 
                pch = ChrPtr(Buf) + 4;
-               WCC->new_mail  = StrBufExtractNext_long(Buf, &pch, '|');
+               /*WCC->new_mail  =*/ StrBufExtractNext_long(Buf, &pch, '|');
                WCC->need_regi = StrBufExtractNext_long(Buf, &pch, '|');
                WCC->need_vali = StrBufExtractNext_long(Buf, &pch, '|');
                if (WCC->cs_inet_email == NULL)
@@ -172,6 +188,7 @@ void do_login(void)
 {
        wcsession *WCC = WC;
        StrBuf *Buf;
+       long ret, rc;
 
        if (havebstr("language")) {
                set_selected_language(bstr("language"));
@@ -186,25 +203,31 @@ void do_login(void)
        if (havebstr("login_action")) {
                serv_printf("USER %s", bstr("name"));
                StrBuf_ServGetln(Buf);
-               if (GetServerStatus(Buf, NULL) == 3) {
+               rc = GetServerStatus(Buf, &ret);
+               StrBufCutLeft(Buf, 4);
+               switch (rc) {
+               case 3:
                        serv_printf("PASS %s", bstr("pass"));
                        StrBuf_ServGetln(Buf);
                        if (GetServerStatus(Buf, NULL) == 2) {
                                become_logged_in(sbstr("name"), sbstr("pass"), Buf);
                        } else {
-                               snprintf(WCC->ImportantMessage, 
-                                        sizeof (WCC->ImportantMessage), 
-                                        "%s", 
-                                        &(ChrPtr(Buf))[4]);
+                               StrBufCutLeft(Buf, 4);
+                               AppendImportantMessage(SKEY(Buf));
                                display_login();
                                FreeStrBuf(&Buf);
                                return;
                        }
-               } else {
-                       snprintf(WCC->ImportantMessage, 
-                                sizeof (WCC->ImportantMessage), 
-                                "%s", 
-                                &(ChrPtr(Buf))[4]);
+                       break;
+               case 5:
+                       if (ret == 541)
+                       {
+                               AppendImportantMessage(SKEY(Buf));
+                               display_main_menu();
+                               return;
+                       }
+               default:
+                       AppendImportantMessage(SKEY(Buf));
                        display_login();
                        FreeStrBuf(&Buf);
                        return;
@@ -212,10 +235,7 @@ void do_login(void)
        }
        if (havebstr("newuser_action")) {
                if (!havebstr("pass")) {
-                       snprintf(WCC->ImportantMessage, 
-                                sizeof (WCC->ImportantMessage), 
-                                "%s", 
-                                _("Blank passwords are not allowed."));
+                       AppendImportantMessage(_("Blank passwords are not allowed."), -1);
                        display_login();
                        FreeStrBuf(&Buf);
                        return;
@@ -227,10 +247,8 @@ void do_login(void)
                        serv_printf("SETP %s", bstr("pass"));
                        StrBuf_ServGetln(Buf); /* Don't care? */
                } else {
-                       snprintf(WCC->ImportantMessage, 
-                                sizeof (WCC->ImportantMessage), 
-                                "%s", 
-                                &(ChrPtr(Buf))[4]);
+                       StrBufCutLeft(Buf, 4);
+                       AppendImportantMessage(SKEY(Buf));
                        display_login();
                        FreeStrBuf(&Buf);
                        return;
@@ -245,10 +263,7 @@ void do_login(void)
                        do_welcome();
                }
        } else {
-               snprintf(WCC->ImportantMessage, 
-                        sizeof (WCC->ImportantMessage), 
-                        "%s", 
-                        _("Your password was not accepted."));
+               AppendImportantMessage(_("Your password was not accepted."), -1);
                display_login();
        }
        FreeStrBuf(&Buf);
@@ -899,6 +914,24 @@ void changepw(void)
        }
 }
 
+int ConditionalHaveAccessCreateRoom(StrBuf *Target, WCTemplputParams *TP)
+{
+       StrBuf *Buf;    
+
+       Buf = NewStrBuf();
+       serv_puts("CRE8 0");
+       StrBuf_ServGetln(Buf);
+
+       if (GetServerStatus(Buf, NULL) == 2) {
+               StrBufCutLeft(Buf, 4);
+               AppendImportantMessage(SKEY(Buf));
+               FreeStrBuf(&Buf);
+               return 0;
+       }
+       FreeStrBuf(&Buf);
+       return 1;
+}
+
 int ConditionalAide(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
@@ -1023,6 +1056,7 @@ void
 InitModule_AUTH
 (void)
 {
+       initialize_axdefs();
        RegisterHeaderHandler(HKEY("COOKIE"), Header_HandleCookie);
        RegisterHeaderHandler(HKEY("AUTHORIZATION"), Header_HandleAuth);
 
@@ -1042,7 +1076,7 @@ InitModule_AUTH
 
        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 ;
 }