X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flistsub.c;h=d445d05bd16cacdda9da0a7fe2850b02968100e7;hb=HEAD;hp=d4de61bb227897868d0538d07d9972146cd5c33e;hpb=2650415654694173b08c08d73fcd6a095a00a8bf;p=citadel.git diff --git a/webcit/listsub.c b/webcit/listsub.c index d4de61bb2..95f9ecfdb 100644 --- a/webcit/listsub.c +++ b/webcit/listsub.c @@ -1,376 +1,137 @@ -/* - * Web forms for handling mailing list subscribe/unsubscribe requests. - * - * Copyright (c) 1996-2011 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 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 - */ +// Web forms for handling mailing list subscribe/unsubscribe requests. +// +// Copyright (c) 1996-2022 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 "webcit.h" -/* - * List subscription handling - */ -#ifndef EXPERIMENTAL_LISTSUB -void do_listsub(void) -{ - char cmd[256]; - char room[256]; - char token[256]; - char email[256]; - char subtype[256]; - char escaped_email[256]; - char escaped_room[256]; - - char buf[SIZ]; - int self; - char sroom[SIZ]; - - FlushStrBuf(WC->wc_fullname); - FlushStrBuf(WC->wc_username); - FlushStrBuf(WC->wc_password); - FlushStrBuf(WC->CurRoom.name); - - output_headers(1, 0, 0, 1, 1, 0); - begin_burst(); - - wc_printf("\n" - "\n" - "\n" - "\n" - ); - wc_printf(_("List subscription")); - wc_printf("\n"); - - strcpy(cmd, bstr("cmd")); - strcpy(room, bstr("room")); - strcpy(token, bstr("token")); - strcpy(email, bstr("email")); - strcpy(subtype, bstr("subtype")); - - wc_printf("
"); - wc_printf("
"); - - do_template("box_begin_1"); - StrBufAppendBufPlain(WC->WBuf, _("List subscribe/unsubscribe"), -1, 0); - do_template("box_begin_2"); - wc_printf("

