X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flistsub.c;h=d445d05bd16cacdda9da0a7fe2850b02968100e7;hb=e322a532492f9f4e50bae5a7955a6218b24a26ea;hp=1dc1abb5c3add7508d281041214b58ce7e15042f;hpb=abeb8adc38f9d55fcb6cb3d076f57239b0a9a4d5;p=citadel.git diff --git a/webcit/listsub.c b/webcit/listsub.c index 1dc1abb5c..d445d05bd 100644 --- a/webcit/listsub.c +++ b/webcit/listsub.c @@ -1,234 +1,150 @@ /* - * $Id$ - * * Web forms for handling mailing list subscribe/unsubscribe requests. * + * Copyright (c) 1996-2012 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. + * + * 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. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "webcit.h" - - /* * List subscription handling */ -void do_listsub(void) -{ - char cmd[SIZ]; - char room[SIZ]; - char token[SIZ]; - char email[SIZ]; - char subtype[SIZ]; - - char buf[SIZ]; - int self; - char sroom[SIZ]; - - strcpy(WC->wc_username, ""); - strcpy(WC->wc_password, ""); - strcpy(WC->wc_roomname, ""); - - wprintf("List subscription\n"); - - strcpy(cmd, bstr("cmd")); - strcpy(room, bstr("room")); - strcpy(token, bstr("token")); - strcpy(email, bstr("email")); - strcpy(subtype, bstr("subtype")); - - wprintf("
" - "
" - "List subscribe/unsubscribe\n" - "

\n" - ); - - /* - * Subscribe command - */ - if (!strcasecmp(cmd, "subscribe")) { - serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", - room, - email, - subtype, - WC->http_host - ); - serv_gets(buf); - if (buf[0] == '2') { - wprintf("

Confirmation request sent

" - "You are subscribing "); - escputs(email); - wprintf(" to the ""); - escputs(room); - wprintf("" mailing list. The listserver has " - "sent you an e-mail with one additional " - "Web link for you to click on to confirm " - "your subscription. This extra step is for " - "your protection, as it prevents others from " - "being able to subscribe you to lists " - "without your consent.

" - "Please click on the link which is being " - "e-mailed to you and your subscription will " - "be confirmed.
\n" - "Back...
\n" - ); - } - else { - wprintf("ERROR: %s" - "

\n", - &buf[4]); - goto FORM; - } +int Conditional_LISTSUB_EXECUTE_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) { + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email; + + if (strcmp(bstr("cmd"), "subscribe")) { + return 0; } - /* - * Unsubscribe command - */ - else if (!strcasecmp(cmd, "unsubscribe")) { - serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", - room, - email, - WC->http_host - ); - serv_gets(buf); - if (buf[0] == '2') { - wprintf("

Confirmation request sent

" - "You are unsubscribing "); - escputs(email); - wprintf(" from the ""); - escputs(room); - wprintf("" mailing list. The listserver has " - "sent you an e-mail with one additional " - "Web link for you to click on to confirm " - "your unsubscription. This extra step is for " - "your protection, as it prevents others from " - "being able to unsubscribe you from " - "lists without your consent.

" - "Please click on the link which is being " - "e-mailed to you and your unsubscription will " - "be confirmed.
\n" - "Back...
\n" - ); - } - else { - wprintf("ERROR: %s" - "

\n", - &buf[4]); - goto FORM; - } + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Email = sbstr("email"); + if (Email == NULL) + { + ImpMsg = _("You need to specify the email address you'd like to subscribe with."); + AppendImportantMessage(ImpMsg, -1); + return 0; } - /* - * Confirm command - */ - else if (!strcasecmp(cmd, "confirm")) { - serv_printf("SUBS confirm|%s|%s", - room, - token - ); - serv_gets(buf); - if (buf[0] == '2') { - wprintf("

Confirmation successful!

"); - } - else { - wprintf("

Confirmation failed.

" - "This could mean one of two things:
    \n" - "
  • You waited too long to confirm your " - "subscribe/unsubscribe request (the " - "confirmation link is only valid for three " - "days)\n
  • You have already " - "successfully confirmed your " - "subscribe/unsubscribe request and are " - "attempting to do it again.
\n" - "The error returned by the server was: " - ); - } - wprintf("%s

\n", &buf[4]); + Line = NewStrBuf(); + serv_printf("LSUB subscribe|%s|%s|%s/listsub", ChrPtr(Room), ChrPtr(Email), ChrPtr(site_prefix)); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) { + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); } + return rc == 2; +} - /* - * Any other (invalid) command causes the form to be displayed - */ - else { -FORM: wprintf("
\n" - "\n" - ); - - wprintf("\n"); - - wprintf("\n"); - - wprintf("
Name of list" - "" - "
Your e-mail address" - "
" - "(If subscribing) preferred format: " - "One message at a time  " - "Digest format  " - "
\n" - "\n" - "\n" - "
\n" - ); - - wprintf("
When you attempt to subscribe or unsubscribe to " - "a mailing list, you will receive an e-mail containing" - " one additional web link to click on for final " - "confirmation. This extra step is for your " - "protection, as it prevents others from being able to " - "subscribe or unsubscribe you to lists.
\n" - ); +int Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) { + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email; + + if (strcmp(bstr("cmd"), "unsubscribe")) { + return 0; + } + + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Email = sbstr("email"); + if (Email == NULL) + { + ImpMsg = _("You need to specify the email address you'd like to subscribe with."); + AppendImportantMessage(ImpMsg, -1); + return 0; } - /* - * Since this isn't part of a normal Citadel session, we bail right - * out without maintaining any state. - */ - /* wDumpContent(2); */ - wprintf("\n"); - end_webcit_session(); + serv_printf("LSUB unsubscribe|%s|%s|%s/listsub", ChrPtr(Room), ChrPtr(Email), ChrPtr(site_prefix)); + Line = NewStrBuf(); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + return rc == 2; +} + +int Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Token; + + if (strcmp(bstr("cmd"), "confirm")) { + return 0; + } + + Room = sbstr("room"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + Token = sbstr("token"); + if (Room == NULL) + { + ImpMsg = _("You need to specify the mailinglist to subscribe to."); + AppendImportantMessage(ImpMsg, -1); + return 0; + } + + Line = NewStrBuf(); + serv_printf("LSUB confirm|%s|%s", ChrPtr(Room), ChrPtr(Token)); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + if (rc == 2) + putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + return rc == 2; +} + +void do_listsub(void) +{ + if (!havebstr("cmd")) + { + putbstr("cmd", NewStrBufPlain(HKEY("choose"))); + } + output_headers(1, 0, 0, 0, 1, 0); + do_template("listsub_display"); + end_burst(); +} + +void +InitModule_LISTSUB +(void) +{ + RegisterConditional("COND:LISTSUB:EXECUTE:SUBSCRIBE", 0, Conditional_LISTSUB_EXECUTE_SUBSCRIBE, CTX_NONE); + RegisterConditional("COND:LISTSUB:EXECUTE:UNSUBSCRIBE", 0, Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE, CTX_NONE); + RegisterConditional("COND:LISTSUB:EXECUTE:CONFIRM:SUBSCRIBE", 0, Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE, CTX_NONE); + + WebcitAddUrlHandler(HKEY("listsub"), "", 0, do_listsub, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); + + }