Appservice config: handle regexp parsing errors

Signed-off-by: diamondburned <datutbrus@gmail.com>
This commit is contained in:
diamondburned 2021-04-16 01:05:53 -07:00
parent a9faa1bc44
commit 2a0d08f29a

View file

@ -213,14 +213,22 @@ func setupRegexps(asAPI *AppServiceAPI, derived *Derived) (err error) {
usersSlice = []ApplicationServiceNamespace{} usersSlice = []ApplicationServiceNamespace{}
appservice.NamespaceMap["users"] = usersSlice appservice.NamespaceMap["users"] = usersSlice
} }
appendExclusiveNamespaceRegexs(&senderUserIDSlice, usersSlice)
err = appendExclusiveNamespaceRegexs(&senderUserIDSlice, usersSlice)
if err != nil {
return fmt.Errorf("invalid regex in appservice %q: %w", appservice.ID, err)
}
for key, namespaceSlice := range appservice.NamespaceMap { for key, namespaceSlice := range appservice.NamespaceMap {
switch key { switch key {
case "users": case "users":
appendExclusiveNamespaceRegexs(&exclusiveUsernameStrings, namespaceSlice) err = appendExclusiveNamespaceRegexs(&exclusiveUsernameStrings, namespaceSlice)
case "aliases": case "aliases":
appendExclusiveNamespaceRegexs(&exclusiveAliasStrings, namespaceSlice) err = appendExclusiveNamespaceRegexs(&exclusiveAliasStrings, namespaceSlice)
}
if err != nil {
return fmt.Errorf("invalid regex in appservice %q, namespace %q: %w", appservice.ID, key, err)
} }
} }
} }
@ -257,7 +265,7 @@ func setupRegexps(asAPI *AppServiceAPI, derived *Derived) (err error) {
// into the string slice // into the string slice
func appendExclusiveNamespaceRegexs( func appendExclusiveNamespaceRegexs(
exclusiveStrings *[]string, namespaces []ApplicationServiceNamespace, exclusiveStrings *[]string, namespaces []ApplicationServiceNamespace,
) { ) error {
for index, namespace := range namespaces { for index, namespace := range namespaces {
if namespace.Exclusive { if namespace.Exclusive {
// We append parenthesis to later separate each regex when we compile // We append parenthesis to later separate each regex when we compile
@ -266,8 +274,15 @@ func appendExclusiveNamespaceRegexs(
} }
// Compile this regex into a Regexp object for later use // Compile this regex into a Regexp object for later use
namespaces[index].RegexpObject, _ = regexp.Compile(namespace.Regex) r, err := regexp.Compile(namespace.Regex)
if err != nil {
return fmt.Errorf("regex at namespace %d: %w", index, err)
}
namespaces[index].RegexpObject = r
} }
return nil
} }
// checkErrors checks for any configuration errors amongst the loaded // checkErrors checks for any configuration errors amongst the loaded