diff options
| -rw-r--r-- | config.json | 23 | ||||
| -rw-r--r-- | lib/Uris.hs | 15 | 
2 files changed, 15 insertions, 23 deletions
diff --git a/config.json b/config.json index 9db5342..1ccb0a5 100644 --- a/config.json +++ b/config.json @@ -3,23 +3,16 @@    "Assemblies":[],    "ScriptInject":null,    "AllowScripts":false, -  "MaxLintLevel":"Warning", +  "MaxLintLevel":"Fatal",    "DontCopyAssets":false, -  "UriSchemas": [ -    ["https", { -      "scope" : ["website"], -      "allowed" : ["media.ccc.de", "streaming.media.ccc.de", "static.rc3.world", "cdn.c3voc.de", "pretalx.c3voc.de"], -      "blocked" : ["blocked.com"], -      "prefix" : "https:\/\/rc3.world\/2021\/wa_dereferrer\/" -    }], -    ["https", { -      "scope" : ["audio"], -      "allowed" : ["cdn.c3voc.de", "media.ccc.de", "streaming.media.ccc.de", "static.rc3.world", "live.dort.c3voc.de"] -    }], -    ["world", { +  "UriSchemas": { +    "world": {        "scope" : ["map"],        "substs" : {        } -    }] -  ] +    }, +    "https": { +      "scope" : [ "website", "audio" ] +    } +  }  } diff --git a/lib/Uris.hs b/lib/Uris.hs index a8c7068..596c272 100644 --- a/lib/Uris.hs +++ b/lib/Uris.hs @@ -23,6 +23,7 @@ data Substitution =      Prefixed { prefix :: Text, blocked :: [Text], allowed :: [Text], scope :: [String] }    | DomainSubstitution { substs :: Map Text Text, scope :: [String] }    | Allowed  { scope :: [String], allowed :: [Text] } +  | Unrestricted { scope :: [String] }    deriving (Generic, Show) @@ -32,7 +33,7 @@ instance FromJSON Substitution where      , rejectUnknownFields = True      } -type SchemaSet = [(Text, Substitution)] +type SchemaSet = Map Text Substitution  extractDomain :: Text -> Maybe Text @@ -78,20 +79,17 @@ applySubsts s substs uri =  do     $ Left VarsDisallowed    parts@(schema, _, _) <- note NotALink $ parseUri uri -  let rules = filter ((==) schema . fst) substs +  let rule = M.lookup schema substs -  case nonEmpty (map (applySubst parts . snd) rules) of +  case map (applySubst parts) rule of      Nothing  -> Left (SchemaDoesNotExist schema) -    Just results -> case rights (toList results) of -      suc:_ -> Right suc -      _     -> minimum results - +    Just result -> result    where      note = maybeToRight      applySubst (schema, domain, rest) rule = do        unless (symbolVal s `elem` scope rule)          $ Left (WrongScope schema -         (fmap fst . filter (elem (symbolVal s) . scope . snd) $ substs)) +         (map fst . filter (elem (symbolVal s) . scope . snd) $ toPairs substs))        case rule of          DomainSubstitution table _  -> do            prefix <- note (DomainDoesNotExist (schema <> toText "://" <> domain)) @@ -105,3 +103,4 @@ applySubsts s substs uri =  do                      || toText "streamproxy.rc3.world" `T.isSuffixOf` domain            then Right uri            else Left (DomainIsBlocked domains) +        Unrestricted _ -> Right uri  | 