"); - - /* - * Subscribe command - */ - if (!strcasecmp(cmd, "subscribe")) { - serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", - room, - email, - subtype, - ChrPtr(site_prefix) - ); - serv_getln(buf, sizeof buf); - if (buf[0] == '2') { - stresc(escaped_email, 256, email, 0, 0); - stresc(escaped_room, 256, room, 0, 0); - - wc_printf("

"); - wc_printf(_("Confirmation request sent")); - wc_printf("

"); - wc_printf(_("You are subscribing %s" - " to the %s 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"), - escaped_email, escaped_room); - wc_printf("%s
\n", _("Go back...")); - } - else { - wc_printf("ERROR: %s" - "

\n", - &buf[4]); - goto FORM; - } - } - - /* - * Unsubscribe command - */ - else if (!strcasecmp(cmd, "unsubscribe")) { - serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", - room, - email, - ChrPtr(site_prefix) - ); - serv_getln(buf, sizeof buf); - if (buf[0] == '2') { - wc_printf("

Confirmation request sent

" - "You are unsubscribing "); - escputs(email); - wc_printf(" from the ""); - escputs(room); - wc_printf("" 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 { - wc_printf("ERROR: %s" - "

\n", - &buf[4]); - goto FORM; - } - } - - /* - * Confirm command - */ - else if (!strcasecmp(cmd, "confirm")) { - serv_printf("SUBS confirm|%s|%s", - room, - token - ); - serv_getln(buf, sizeof buf); - if (buf[0] == '2') { - wc_printf("

Confirmation successful!

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

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: " - ); - } - wc_printf("%s

\n", &buf[4]); - } - - /* - * Any other (invalid) command causes the form to be displayed - */ - else { -FORM: wc_printf("
\n"); - - wc_printf("Name of list: " - "

\n"); - - wc_printf("Your e-mail address: " - "

\n"); - - wc_printf("(If subscribing) preferred format: " - "One message at a time  " - "Digest format  " - "

\n" - "\n" - "

\n" - "
\n" - ); - - wc_printf("
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" - ); - - } - - wc_printf("
"); - do_template("box_end"); - wc_printf("
"); - - wc_printf("\n"); - wDumpContent(0); - end_webcit_session(); -} -#endif - -int Conditional_LISTSUB_EXECUTE_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) -{ +// List subscription handling +int Conditional_LISTSUB_EXECUTE_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) { int rc; StrBuf *Line; const char *ImpMsg; - const StrBuf *Room, *Email, *SubType; - + const StrBuf *Room, *Email; + + if (strcmp(bstr("cmd"), "subscribe")) { + return 0; + } + Room = sbstr("room"); - if (Room == NULL) - { + if (Room == NULL) { ImpMsg = _("You need to specify the mailinglist to subscribe to."); AppendImportantMessage(ImpMsg, -1); return 0; } Email = sbstr("email"); - if (Email == NULL) - { + if (Email == NULL) { ImpMsg = _("You need to specify the email address you'd like to subscribe with."); AppendImportantMessage(ImpMsg, -1); return 0; } - SubType = sbstr("subtype"); Line = NewStrBuf(); - serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", - ChrPtr(Room), - ChrPtr(Email), - ChrPtr(SubType), - ChrPtr(site_prefix) - ); + 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) + if (rc == 2) { putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + } return rc == 2; } -int Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) -{ + +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) - { + if (Room == NULL) { ImpMsg = _("You need to specify the mailinglist to subscribe to."); AppendImportantMessage(ImpMsg, -1); return 0; } Email = sbstr("email"); - if (Email == NULL) - { + if (Email == NULL) { ImpMsg = _("You need to specify the email address you'd like to subscribe with."); AppendImportantMessage(ImpMsg, -1); return 0; } - serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", - ChrPtr(Room), - ChrPtr(Email), - ChrPtr(site_prefix) - ); + 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) + if (rc == 2) { putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + } return rc == 2; } -int Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) -{ + +int confirm_sub_or_unsub(char *cmd, StrBuf *Target, WCTemplputParams *TP) { int rc; StrBuf *Line; - const char *ImpMsg; - const StrBuf *Room, *Token; - - 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("SUBS confirm|%s|%s", - ChrPtr(Room), - ChrPtr(Token) - ); + serv_printf("LSUB %s|%s|%s|%s/listsub|%s", cmd, bstr("room"), bstr("email"), ChrPtr(site_prefix), bstr("token")); StrBuf_ServGetln(Line); rc = GetServerStatusMsg(Line, NULL, 1, 2); FreeStrBuf(&Line); - if (rc == 2) + if (rc == 2) { putbstr("__FAIL", NewStrBufPlain(HKEY("1"))); + } return rc == 2; } -#ifdef EXPERIMENTAL_LISTSUB -void do_listsub(void) -{ - if (!havebstr("cmd")) - { - putbstr("cmd", NewStrBufPlain(HKEY(""))); + +int Conditional_LISTSUB_EXECUTE_CONFIRMSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) { + if (strcmp(bstr("cmd"), "confirm_subscribe")) { + return 0; + } + return(confirm_sub_or_unsub("confirm_subscribe", Target, TP)); +} + + +int Conditional_LISTSUB_EXECUTE_CONFIRMUNSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) { + if (strcmp(bstr("cmd"), "confirm_unsubscribe")) { + return 0; + } + return(confirm_sub_or_unsub("confirm_unsubscribe", Target, TP)); +} + + +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(); } -#endif + void InitModule_LISTSUB (void) { - RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:SUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_SUBSCRIBE, CTX_NONE); - RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:UNSUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE, CTX_NONE); - RegisterConditional(HKEY("COND:LISTSUB:EXECUTE:CONFIRM:SUBSCRIBE"), 0, Conditional_LISTSUB_EXECUTE_CONFIRM_SUBSCRIBE, CTX_NONE); - + 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:CONFIRMSUBSCRIBE", 0, Conditional_LISTSUB_EXECUTE_CONFIRMSUBSCRIBE, CTX_NONE); + RegisterConditional("COND:LISTSUB:EXECUTE:CONFIRMUNSUBSCRIBE", 0, Conditional_LISTSUB_EXECUTE_CONFIRMUNSUBSCRIBE, CTX_NONE); WebcitAddUrlHandler(HKEY("listsub"), "", 0, do_listsub, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); - - }