#include "webcit.h"
+CtxType CTX_SIEVELIST = CTX_NONE;
+CtxType CTX_SIEVESCRIPT = CTX_NONE;
+
#define MAX_SCRIPTS 100
#define MAX_RULES 50
#define RULES_SCRIPT "__WebCit_Generated_Script__"
redirect, automsg, final
);
- CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, 0);
+ size_t len = CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, 0);
+ if (encoded_rule[len - 1] == '\n') {
+ encoded_rule[len - 1] = '\0';
+ }
serv_printf("# WEBCIT_RULE|%d|%s|", i, encoded_rule);
output_sieve_rule(hfield, compare, htext, sizecomp, sizeval,
action, fileinto, redirect, automsg, final, my_addresses);
}
+void display_sieve_add_or_delete(void) {
+ output_headers(1, 1, 2, 0, 0, 0);
+ do_template("sieve_add");
+ wDumpContent(1);
+}
+
+
+
/*
* create a new script
* take the web environment script name and create it on the citadel server
serv_printf("MSIV getscript|%s", bstr("script_name"));
serv_getln(buf, sizeof buf);
- if (buf[0] == '1') {
+ if (buf[0] == '1') { // does script exist already?
while (serv_getln(buf, sizeof(buf)), strcmp(buf, "000")) {
- /* flush */
+ // yes -- flush the output
}
- return;
}
-
- serv_printf("MSIV putscript|%s", bstr("script_name"));
- serv_getln(buf, sizeof buf);
- if (buf[0] == '4') {
- serv_puts("keep;");
- serv_puts("000");
- output_headers(1, 1, 2, 0, 0, 0);
- do_template("sieve_add");
- wDumpContent(1);
- return;
+ else {
+ // no -- safe to create a new one by this name
+ serv_printf("MSIV putscript|%s", bstr("script_name"));
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '4') {
+ serv_puts("keep;");
+ serv_puts("000");
+ }
}
- output_headers(1, 1, 2, 0, 0, 0);
- do_template("sieve_add");
- wDumpContent(1);
+ display_sieve_add_or_delete();
}
serv_printf("MSIV deletescript|%s", bstr("script_name"));
serv_getln(buf, sizeof buf);
- output_headers(1, 1, 2, 0, 0, 0);
- do_template("sieve_add");
- wDumpContent(1);
+ display_sieve_add_or_delete();
}
*/
void display_no_sieve(void) {
- output_headers(1, 1, 2, 0, 0, 0);
+ output_headers(1, 1, 1, 0, 0, 0);
do_template("sieve_none");
wDumpContent(1);
}
int ConditionalSieveScriptIsActive(StrBuf *Target, WCTemplputParams *TP)
{
- SieveListing *SieveList = (SieveListing *)CTX;
+ SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
return SieveList->IsActive;
}
int ConditionalSieveScriptIsRulesScript(StrBuf *Target, WCTemplputParams *TP)
{
- SieveListing *SieveList = (SieveListing *)CTX;
+ SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
return SieveList->IsActive;
}
void tmplput_SieveScriptName(StrBuf *Target, WCTemplputParams *TP)
{
- SieveListing *SieveList = (SieveListing *)CTX;
+ SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
StrBufAppendTemplate(Target, TP, SieveList->Name, 0);
}
void tmplput_SieveScriptContent(StrBuf *Target, WCTemplputParams *TP)
{
- SieveListing *SieveList = (SieveListing *)CTX;
+ SieveListing *SieveList = (SieveListing *)CTX(CTX_SIEVELIST);
StrBufAppendTemplate(Target, TP, SieveList->Content, 0);
}
void FreeSieveListing(void *vSieveListing)
int ConditionalSieveRule_hfield(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
}
int ConditionalSieveRule_compare(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
3,
}
int ConditionalSieveRule_action(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
3,
}
int ConditionalSieveRule_sizecomp(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
3,
}
int ConditionalSieveRule_final(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
3,
}
int ConditionalSieveRule_ThisRoom(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return GetTemplateTokenNumber(Target,
TP,
3,
}
int ConditionalSieveRule_Active(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
return Rule->active;
}
void tmplput_SieveRule_htext(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
StrBufAppendTemplate(Target, TP, Rule->htext, 0);
}
void tmplput_SieveRule_fileinto(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
StrBufAppendTemplate(Target, TP, Rule->fileinto, 0);
}
void tmplput_SieveRule_redirect(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
StrBufAppendTemplate(Target, TP, Rule->redirect, 0);
}
void tmplput_SieveRule_automsg(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
StrBufAppendTemplate(Target, TP, Rule->automsg, 0);
}
void tmplput_SieveRule_sizeval(StrBuf *Target, WCTemplputParams *TP)
{
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
StrBufAppendPrintf(Target, "%d", Rule->sizeval);
}
void tmplput_SieveRule_lookup_FileIntoRoom(StrBuf *Target, WCTemplputParams *TP)
{
void *vRoom;
- SieveRule *Rule = (SieveRule *)CTX;
+ SieveRule *Rule = (SieveRule *)CTX(CTX_SIEVESCRIPT);
wcsession *WCC = WC;
HashList *Rooms = GetRoomListHashLKRA(Target, TP);
InitModule_SIEVE
(void)
{
+ RegisterCTX(CTX_SIEVELIST);
+ RegisterCTX(CTX_SIEVESCRIPT);
REGISTERTokenParamDefine(from);
REGISTERTokenParamDefine(tocc);
REGISTERTokenParamDefine(subject);
RegisterIterator("SIEVE:SCRIPTS", 0, NULL, GetSieveScriptListing, NULL, NULL, CTX_SIEVELIST, CTX_NONE, IT_NOFLAG);
- RegisterConditional(HKEY("COND:SIEVE:SCRIPT:ACTIVE"), 0, ConditionalSieveScriptIsActive, CTX_SIEVELIST);
- RegisterConditional(HKEY("COND:SIEVE:SCRIPT:ISRULES"), 0, ConditionalSieveScriptIsRulesScript, CTX_SIEVELIST);
+ RegisterConditional("COND:SIEVE:SCRIPT:ACTIVE", 0, ConditionalSieveScriptIsActive, CTX_SIEVELIST);
+ RegisterConditional("COND:SIEVE:SCRIPT:ISRULES", 0, ConditionalSieveScriptIsRulesScript, CTX_SIEVELIST);
RegisterNamespace("SIEVE:SCRIPT:NAME", 0, 1, tmplput_SieveScriptName, NULL, CTX_SIEVELIST);
RegisterNamespace("SIEVE:SCRIPT:CONTENT", 0, 1, tmplput_SieveScriptContent, NULL, CTX_SIEVELIST);
RegisterIterator("SIEVE:RULES", 0, NULL, GetSieveRules, NULL, DeleteHash, CTX_SIEVESCRIPT, CTX_NONE, IT_NOFLAG);
- RegisterConditional(HKEY("COND:SIEVE:ACTIVE"), 1, ConditionalSieveRule_Active, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:HFIELD"), 1, ConditionalSieveRule_hfield, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:COMPARE"), 1, ConditionalSieveRule_compare, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:ACTION"), 1, ConditionalSieveRule_action, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:SIZECOMP"), 1, ConditionalSieveRule_sizecomp, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:FINAL"), 1, ConditionalSieveRule_final, CTX_SIEVESCRIPT);
- RegisterConditional(HKEY("COND:SIEVE:THISROOM"), 1, ConditionalSieveRule_ThisRoom, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:ACTIVE", 1, ConditionalSieveRule_Active, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:HFIELD", 1, ConditionalSieveRule_hfield, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:COMPARE", 1, ConditionalSieveRule_compare, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:ACTION", 1, ConditionalSieveRule_action, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:SIZECOMP", 1, ConditionalSieveRule_sizecomp, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:FINAL", 1, ConditionalSieveRule_final, CTX_SIEVESCRIPT);
+ RegisterConditional("COND:SIEVE:THISROOM", 1, ConditionalSieveRule_ThisRoom, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:HTEXT", 0, 1, tmplput_SieveRule_htext, NULL, CTX_SIEVESCRIPT);
RegisterNamespace("SIEVE:SCRIPT:SIZE", 0, 1, tmplput_SieveRule_sizeval, NULL, CTX_SIEVESCRIPT);
WebcitAddUrlHandler(HKEY("save_sieve"), "", 0, save_sieve, 0);
WebcitAddUrlHandler(HKEY("create_script"), "", 0, create_script, 0);
WebcitAddUrlHandler(HKEY("delete_script"), "", 0, delete_script, 0);
+ WebcitAddUrlHandler(HKEY("display_sieve_add_or_delete"), "", 0, display_sieve_add_or_delete, 0);
}