From: Art Cancro Date: Tue, 16 Feb 2021 04:52:53 +0000 (-0500) Subject: more work on listsub X-Git-Tag: v939~114 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=74f78170c04a5913a85ed43c659fcd883a0f308d more work on listsub --- diff --git a/citadel/modules/listsub/serv_listsub.c b/citadel/modules/listsub/serv_listsub.c index 72249ed53..276aae57a 100644 --- a/citadel/modules/listsub/serv_listsub.c +++ b/citadel/modules/listsub/serv_listsub.c @@ -55,43 +55,90 @@ enum { // one of these gets passed to do_subscribe_or_unsubscribe() so it kno */ void do_subscribe_or_unsubscribe(int action, char *emailaddr, char *url) { - char *netconfig, *newnetconfig; - int config_lines, i; + int i; char buf[1024]; + char confirmation_token[40]; // Update this room's netconfig with the updated lastsent begin_critical_section(S_NETCONFIGS); - netconfig = LoadRoomNetConfigFile(CC->room.QRnumber); - if (!netconfig) { - netconfig = strdup(""); + char *oldnetconfig = LoadRoomNetConfigFile(CC->room.QRnumber); + if (!oldnetconfig) { + oldnetconfig = strdup(""); } - // The new netconfig begins with the new lastsent directive - newnetconfig = malloc(strlen(netconfig) + 1024); -#if 0 - FIXME SYNTAX ERROR #$%$&%$^#%$ sprintf(newnetconfig, "lastsent|%ld\n", ld.msgnum); -#endif + // The new netconfig begins with an empty buffer... + char *newnetconfig = malloc(strlen(oldnetconfig) + 1024); + newnetconfig[0] = 0; - // And then we append all of the old netconfig, minus the old lastsent. Also omit blank lines. - config_lines = num_tokens(netconfig, '\n'); + // And then we... + int is_already_subscribed = 0; + int config_lines = num_tokens(oldnetconfig, '\n'); for (i=0; i 259200) { + syslog(LOG_DEBUG, "%s %s is %ld seconds old - deleting it", buf_email, buf_token, time(NULL) - pendingtime); + keep_this_line = 0; + } + } + + if (keep_this_line) { sprintf(&newnetconfig[strlen(newnetconfig)], "%s\n", buf); } } + // Do we need to send out a confirmation email? + if ((action == SUBSCRIBE) && (!is_already_subscribed)) { + generate_uuid(confirmation_token); + sprintf(&newnetconfig[strlen(newnetconfig)], "subpending|%s|%s|%ld|%s", emailaddr, confirmation_token, time(NULL), url); + } + if ((action == UNSUBSCRIBE) && (is_already_subscribed)) { + generate_uuid(confirmation_token); + sprintf(&newnetconfig[strlen(newnetconfig)], "unsubpending|%s|%s|%ld|%s", emailaddr, confirmation_token, time(NULL), url); + } + // Write the new netconfig back to disk + syslog(LOG_DEBUG, "old: <\033[31m%s\033[0m>", oldnetconfig); + syslog(LOG_DEBUG, "new: <\033[32m%s\033[0m>", newnetconfig); SaveRoomNetConfigFile(CC->room.QRnumber, newnetconfig); end_critical_section(S_NETCONFIGS); free(newnetconfig); // this was the new netconfig, free it because we're done with it - free(netconfig); // this was the old netconfig, free it even if we didn't do anything - -#if 0 - FIXME tell the client what we did -#endif - + free(oldnetconfig); // this was the old netconfig, free it even if we didn't do anything + // Tell the client what happened. + if ((action == SUBSCRIBE) && (is_already_subscribed)) { + cprintf("%d This email is already subscribed.\n", ERROR + ALREADY_EXISTS); + } + else if ((action == SUBSCRIBE) && (!is_already_subscribed)) { + cprintf("%d Confirmation email sent.\n", CIT_OK); + } + else if ((action == UNSUBSCRIBE) && (!is_already_subscribed)) { + cprintf("%d This email is not subscribed.\n", ERROR + NO_SUCH_USER); + } + else if ((action == UNSUBSCRIBE) && (is_already_subscribed)) { + cprintf("%d Confirmation email sent.\n", CIT_OK); + } + else { + cprintf("%d FIXME tell the client what we did\n", ERROR); + } } diff --git a/webcit/static/t/listsub/display.html b/webcit/static/t/listsub/display.html index f2f63c243..121bb5198 100644 --- a/webcit/static/t/listsub/display.html +++ b/webcit/static/t/listsub/display.html @@ -79,10 +79,10 @@

- +
    -

+