added Sieve getMatchTypes() for easy valid match-types

This commit is contained in:
the-djmaze 2022-03-16 14:33:43 +01:00
parent e4bd24b4e8
commit 37bb9a9a97
3 changed files with 13 additions and 12 deletions

View file

@ -9,9 +9,7 @@ import {
MULTILINE_DOTSTART
} from 'Sieve/RegEx';
import {
arrayToString
} from 'Sieve/Utils';
import { arrayToString, getMatchTypes } from 'Sieve/Utils';
/**
* abstract
@ -240,12 +238,10 @@ export class GrammarTest
toString()
{
/*
// https://datatracker.ietf.org/doc/html/rfc6134#section-2.3
if (':list' == this.match_type && !capa.includes('extlists')) {
if (!getMatchTypes().includes(this.match_type)) {
throw 'Unsupported match-type ' + this.match_type;
}
*/
return (this.identifier
+ (this.comparator ? ' :comparator ' + this.comparator : '')
+ (this.match_type ? ' ' + this.match_type : '')

View file

@ -2,7 +2,7 @@
* https://tools.ietf.org/html/rfc5228#section-8
*/
import { capa } from 'Sieve/Utils';
import { capa, getMatchTypes } from 'Sieve/Utils';
import {
BRACKET_COMMENT,
@ -213,11 +213,7 @@ export const parseScript = (script, name = 'script.sieve') => {
pushArg = arg => {
command || error('Argument not part of command');
let prev_arg = args[args.length-1];
/*
// https://datatracker.ietf.org/doc/html/rfc6134#section-2.3
if (':is' === arg || ':contains' === arg || ':matches' === arg || (capa.includes('extlists') && ':list')) {
*/
if (':is' === arg || ':contains' === arg || ':matches' === arg) {
if (getMatchTypes(0).includes(arg)) {
command.match_type = arg;
} else if (':value' === prev_arg || ':count' === prev_arg) {
// Sieve relational [RFC5231] match types

View file

@ -56,4 +56,13 @@ export const
setError = text => {
serverError(true);
serverErrorDesc(text);
},
getMatchTypes = (validOnly = 1) => {
let result = [':is',':contains',':matches'];
// https://datatracker.ietf.org/doc/html/rfc6134#section-2.3
if (capa.includes('extlists') || !validOnly) {
result.push(':list');
}
return result;
};