corpus

self-hosted listenbrainz and last.fm proxy
Log | Files | Refs | README | LICENSE

Handler.purs (1452B)


      1 module Handler
      2   ( Response
      3   , Request
      4   , serveNotFound
      5   , serveUnauthorized
      6   , serveInternalError
      7   , serveBadRequest
      8   , serveError
      9   , respond
     10   ) where
     11 
     12 import Prelude
     13 
     14 import Effect (Effect)
     15 import Node.Encoding (Encoding(UTF8))
     16 import Node.HTTP.OutgoingMessage (setHeader, toWriteable)
     17 import Node.HTTP.ServerResponse (setStatusCode, toOutgoingMessage)
     18 import Node.Stream (end, writeString)
     19 import Node.HTTP.Types (ServerResponse, IncomingMessage, IMServer)
     20 
     21 type Request = IncomingMessage IMServer
     22 
     23 type Response = ServerResponse
     24 
     25 respond :: String -> Int -> String -> Response -> Effect Unit
     26 respond contentType statusCode body res = do
     27   setHeader "Content-Type" contentType (toOutgoingMessage res)
     28   setStatusCode statusCode res
     29   let w = toWriteable (toOutgoingMessage res)
     30   void $ writeString w UTF8 body
     31   end w
     32 
     33 serveNotFound :: Response -> Effect Unit
     34 serveNotFound = respond "text/plain" 404 "Not Found"
     35 
     36 serveUnauthorized :: Response -> Effect Unit
     37 serveUnauthorized = respond "text/plain" 401 "Unauthorized"
     38 
     39 serveInternalError :: Response -> Effect Unit
     40 serveInternalError = respond "text/plain" 500 "Internal Server Error"
     41 
     42 serveBadRequest :: Response -> String -> Effect Unit
     43 serveBadRequest res message = respond "text/plain" 400 message res
     44 
     45 serveError :: Response -> Int -> String -> String -> Effect Unit
     46 serveError res statusCode statusName message =
     47   respond "text/plain" statusCode (statusName <> ": " <> message) res