- where -- FIXME must do this on the map elements, not on the top level
- pickglobals dom = def { domTlsa = fmap pickforcedtls (domTlsa dom) }
- pickforcedtls = filter (\x -> tlsIncSubdoms x)
-
+ where
+ pickglobals dom = fromMaybe def (siftsubmap (siftsubmap taketlsa) dom)
+ siftsubmap f dom =
+ let
+ sdmap = fromMaybe empty (domSubmap dom)
+ sdmap' = foldrWithKey (\k x -> addifjust k (f x)) empty sdmap
+ addifjust k mdom acc = case mdom of
+ Nothing -> acc
+ Just dom -> insert k dom acc -- dups are impossible here
+ in
+ if null sdmap' then Nothing else Just $ def { domSubmap = Just sdmap'}
+ taketlsa dom = case domTlsa dom of
+ Nothing -> Nothing
+ Just tlsa -> case filter (\x -> tlsIncSubdoms x) tlsa of
+ [] -> Nothing
+ tlsa' -> Just $ def { domTlsa = Just tlsa' }
+