mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-06-29 01:36:44 +03:00
Improved Sieve Script editor with lists of available Actions, Controls and Tests
This commit is contained in:
parent
ff9a89380c
commit
f47eb61aee
14 changed files with 269 additions and 164 deletions
181
dev/Sieve/Commands.js
Normal file
181
dev/Sieve/Commands.js
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
|
||||
import { capa } from 'Sieve/Utils';
|
||||
|
||||
import {
|
||||
ActionCommand,
|
||||
ControlCommand,
|
||||
TestCommand
|
||||
} from 'Sieve/Grammar';
|
||||
|
||||
import {
|
||||
DiscardCommand,
|
||||
FileIntoCommand,
|
||||
KeepCommand,
|
||||
RedirectCommand
|
||||
} from 'Sieve/Commands/Actions';
|
||||
|
||||
import {
|
||||
ConditionalCommand,
|
||||
ElsIfCommand,
|
||||
ElseCommand,
|
||||
IfCommand,
|
||||
RequireCommand,
|
||||
StopCommand
|
||||
} from 'Sieve/Commands/Controls';
|
||||
|
||||
import {
|
||||
AddressTest,
|
||||
AllOfTest,
|
||||
AnyOfTest,
|
||||
EnvelopeTest,
|
||||
ExistsTest,
|
||||
FalseTest,
|
||||
HeaderTest,
|
||||
NotTest,
|
||||
SizeTest,
|
||||
TrueTest
|
||||
} from 'Sieve/Commands/Tests';
|
||||
|
||||
import { BodyTest } from 'Sieve/Extensions/rfc5173';
|
||||
import { EnvironmentTest } from 'Sieve/Extensions/rfc5183';
|
||||
import { SetCommand, StringTest } from 'Sieve/Extensions/rfc5229';
|
||||
import { VacationCommand } from 'Sieve/Extensions/rfc5230';
|
||||
import { SetFlagCommand, AddFlagCommand, RemoveFlagCommand, HasFlagTest } from 'Sieve/Extensions/rfc5232';
|
||||
import { SpamTestTest, VirusTestTest } from 'Sieve/Extensions/rfc5235';
|
||||
import { DateTest, CurrentDateTest } from 'Sieve/Extensions/rfc5260';
|
||||
import { AddHeaderCommand, DeleteHeaderCommand } from 'Sieve/Extensions/rfc5293';
|
||||
import { ErejectCommand, RejectCommand } from 'Sieve/Extensions/rfc5429';
|
||||
import { NotifyCommand, ValidNotifyMethodTest, NotifyMethodCapabilityTest } from 'Sieve/Extensions/rfc5435';
|
||||
import { IHaveTest, ErrorCommand } from 'Sieve/Extensions/rfc5463';
|
||||
import { MailboxExistsTest, MetadataTest, MetadataExistsTest } from 'Sieve/Extensions/rfc5490';
|
||||
import { ForEveryPartCommand, BreakCommand, ReplaceCommand, EncloseCommand, ExtractTextCommand } from 'Sieve/Extensions/rfc5703';
|
||||
import { IncludeCommand, ReturnCommand, GlobalCommand } from 'Sieve/Extensions/rfc6609';
|
||||
|
||||
export const
|
||||
getIdentifier = (cmd, type) => {
|
||||
const obj = new cmd, requires = obj.require;
|
||||
return (
|
||||
(!type || obj instanceof type)
|
||||
&& (!requires || (Array.isArray(requires) ? requires : [requires]).every(string => capa.includes(string)))
|
||||
)
|
||||
? obj.identifier
|
||||
: null;
|
||||
},
|
||||
|
||||
AllCommands = [
|
||||
// Control commands
|
||||
IfCommand,
|
||||
ElsIfCommand,
|
||||
ElseCommand,
|
||||
ConditionalCommand,
|
||||
RequireCommand,
|
||||
StopCommand,
|
||||
// Action commands
|
||||
DiscardCommand,
|
||||
FileIntoCommand,
|
||||
KeepCommand,
|
||||
RedirectCommand,
|
||||
// Test commands
|
||||
AddressTest,
|
||||
AllOfTest,
|
||||
AnyOfTest,
|
||||
EnvelopeTest,
|
||||
ExistsTest,
|
||||
FalseTest,
|
||||
HeaderTest,
|
||||
NotTest,
|
||||
SizeTest,
|
||||
TrueTest,
|
||||
// rfc5173
|
||||
BodyTest,
|
||||
// rfc5183
|
||||
EnvironmentTest,
|
||||
// rfc5229
|
||||
SetCommand,
|
||||
StringTest,
|
||||
// rfc5230
|
||||
VacationCommand,
|
||||
// rfc5232
|
||||
SetFlagCommand,
|
||||
AddFlagCommand,
|
||||
RemoveFlagCommand,
|
||||
HasFlagTest,
|
||||
// rfc5235
|
||||
SpamTestTest,
|
||||
VirusTestTest,
|
||||
// rfc5260
|
||||
DateTest,
|
||||
CurrentDateTest,
|
||||
// rfc5293
|
||||
AddHeaderCommand,
|
||||
DeleteHeaderCommand,
|
||||
// rfc5429
|
||||
ErejectCommand,
|
||||
RejectCommand,
|
||||
// rfc5435
|
||||
NotifyCommand,
|
||||
ValidNotifyMethodTest,
|
||||
NotifyMethodCapabilityTest,
|
||||
// rfc5463
|
||||
IHaveTest,
|
||||
ErrorCommand,
|
||||
// rfc5490
|
||||
MailboxExistsTest,
|
||||
MetadataTest,
|
||||
MetadataExistsTest,
|
||||
// rfc5703
|
||||
ForEveryPartCommand,
|
||||
BreakCommand,
|
||||
ReplaceCommand,
|
||||
EncloseCommand,
|
||||
ExtractTextCommand,
|
||||
// rfc6609
|
||||
IncludeCommand,
|
||||
ReturnCommand,
|
||||
GlobalCommand
|
||||
],
|
||||
|
||||
availableCommands = () => {
|
||||
let commands = {}, id;
|
||||
AllCommands.forEach(cmd => {
|
||||
id = getIdentifier(cmd);
|
||||
if (id) {
|
||||
commands[id] = cmd;
|
||||
}
|
||||
});
|
||||
return commands;
|
||||
},
|
||||
|
||||
availableActions = () => {
|
||||
let actions = {}, id;
|
||||
AllCommands.forEach(cmd => {
|
||||
id = getIdentifier(cmd, ActionCommand);
|
||||
if (id) {
|
||||
actions[id] = cmd;
|
||||
}
|
||||
});
|
||||
return actions;
|
||||
},
|
||||
|
||||
availableControls = () => {
|
||||
let controls = {}, id;
|
||||
AllCommands.forEach(cmd => {
|
||||
id = getIdentifier(cmd, ControlCommand);
|
||||
if (id) {
|
||||
controls[id] = cmd;
|
||||
}
|
||||
});
|
||||
return controls;
|
||||
},
|
||||
|
||||
availableTests = () => {
|
||||
let tests = {}, id;
|
||||
AllCommands.forEach(cmd => {
|
||||
id = getIdentifier(cmd, TestCommand);
|
||||
if (id) {
|
||||
tests[id] = cmd;
|
||||
}
|
||||
});
|
||||
return tests;
|
||||
};
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue