Fix ordering logic in replaceHeader function
This commit is contained in:
parent
f3ed12ed81
commit
89fc6c46e2
@ -798,19 +798,30 @@ setHeader = addHeader
|
|||||||
-- @since 1.4.36
|
-- @since 1.4.36
|
||||||
replaceOrAddHeader :: MonadHandler m => Text -> Text -> m ()
|
replaceOrAddHeader :: MonadHandler m => Text -> Text -> m ()
|
||||||
replaceOrAddHeader a b =
|
replaceOrAddHeader a b =
|
||||||
let header = Header (encodeUtf8 a) (encodeUtf8 b)
|
modify $ \g -> g {ghsHeaders = replaceHeader (ghsHeaders g)}
|
||||||
in modify $ \g -> g {ghsHeaders = replaceHeader header (ghsHeaders g)}
|
|
||||||
where
|
where
|
||||||
|
repHeader = Header (encodeUtf8 a) (encodeUtf8 b)
|
||||||
|
|
||||||
sameHeaderName :: Header -> Header -> Bool
|
sameHeaderName :: Header -> Header -> Bool
|
||||||
sameHeaderName (Header n1 _) (Header n2 _) = n1 == n2
|
sameHeaderName (Header n1 _) (Header n2 _) = n1 == n2
|
||||||
sameHeaderName _ _ = False
|
sameHeaderName _ _ = False
|
||||||
|
|
||||||
replaceHeader :: Header -> Endo [Header] -> Endo [Header]
|
replaceIndividualHeader :: [Header] -> [Header]
|
||||||
replaceHeader header endo =
|
replaceIndividualHeader [] = [repHeader]
|
||||||
|
replaceIndividualHeader xs = aux xs []
|
||||||
|
where
|
||||||
|
aux [] acc = acc ++ [repHeader]
|
||||||
|
aux (x:xs') acc =
|
||||||
|
if sameHeaderName repHeader x
|
||||||
|
then acc ++
|
||||||
|
[repHeader] ++
|
||||||
|
(filter (\header -> not (sameHeaderName header repHeader)) xs')
|
||||||
|
else aux xs' (acc ++ [x])
|
||||||
|
|
||||||
|
replaceHeader :: Endo [Header] -> Endo [Header]
|
||||||
|
replaceHeader endo =
|
||||||
let allHeaders :: [Header] = appEndo endo []
|
let allHeaders :: [Header] = appEndo endo []
|
||||||
in Endo
|
in Endo (\rest -> replaceIndividualHeader allHeaders ++ rest)
|
||||||
(\rest ->
|
|
||||||
header : filter (\x -> not (sameHeaderName x header)) allHeaders ++ rest)
|
|
||||||
|
|
||||||
-- | Set the Cache-Control header to indicate this response should be cached
|
-- | Set the Cache-Control header to indicate this response should be cached
|
||||||
-- for the given number of seconds.
|
-- for the given number of seconds.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user