on master help sign in
Properly implement protocol skipping in checker

Network.HTTP can only check if http:// and https:// links resolve, however there is much more scheme names than just `mail:`, `http://` and `https://`. They would be handed off to internal URI checker and would fail.

commit128f10deb8e06a0137f06165aa3b6166564ac28d authorSimonas Kazlauskas <git@kazlauskas.me> dateMon 1 Apr 2013, 15:10 (14 years ago) parentbf496c2
1 file changed+12−4
src/Hakyll/Check.hs+12−4
src/Hakyll/Check.hs+12−4
@@ -137,15 +137,23 @@ checkFile filePath = do
137137--------------------------------------------------------------------------------
138138checkUrl :: FilePath -> String -> Checker ()
139139checkUrl filePath url
140− | isExternal url = checkExternalUrl url
141− | "mailto:" `isPrefixOf` url = ok url
142− | otherwise = checkInternalUrl filePath url
143−
140+ | isExternal url = checkExternalUrl url
141+ | hasProtocol url = skip "Unknown protocol, skipping"
142+ | otherwise = checkInternalUrl filePath url
143+ where
144+ hasProtocol = all (`elem` validProtoChars) . takeWhile (/= ':')
145+ validProtoChars = ['A'..'Z'] ++ ['a'..'z'] ++ ['0'..'9'] ++ "+-."
144146
145147--------------------------------------------------------------------------------
146148ok :: String -> Checker ()
147149ok _ = tell $ mempty {checkerOk = 1}
148150
151+--------------------------------------------------------------------------------
152+skip :: String -> Checker ()
153+skip reason = do
154+ logger <- checkerLogger <$> ask
155+ Logger.debug logger $ reason
156+ tell $ mempty {checkerOk = 1}
149157
150158--------------------------------------------------------------------------------
151159faulty :: String -> Checker ()