]> 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 fc0da9507a8253d1857fa0198e2e20c4c683b795..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);
@@ -540,7 +555,7 @@ void do_logout(void)
 
        FlushStrBuf(WCC->wc_username);
        FlushStrBuf(WCC->wc_password);
-       FlushStrBuf(WCC->wc_roomname);
+       FlushStrBuf(WCC->CurRoom.name);
        FlushStrBuf(WCC->wc_fullname);
 
        /* FIXME: this is to suppress the iconbar displaying, because we aren't
@@ -740,13 +755,15 @@ void validate(void)
  */
 void display_reg(int during_login)
 {
+       folder Room;
        StrBuf *Buf;
        message_summary *VCMsg = NULL;
        wc_mime_attachment *VCAtt = NULL;
        long vcard_msgnum;
 
        Buf = NewStrBuf();
-       if (goto_config_room(Buf) != 0) {
+       memset(&Room, 0, sizeof(folder));
+       if (goto_config_room(Buf, &Room) != 0) {
                lprintf(9, "display_reg() exiting because goto_config_room() failed\n");
                if (during_login) {
                        do_welcome();
@@ -755,8 +772,10 @@ void display_reg(int during_login)
                        display_main_menu();
                }
                FreeStrBuf(&Buf);
+               FlushFolder(&Room);             
                return;
        }
+       FlushFolder(&Room);
 
        FreeStrBuf(&Buf);
        vcard_msgnum = locate_user_vcard_in_this_room(&VCMsg, &VCAtt);
@@ -777,7 +796,7 @@ void display_reg(int during_login)
        else {
                StrBuf *ReturnTo;
                ReturnTo = NewStrBufPlain(HKEY("display_main_menu?gotofirst="));
-               StrBufAppendBuf(ReturnTo, WC->wc_roomname, 0);
+               StrBufAppendBuf(ReturnTo, WC->CurRoom.name, 0);
                do_edit_vcard(vcard_msgnum, "1", VCMsg, VCAtt, ChrPtr(ReturnTo), USERCONFIGROOM);
                FreeStrBuf(&ReturnTo);
        }
@@ -895,19 +914,30 @@ void changepw(void)
        }
 }
 
-int ConditionalAide(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalHaveAccessCreateRoom(StrBuf *Target, WCTemplputParams *TP)
 {
-       wcsession *WCC = WC;
-       return (WCC != NULL)? (WC->is_aide == 0) : 0;
+       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 ConditionalRoomAide(StrBuf *Target, WCTemplputParams *TP)
+int ConditionalAide(StrBuf *Target, WCTemplputParams *TP)
 {
        wcsession *WCC = WC;
-       return (WCC != NULL)? (WCC->is_room_aide == 0) : 0;
+       return (WCC != NULL)? (WC->is_aide == 0) : 0;
 }
 
-
 int ConditionalIsLoggedIn(StrBuf *Target, WCTemplputParams *TP) 
 {
        wcsession *WCC = WC;
@@ -915,13 +945,6 @@ int ConditionalIsLoggedIn(StrBuf *Target, WCTemplputParams *TP)
 }
 
 
-int ConditionalRoomAcessDelete(StrBuf *Target, WCTemplputParams *TP)
-{
-       wcsession *WCC = WC;
-       return (WCC != NULL)? ( (WCC->is_room_aide) || (WCC->is_mailbox) || (WCC->room_flags2 & QR2_COLLABDEL) ) : 0;
-}
-
-
 void _display_openid_login(void) {
        display_openid_login(NULL);
 }
@@ -1033,6 +1056,7 @@ void
 InitModule_AUTH
 (void)
 {
+       initialize_axdefs();
        RegisterHeaderHandler(HKEY("COOKIE"), Header_HandleCookie);
        RegisterHeaderHandler(HKEY("AUTHORIZATION"), Header_HandleAuth);
 
@@ -1051,10 +1075,8 @@ InitModule_AUTH
        WebcitAddUrlHandler(HKEY("termquit"), "", 0, 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);
        RegisterConditional(HKEY("COND:LOGGEDIN"), 2, ConditionalIsLoggedIn, CTX_NONE);
-
+       RegisterConditional(HKEY("COND:MAY_CREATE_ROOM"), 2,  ConditionalHaveAccessCreateRoom, CTX_NONE);
        return ;
 }
 
@@ -1066,7 +1088,6 @@ SessionDestroyModule_AUTH
        FreeStrBuf(&sess->wc_username);
        FreeStrBuf(&sess->wc_fullname);
        FreeStrBuf(&sess->wc_password);
-       FreeStrBuf(&sess->wc_roomname);
        FreeStrBuf(&sess->httpauth_pass);
        FreeStrBuf(&sess->cs_inet_email);
 }