{-# LANGUAGE CPP #-}
-- | Module holding localized error messages to be presented as a response.
--
-- To localize error messages provided by HURL, provide your translations between
-- "BEGIN LOCALIZATION" & "END LOCALIZATION" in this file.
--
-- The lines are formatted:
-- trans ("LANG":_) (KEY) = "TRANSLATION"
-- with uppercase indicating the bits you fill in.
--
-- Translations between #if WITH_HTTP_URI & #endif are specific to HTTP error handling.
module Network.URI.Messages (trans, Errors(..)) where
import Data.List (stripPrefix)
import Data.Maybe (fromMaybe)
trans _ (RawXML markup) = markup
--- BEGIN LOCALIZATION
trans ("en":_) (UnsupportedScheme scheme) = "Unsupported protocol " ++ scheme
trans ("en":_) (UnsupportedMIME mime) = "Unsupported filetype " ++ mime
trans ("en":_) (RequiresInstall mime appsMarkup) =
"<h1>Please install a compatible app to open <code>" ++ linkType ++ "</code> links</h1>\n" ++ appsMarkup
where linkType = fromMaybe mime $ stripPrefix "x-scheme-handler/" mime
trans ("en":_) (OpenedWith app) = "Opened in " ++ app
trans ("en":_) (ReadFailed msg) = "Failed to read file: " ++ msg
trans ("en":_) (MalformedResponse why) = "Invalid response! " ++ why
trans ("en":_) ExcessiveRedirects = "Too many redirects!"
trans ("en":_) (GeminiError '1' '1' label) =
"<form><label>" ++ label ++ "<input type=password></form>"
trans ("en":_) (GeminiError '1' _ label) = "<form><label>" ++ label ++ "<input></form>"
trans ("en":_) (GeminiError '4' '1' _) = "Site unavailable!"
trans ("en":_) (GeminiError '4' '2' _) = "Program error!"
trans ("en":_) (GeminiError '4' '3' _) = "Proxy error!"
trans ("en":_) (GeminiError '4' '4' timeout) =
"Site busy! Please reload after at least " ++ timeout ++ " seconds"
trans ("en":_) (GeminiError '5' '1' _) = "Page not found! Try the <a href='/'>homepage</a>."
trans ("en":_) (GeminiError '5' '2' _) = "Page deleted! Try the <a href='/'>homepage</a>."
trans ("en":_) (GeminiError '5' '3' _) = "Contacted wrong server!"
trans ("en":_) (GeminiError '5' '9' _) = "Malformed request, my bad!"
trans ("en":_) (GeminiError '6' '1' _) = "<form><label>Authentication required" ++
"<-argo-authenticate error='Unauthorized account!'></-argo-authenticate></form>"
trans ("en":_) (GeminiError '6' '2' _) = "<form><label>Authentication required" ++
"<-argo-authenticate error='Invalid account!'></-argo-authenticate></form>"
trans ("en":_) (GeminiError '6' _ _) = "<form><label>Authentication required" ++
"<-argo-authenticate></-argo-authenticate></form>"
trans ("en":_) (GeminiError _ _ error) = error
trans ("en":_) (HTTPStatus 400 _) = "I sent a bad request, according to this site."
trans ("en":_) (HTTPStatus 401 _) = "Authentication required!" -- FIXME: Support HTTP Basic Auth.
trans ("en":_) (HTTPStatus 402 _) = "Payment required!"
trans ("en":_) (HTTPStatus 403 _) = "Access denied!"
trans ("en":_) (HTTPStatus 404 _) = "Page not found! Try the <a href='/'>homepage</a>."
trans ("en":_) (HTTPStatus 405 _) = "Bad webform for this destination webaddress! " ++
"<em>Method not allowed</em>."
trans ("en":_) (HTTPStatus 406 _) = "No representation available for given criteria!"
trans ("en":_) (HTTPStatus 407 _) = "Authentication into proxyserver required!"
trans ("en":_) (HTTPStatus 408 _) = "The site took too long to connect! <em>(HTTP 408)</em>"
trans ("en":_) (HTTPStatus 409 _) = "Request is based on outdated state!"
trans ("en":_) (HTTPStatus 410 _) = "Page deleted! Try the <a href='/'>homepage</a>."
trans ("en":_) (HTTPStatus 411 _) = "I sent a bad request, according to this site." ++
"<em>(Missing <code>Content-Length</code> header)</em>"
trans ("en":_) (HTTPStatus 412 _) = "Webpage doesn't meet our preconditions."
trans ("en":_) (HTTPStatus 413 _) = "Payload too large, please upload a smaller file!"
trans ("en":_) (HTTPStatus 414 _) = "Web address is too long for the site!"
trans ("en":_) (HTTPStatus 415 _) = "No representation available for supported filetypes!"
trans ("en":_) (HTTPStatus 416 _) = "Invalid byte-range of requested resource!"
trans ("en":_) (HTTPStatus 417 _) = "Site cannot satisfy our stated expectations!"
trans ("en":_) (HTTPStatus 418 _) = unlines [
"<p>I'm a little teapot<br/>",
"Short and stout<br/>",
"Here is my handle<br/>",
"And here is my spout.</p>>",
"<p>When I get all steamed up<br/>",
"Hear me shout<br/>",
"<q>Tip me over<br/>",
"And pour me out!</q></p>"
]
trans ("en":_) (HTTPStatus 421 _) = "Contacted wrong server!"
trans ("en":_) (HTTPStatus 422 _) = "Invalid <strong>WebDAV</strong> request!"
trans ("en":_) (HTTPStatus 423 _) = "<strong>WebDAV</strong> resource is locked!"
trans ("en":_) (HTTPStatus 424 _) = "Failed due to previous failure!"
trans ("en":_) (HTTPStatus 425 _) = "Site requires stronger security on our request!"
trans ("en":_) (HTTPStatus 426 _) = "Site requires newer networking-protocols!"
trans ("en":_) (HTTPStatus 428 _) = "Site requires additional protection to avoid loosing changes!"
trans ("en":_) (HTTPStatus 429 _) = "We sent this site too many requests for it to cope with!"
trans ("en":_) (HTTPStatus 431 _) = "I sent more auxiliary data than this site can cope with!"
trans ("en":_) (HTTPStatus 451 _) = "Requested page cannot legally be provided!"
trans ("en":_) (HTTPStatus 500 _) = "The site experienced an error generating this webpage. <em>The webmasters have probably already been automatically notified.</em>"
trans ("en":_) (HTTPStatus 501 _) = "Bad webform for this destination webaddress! " ++
"<em>Method not implemented</em>."
trans ("en":_) (HTTPStatus 502 _) = "Proxyserver got a malformed response!"
trans ("en":_) (HTTPStatus 503 _) = "The site is not available right now!"
trans ("en":_) (HTTPStatus 504 _) = "The site took too long to respond! <em>(Behind proxy)</em>"
trans ("en":_) (HTTPStatus 505 _) = "The site does not speak the language as me! " ++
"<em>(Unsupported HTTP version)</em>"
trans ("en":_) (HTTPStatus 506 _) = "The site is misconfigured!"
trans ("en":_) (HTTPStatus 507 _) = "Insufficient <strong>WebDAV</strong> storage!"
trans ("en":_) (HTTPStatus 508 _) = "<strong>WebDAV</strong> loop detected!"
trans ("en":_) (HTTPStatus 510 _) = "Further request extensions required!"
trans ("en":_) (HTTPStatus 511 _) = "Authentication into network required!"
trans ("en":_) (HTTPStatus _ error) = error -- Fallback
trans ("en":_) (OtherException error) = "Internal Exception <pre><code>" ++ error ++ "</code></pre>"
trans ("en":_) (InvalidUrl url message) =
"Invalid web address <code>" ++ url ++ "</code>: <em>" ++ message ++ "</em>"
trans ("en":_) (ProxyError msg code code' msg') = unlines [
"<h1>Proxy failed to forward request!<h1>",
"<p>" ++ show code ++ " " ++ msg ++ "</p>",
"<p>" ++ show code' ++ " " ++ msg' ++ "</p>"
]
trans ("en":_) (InvalidRequest why) =
"Attempted to send invalid auxiliary data: <em>" ++ why ++ "</em>"
trans ("en":_) InsecureUnestablished =
"Attempted to send or recieve data before establishing secure connection!"
trans ("en":_) (InsecureCertificate why) = unlines [
"<h1>The site failed to prove it is who it says it is!</h1>",
"<p>" ++ why ++ "</p>",
"<p><a href=action:history/back>Leave Insecure Site</a> | ",
"<a href=action:novalidate>Accept Imposter Risk & Continue</a></p>"
]
trans ("en":_) (InsecureTerminated why) = "Secure session disconnected! <em>" ++ why ++ "</em>"
trans ("en":_) InsecureCertificateUnknownCA = "The authority vouching for it is unknown to me!"
trans ("en":_) InsecureCertificateUnknown =
"The cryptographic certificate it has sent us to prove its identity instead " ++
"belongs to someone else!"
trans ("en":_) InsecureCertificateRevoked =
"The cryptographic certificate it has sent us to prove its identity has been revoked!"
trans ("en":_) InsecureCertificateExpired =
"The cryptographic certificate it has sent us to prove its identity has expired!"
trans ("en":_) InsecureCertificateUnsupported =
"It has sent us a cryptographic certificate to prove its identity I failed to make sense of."
trans ("en":_) (HandshakePacketUnparsed why) = "Invalid security packet: <em>" ++ why ++ "</em>"
trans ("en":_) (HandshakePacketUnexpected a b) = unlines [
"<p>Invalid security packet: <em>" ++ a ++ "</em></p>",
"<p>" ++ b ++ "</p>"
]
trans ("en":_) (HandshakePacketInvalid why) = "Invalid security packet: <em>" ++ why ++ "</em>"
trans ("en":_) HandshakeEOF = "Secure session disconnected!"
trans ("en":_) (HandshakePolicy why) = "Invalid handshake policy: <em>" ++ why ++ "</em>"
trans ("en":_) (HandshakeMisc why) =
"Failed to establish secure connection! <em>" ++ why ++ "</em>"
trans ("en":_) HandshakeError = "Failed to negotiate security parameters!"
trans ("en":_) HandshakeClosed = "Secure session disconnected!"
trans ("en":_) (FailedConnect why) = "Failed to open connection to the site: <em>" ++ why ++ "</em>"
trans ("en":_) TimeoutConnection = "The site took too long to connect!"
trans ("en":_) TimeoutResponse = "The site took too long to respond!"
--- END LOCALIZATION
trans (_:locales) err = trans locales err
trans [] err = trans ["en"] err
data Errors = UnsupportedScheme String | UnsupportedMIME String | RequiresInstall String String
| OpenedWith String | ReadFailed String | RawXML String | MalformedResponse String
| ExcessiveRedirects | HTTPStatus Int String | GeminiError Char Char String
| OtherException String | InvalidUrl String String | ProxyError String Int Int String
| InvalidRequest String
| InsecureUnestablished | InsecureCertificate String | InsecureTerminated String
| InsecureCertificateUnknownCA | InsecureCertificateUnknown | InsecureCertificateRevoked
| InsecureCertificateExpired | InsecureCertificateUnsupported
| HandshakePacketUnparsed String | HandshakePacketUnexpected String String
| HandshakePacketInvalid String
| HandshakeEOF | HandshakePolicy String | HandshakeMisc String | HandshakeError | HandshakeClosed
| FailedConnect String | TimeoutConnection | TimeoutResponse