X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Flistsub.c;h=fe647cab33e2fa7a339c65904d731b2896b67a09;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=919408fab476aedf5af54e74e3bfa12ad26106ce;hpb=7836de1a004d9353cadb71885e360715884d1601;p=citadel.git diff --git a/webcit/listsub.c b/webcit/listsub.c index 919408fab..fe647cab3 100644 --- a/webcit/listsub.c +++ b/webcit/listsub.c @@ -1,53 +1,52 @@ /* - * $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 */ +#ifndef EXPERIMENTAL_LISTSUB void do_listsub(void) { - char cmd[SIZ]; - char room[SIZ]; - char token[SIZ]; - char email[SIZ]; - char subtype[SIZ]; + 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]; - strcpy(WC->wc_username, ""); - strcpy(WC->wc_password, ""); - strcpy(WC->wc_roomname, ""); + 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(); - wprintf("List subscription\n"); + wc_printf("\n" + "\n" + "\n" + "\n" + ); + wc_printf(_("List subscription")); + wc_printf("\n"); strcpy(cmd, bstr("cmd")); strcpy(room, bstr("room")); @@ -55,11 +54,13 @@ void do_listsub(void) strcpy(email, bstr("email")); strcpy(subtype, bstr("subtype")); - wprintf("
" - "
" - "List subscribe/unsubscribe\n" - "

\n" - ); + 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 @@ -69,31 +70,34 @@ void do_listsub(void) room, email, subtype, - WC->http_host + ChrPtr(site_prefix) ); - serv_gets(buf); + serv_getln(buf, sizeof 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 " + 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.

" + "without your consent.

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

\n", + wc_printf("ERROR: %s" + "

\n", &buf[4]); goto FORM; } @@ -106,37 +110,37 @@ void do_listsub(void) serv_printf("SUBS unsubscribe|%s|%s|%s/listsub", room, email, - WC->http_host + ChrPtr(site_prefix) ); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '2') { - wprintf("

Confirmation request sent

" + wc_printf("

Confirmation request sent

" "You are unsubscribing "); escputs(email); - wprintf(" from the ""); + wc_printf(" from the ""); escputs(room); - wprintf("" mailing list. The listserver has " + 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.

" + "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" + "be confirmed.
\n" + "Back...
\n" ); } else { - wprintf("ERROR: %s" - "

\n", + wc_printf("ERROR: %s" + "

\n", &buf[4]); goto FORM; } } - /* + /* * Confirm command */ else if (!strcasecmp(cmd, "confirm")) { @@ -144,12 +148,12 @@ void do_listsub(void) room, token ); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '2') { - wprintf("

Confirmation successful!

"); + wc_printf("

Confirmation successful!

"); } else { - wprintf("

Confirmation failed.

" + wc_printf("

Confirmation failed.

" "This could mean one of two things:
    \n" "
  • You waited too long to confirm your " "subscribe/unsubscribe request (the " @@ -161,74 +165,206 @@ void do_listsub(void) "The error returned by the server was: " ); } - wprintf("%s

\n", &buf[4]); + wc_printf("%s

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

\n"); - wprintf("\n"); - - wprintf("
Name of list" - "\n"); serv_puts("LPRM"); - serv_gets(buf); + serv_getln(buf, sizeof buf); if (buf[0] == '1') { - while (serv_gets(buf), strcmp(buf, "000")) { - extract(sroom, buf, 0); + while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) { + extract_token(sroom, buf, 0, '|', sizeof sroom); self = extract_int(buf, 4) & QR2_SELFLIST ; if (self) { - wprintf("\n"); + wc_printf("\n"); } } } - wprintf("" - "
Your e-mail address" + wc_printf("Your e-mail address: " "
" - "(If subscribing) preferred format: " - "One message at a time  " - "Digest format  " - "
\n" + wc_printf("\" maxlength=128 size=60>

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

\n" "\n" "\n" + " VALUE=\"unsubscribe\">

\n" "
\n" ); - wprintf("
When you attempt to subscribe or unsubscribe to " + 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" + "subscribe or unsubscribe you to lists.
\n" ); } - /* - * Since this isn't part of a normal Citadel session, we bail right - * out without maintaining any state. - */ - /* wDumpContent(2); */ - wprintf("\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) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email, *SubType; + + 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; + } + SubType = sbstr("subtype"); + + Line = NewStrBuf(); + serv_printf("SUBS subscribe|%s|%s|%s|%s/listsub", + ChrPtr(Room), + ChrPtr(Email), + ChrPtr(SubType), + 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; +} + +int Conditional_LISTSUB_EXECUTE_UNSUBSCRIBE(StrBuf *Target, WCTemplputParams *TP) +{ + int rc; + StrBuf *Line; + const char *ImpMsg; + const StrBuf *Room, *Email; + + 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; + } + + serv_printf("SUBS 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; + + 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) + ); + StrBuf_ServGetln(Line); + rc = GetServerStatusMsg(Line, NULL, 1, 2); + FreeStrBuf(&Line); + 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(""))); + } + 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); + + WebcitAddUrlHandler(HKEY("listsub"), "", 0, do_listsub, ANONYMOUS|COOKIEUNNEEDED|FORCE_SESSIONCLOSE); + + +}