hack 2009.4.29 → 2009.4.30
raw patch · 24 files changed
+27/−2388 lines, 24 filesdep −ansi-wl-pprintdep −base64-stringdep −bytestring
Dependencies removed: ansi-wl-pprint, base64-string, bytestring, cgi, containers, directory, filepath, haskell98, hyena, kibro, mps, network, old-locale, old-time, template, time, unix, zlib
Files
- changelog.md +9/−0
- hack.cabal +2/−27
- readme.md +12/−8
- src/Hack.hs +4/−3
- src/Hack/Constants.hs +0/−171
- src/Hack/Contrib/ContentSize.hs +0/−25
- src/Hack/Contrib/ContentType.hs +0/−17
- src/Hack/Contrib/File.hs +0/−92
- src/Hack/Contrib/Head.hs +0/−14
- src/Hack/Contrib/Hub.hs +0/−74
- src/Hack/Contrib/Lambda.hs +0/−47
- src/Hack/Contrib/Lucky.hs +0/−1173
- src/Hack/Contrib/Mime.hs +0/−178
- src/Hack/Contrib/RawRouter.hs +0/−20
- src/Hack/Contrib/ShowExceptions.hs +0/−31
- src/Hack/Contrib/ShowStatus.hs +0/−97
- src/Hack/Contrib/SimpleAccessLogger.hs +0/−22
- src/Hack/Contrib/SimpleRouter.hs +0/−25
- src/Hack/Contrib/Static.hs +0/−22
- src/Hack/Handler/Hyena.hs +0/−82
- src/Hack/Handler/Kibro.hs +0/−47
- src/Hack/Request.hs +0/−53
- src/Hack/Response.hs +0/−38
- src/Hack/Utils.hs +0/−122
changelog.md view
@@ -1,3 +1,12 @@+2009.4.30+----------++### Feature++* seperate handler from core module+* seperate contrib from Hack.hs+* now Hack.hs is only an interface file, where everything links to. This allows me to soft link handler in Hack.Contrib and Hack.Handler in development mode :)+ 2009.4.29 -----------
hack.cabal view
@@ -1,5 +1,5 @@ Name: hack-Version: 2009.4.29+Version: 2009.4.30 Build-type: Simple Synopsis: a sexy Haskell Webserver Interface Description:@@ -20,32 +20,7 @@ library ghc-options: -Wall- build-depends: base, cgi, network, haskell98, old-locale, old-time, directory, filepath, containers, bytestring, template, base64-string, zlib, hyena, ansi-wl-pprint, mps >= 2009.4.21, kibro >= 0.4.3, data-default >= 0.2, ansi-wl-pprint, bytestring, template, unix, time+ build-depends: base, data-default >= 0.2 hs-source-dirs: src/ exposed-modules: Hack- Hack.Utils- Hack.Request- Hack.Response- Hack.Constants- - Hack.Handler.Kibro- Hack.Handler.Hyena- - Hack.Contrib.ContentSize- Hack.Contrib.ContentType- Hack.Contrib.File- Hack.Contrib.Head- Hack.Contrib.Hub- Hack.Contrib.Lambda- Hack.Contrib.Lucky- Hack.Contrib.Mime- Hack.Contrib.RawRouter- Hack.Contrib.ShowExceptions- Hack.Contrib.ShowStatus- Hack.Contrib.SimpleAccessLogger- Hack.Contrib.SimpleRouter- Hack.Contrib.Static-- -
readme.md view
@@ -37,7 +37,10 @@ ### install hack - cabal install happy; cabal install hack+ cabal install happy;+ cabal install hack;+ cabal install hack-contrib+ cabal install hack-handler-hyena ### Create a Hack app @@ -73,10 +76,11 @@ module Main where import Hack- import Hack.Utils- import Hack.SimpleRoute import Hack.Handler.Hyena+ import Hack.Contrib.Utils+ import Hack.Contrib.Middleware.SimpleRoute + import Data.Default import MPS import Prelude hiding ((.))@@ -93,7 +97,7 @@ inside Hack.hs: - type MiddleWare = Application -> Application+ type Middleware = Application -> Application since Haskell has curry, middleware api can be of type @@ -105,10 +109,10 @@ {-# LANGUAGE QuasiQuotes #-} - module Hack.Contrib.SimpleRouter where+ module Hack.Contrib.Middleware.SimpleRouter where import Hack- import Hack.Utils+ import Hack.Contrib.Utils import MPSUTF8 import Prelude hiding ((.), (^), (>))@@ -116,7 +120,7 @@ type RoutePath = (String, Application) - route :: [RoutePath] -> MiddleWare+ route :: [RoutePath] -> Middleware route h app = \env -> let path = env.path_info script = env.script_name@@ -134,7 +138,7 @@ Rack provides a builder DSL, Hack just use a function. From `Utils.hs`: -- usage: app.use [content_type, cache]- use :: [MiddleWare] -> MiddleWare+ use :: [Middleware] -> Middleware use = reduce (<<<) Handlers
src/Hack.hs view
@@ -62,12 +62,13 @@ instance Default Response where def = Response def def def -- instance Default Env where def = Env def def def def def def def def def def const_io False False False def where const_io = const (return ()) type Application = Env -> IO Response -type MiddleWare = Application -> Application+type Middleware = Application -> Application++-- compatibility+type MiddleWare = Middleware
− src/Hack/Constants.hs
@@ -1,171 +0,0 @@-module Hack.Constants where--import MPS-import Prelude hiding ((.))-import Data.Map--status_with_no_entity_body :: [Int]-status_with_no_entity_body = [100 .. 199] ++ [204, 304]----- header constants-_CacheControl :: String-_Connection :: String-_Date :: String-_Pragma :: String-_TransferEncoding :: String-_Upgrade :: String-_Via :: String-_Accept :: String-_AcceptCharset :: String-_AcceptEncoding :: String-_AcceptLanguage :: String-_Authorization :: String-_Cookie :: String-_Expect :: String-_From :: String-_Host :: String-_IfModifiedSince :: String-_IfMatch :: String-_IfNoneMatch :: String-_IfRange :: String-_IfUnmodifiedSince :: String-_MaxForwards :: String-_ProxyAuthorization :: String-_Range :: String-_Referer :: String-_UserAgent :: String-_Age :: String-_Location :: String-_ProxyAuthenticate :: String-_Public :: String-_RetryAfter :: String-_Server :: String-_SetCookie :: String-_TE :: String-_Trailer :: String-_Vary :: String-_Warning :: String-_WWWAuthenticate :: String-_Allow :: String-_ContentBase :: String-_ContentEncoding :: String-_ContentLanguage :: String-_ContentLength :: String-_ContentLocation :: String-_ContentMD5 :: String-_ContentRange :: String-_ContentType :: String-_ETag :: String-_Expires :: String-_LastModified :: String-_ContentTransferEncoding :: String----_CacheControl = "Cache-Control" -_Connection = "Connection" -_Date = "Date" -_Pragma = "Pragma" -_TransferEncoding = "Transfer-Encoding" -_Upgrade = "Upgrade" -_Via = "Via" -_Accept = "Accept" -_AcceptCharset = "Accept-Charset" -_AcceptEncoding = "Accept-Encoding" -_AcceptLanguage = "Accept-Language" -_Authorization = "Authorization" -_Cookie = "Cookie" -_Expect = "Expect" -_From = "From" -_Host = "Host" -_IfModifiedSince = "If-Modified-Since" -_IfMatch = "If-Match" -_IfNoneMatch = "If-None-Match" -_IfRange = "If-Range" -_IfUnmodifiedSince = "If-Unmodified-Since" -_MaxForwards = "Max-Forwards" -_ProxyAuthorization = "Proxy-Authorization" -_Range = "Range" -_Referer = "Referer" -_UserAgent = "User-Agent" -_Age = "Age" -_Location = "Location" -_ProxyAuthenticate = "Proxy-Authenticate" -_Public = "Public" -_RetryAfter = "Retry-After" -_Server = "Server" -_SetCookie = "Set-Cookie" -_TE = "TE" -_Trailer = "Trailer" -_Vary = "Vary" -_Warning = "Warning" -_WWWAuthenticate = "WWW-Authenticate" -_Allow = "Allow" -_ContentBase = "Content-Base" -_ContentEncoding = "Content-Encoding" -_ContentLanguage = "Content-Language" -_ContentLength = "Content-Length" -_ContentLocation = "Content-Location" -_ContentMD5 = "Content-MD5" -_ContentRange = "Content-Range" -_ContentType = "Content-Type" -_ETag = "ETag" -_Expires = "Expires" -_LastModified = "Last-Modified" -_ContentTransferEncoding = "Content-Transfer-Encodeing"----- mime type-_TextPlain :: String-_TextHtml :: String--_TextPlain = "text/plain"-_TextHtml = "text/html"----- status code-status_code :: Map Int String-status_code =- [ x 100 "Continue"- , x 101 "Switching Protocols"- , x 200 "OK"- , x 201 "Created"- , x 202 "Accepted"- , x 203 "Non-Authoritative Information"- , x 204 "No Content"- , x 205 "Reset Content"- , x 206 "Partial Content"- , x 300 "Multiple Choices"- , x 301 "Moved Permanently"- , x 302 "Found"- , x 303 "See Other"- , x 304 "Not Modified"- , x 305 "Use Proxy"- , x 307 "Temporary Redirect"- , x 400 "Bad Request"- , x 401 "Unauthorized"- , x 402 "Payment Required"- , x 403 "Forbidden"- , x 404 "Not Found"- , x 405 "Method Not Allowed"- , x 406 "Not Acceptable"- , x 407 "Proxy Authentication Required"- , x 408 "Request Timeout"- , x 409 "Conflict"- , x 410 "Gone"- , x 411 "Length Required"- , x 412 "Precondition Failed"- , x 413 "Request Entity Too Large"- , x 414 "Request-URI Too Large"- , x 415 "Unsupported Media Type"- , x 416 "Requested Range Not Satisfiable"- , x 417 "Expectation Failed"- , x 500 "Internal Server Error"- , x 501 "Not Implemented"- , x 502 "Bad Gateway"- , x 503 "Service Unavailable"- , x 504 "Gateway Timeout"- , x 505 "HTTP Version Not Supported"- ] .to_h- where x a b = (a, b)
− src/Hack/Contrib/ContentSize.hs
@@ -1,25 +0,0 @@-module Hack.Contrib.ContentSize (content_size) where--import Hack-import Hack.Utils-import Hack.Response-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>))--content_size :: MiddleWare-content_size app = \env -> do- response <- app env- - if should_size response- then response- .set_header _ContentLength (response.body.bytesize.show) .return- else response .return- - where - should_size response =- [ not $ response.has_header _ContentLength- , not $ response.has_header _TransferEncoding- , not $ status_with_no_entity_body.has(response.status)- ] .and
− src/Hack/Contrib/ContentType.hs
@@ -1,17 +0,0 @@-module Hack.Contrib.ContentType (content_type) where--import Hack-import Hack.Response-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>))---content_type :: String -> MiddleWare-content_type s app = \env -> do- response <- app env- - case response.header _ContentType of- Nothing -> response.set_header _ContentType s .return- Just _ -> response .return
− src/Hack/Contrib/File.hs
@@ -1,92 +0,0 @@-module Hack.Contrib.File (file) where--import Hack-import Hack.Utils-import Hack.Response-import Hack.Constants-import Hack.Contrib.Mime--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+), (/), readFile)--import Data.Default-import Data.Maybe-import Data.List (isInfixOf)-import System.Directory-import System.FilePath---file :: Maybe String -> MiddleWare-file root _ = \env -> do- let path = env.path_info .url2unicode- - if ".." `isInfixOf` path - then forbidden- else serve root path env---serve :: Maybe String -> FilePath -> Env -> IO Response-serve root fname _ = do- cwd <- get_current_directory- let my_root = root.fromMaybe cwd- let path = my_root / makeRelative "/" fname- - exist <- file_exist path-- if not exist- then path.not_found- else- do - can_read <- path.get_permissions ^ readable- if not can_read- then path.no_permission- else path.serving- - where - serving path = do- content <- path.read_binary_file- size <- file_size path ^ from_i- mtime_str <- file_mtime path ^ httpdate- - let default_content_type = "application/octet-stream"- let safe_lookup = lookup_mime_type > fromMaybe default_content_type- let content_type = path.takeExtension.safe_lookup- - return $ - def - .set_body content- .set_content_length size- .set_content_type content_type- .set_last_modified mtime_str- .set_status 200--no_permission :: String -> IO Response-no_permission path = return $- def- .set_status 404- .set_content_type _TextPlain- .set_content_length (msg.length)- .set_body msg-- where msg = "No permission: " ++ path ++ "\n"--not_found :: String -> IO Response-not_found path = return $- def- .set_status 404- .set_content_type _TextPlain- .set_content_length (msg.length)- .set_body msg- - where msg = "File not found: " ++ path ++ "\n"--forbidden :: IO Response-forbidden = return $ - def- .set_status 403- .set_content_type _TextPlain- .set_content_length (msg.length)- .set_body msg-- where msg = "Forbidden\n"-
− src/Hack/Contrib/Head.hs
@@ -1,14 +0,0 @@-module Hack.Contrib.Head (head) where--import Hack-import Hack.Response--import MPSUTF8-import Prelude hiding ((.), (^), (>), head)--head :: MiddleWare-head app = \env -> do- response <- app env- if env.request_method.is HEAD - then return $ response .set_body "" .set_content_length 0- else return $ response
− src/Hack/Contrib/Hub.hs
@@ -1,74 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}---- the entire logging framework is stole from [innate](http://github.com/manveru/innate/tree/master)---module Hack.Contrib.Hub where--import Hack-import Hack.Utils--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+))--import Text.Printf-import System.Posix.Process (getProcessID)-import Data.Maybe-import Text.PrettyPrint.ANSI.Leijen-import Data.Time--data Severity = - Debug- | Info- | Warn- | Error- | Fatal- | Unknown- deriving (Show, Eq)--hint :: Severity -> String-hint = show > slice 0 1--type Formatter = Severity -> UTCTime -> Int -> String -> String -> String--type Logger = String -> Severity -> IO ()--hub :: Stream -> Formatter -> String -> Logger-hub stream formatter program = \message severity -> - do- time <- now- pid <- getProcessID ^ from_i- stream $ formatter severity time pid program message--simple_logger :: Stream -> String -> Logger-simple_logger = flip hub simple_formatter--simple_formatter :: Formatter-simple_formatter severity time pid program message =- printf line_format h t pid l program s- - where- line_format = "%s [%s $%d] %5s | %-25s: %s\n"- - h = severity.hint- - time_format = "%Y-%m-%d %H:%M:%S"- t = time.format_time time_format- - l = severity.show.upper- s = colorize severity message--colorize :: Severity -> String -> String-colorize severity message = color severity (message.text) .show- where- level_color = - [ ( Debug , blue )- , ( Info , white )- , ( Warn , yellow )- , ( Error , red )- , ( Fatal , red )- , ( Unknown , green )- ]- - color severity' = level_color.lookup severity' .fromMaybe green-
− src/Hack/Contrib/Lambda.hs
@@ -1,47 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Contrib.Lambda (lambda) where--import Hack-import Hack.Response-import Hack.Utils-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+))-import Data.Default--data64 :: String-data64 = [$here|--H4sIAAAAAAAAA+3dMVMbMRQE4J5foaGhpMhMCkP4LcpknCrBN0BB/n1yIbHkRNKd-pPe0j7vdjsa6/cYbjAm+++np6J5ffnw7frr+enp8ObiP0+vth+nVfT89np6nz1+O-d9cPXiQOHJESVyKPgqaQwRCxQEPMEaghYYFmeEt/DwELNMLfGLBAE4TALdAAccAW-6PqXgVqgy/8TpAW6+3+hRRSYBbp4KiALdO1kMBbo1pnQIgrAAl05n+EW6MKF0CLK-YAt03XJoETLUAl12KQMt0FUXQ4sowyzQRVeEFlEGWaBrrgotogyxQJdcGVpEGWCB-rrg6tIiiboEuWBFaRKFFiLIFul5VaBGFFiGqFuhylaFFFFqEKFqgq1WHFlFoEaJm-gS7WEFpEoUUILUKULNqv5+acX1/dnSNWuHS2MQsXLOYHOVschPqWYs7CXTwxDkaf-GIMsgCsxZwFciYpF3yXBVmLQArYSgxawlVi0gK3EogVqJRYtLp8Y41Zi0gK0EpsW-hZXcJNN/pLNqUVrJu7IQua78SvzuLCpXInOmUYvKlYgcadaibiUiJ9q1GP+Ky67F-+Fdc78JifsgBTwy7FrmN6GHYtcj825n+XiJyolmL3ELS30tEjrRqkV9I8hWXzJlG-LfILSa5E5EwFCy9wWaWFpFYicKRVi/JCEivpP9JZtcgsRPkVl0mLzEIOyu9xWbQo-/SSi+YrLokV2IXMUV2LQIr+QOYorsWex9LO62krWF7Tzu2WtlahY+J4rKi9kjtZK-zFmseTdLaSXmLBYXMkdnJdYslhcyR2clxizWvt+rsZKKfvy/rrSgxb4taurxb2lo-QYtdW1S149+n0mJ/FnXl+DkHtJCw8Oh6NamsRot9WNRW42eN7cKiuhk/m5AWQhYe-XXJd6nvRos/Co2uuSUMtWnRaeHTR5bS02qhFUyveW2HrFm2leP+RfguPrltKY6Ut-WrRW4j29JCw8unIuzYW2Z9FeaHP3hgRZeHTtVDrqbM2ip87G7qvb1WZb956GWnh0-+cv0deG96gUtPBogpLfJhiy6m/RbeLTBn/QXEbDwaIXfEeghYeHRDk6EQsbCoyWc-SIur+9vp6fjwE8s/QZd0jAAA--|].strip--lambda :: MiddleWare-lambda app = \env -> do- if env.path_info.is "/lambda"- then - return $ def- .set_body (data64.unzip64)- .set_content_type _TextHtml- .set_status 200- - else app env
− src/Hack/Contrib/Lucky.hs
@@ -1,1173 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Contrib.Lucky (lucky) where--import Hack-import Hack.Response-import Hack.Utils-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+))-import Data.Default--lucky :: MiddleWare-lucky app = \env -> do- if env.path_info.is "/lucky"- then - return $ def- .set_body (data64.unzip64)- .set_content_type _TextHtml- .set_status 200- - else app env--data64 :: String-data64 = [$here|-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-H7+xRzeg/knv0jbz9U9IkEQC4q6o4ZkXb3PDXLE2gSrGpwvf5vufbllhmh68hrF0-tqrLMeM2ZgKHcx/GBO/+0nLHsLXrDRIPrQAS8yP/eCWrURcFMTW7wYXUB7lJ+eJ6-0Cw+qGf5kFkBnhWl66OQifphpc2bq6Zzkbu1dwsnbEtrjYtVK/MUm3IDbNm31X0Q-wzOe0QK2LmTFlgRUOd6UsIitEsk0LB4x8hzVGn0zzAb+ji+3nXw8Wk15Tr33Ibrb-sprrvKVj5B0gC5rdOgfM6D6XGvR5BINRyAk7ywU5YZsqOr4l1/SEx47uLWc9O3st-Pum1aMxldB0GucP/05m+YRHd4obyLHR15l+6mWhR64BVvapx+xV9dDQMWUmN9P3g-YsZFvO5nXEWodFsbT+bblXcWnQtWBx8FlRT25walZtM02YfFhi/GWU93zzrPbr35-HPV8U2r19My55lidQNwg/7Y049HyTdxWk6bobk4zLpRmvJLrvS3NmOsOUJlzipdm-w5YrO62G8D4LY3bh+yOBkP8dVevPzEXaqTXXVo+DzwLrHgH0K2xzOZx4rF+APOU6-IAy+V8oYJSz9KsD80cVw1UVhNpX1gdpJKz0CXd6NlQxIQTPECnVVvk1kGMB93fkZ-Gy9lBeKNEY23ZKMFsni5J3mmzfyumU2eSd+zhB2J7HoZli3tuVkD8Qz08Vd3O5uG-ziC99ae243xFe0CcYUSrmjesEzGyvd0p6I2EK0RdC9uqLP2nqOnpWNQVEsbcy2Xk-985nEBmImcGCJhDVeUn9FLvTI/azdRSjqblbZQxymUml/PbDlqbXKdOyYzpvuNSE-uHExBq95rBv7eJ7fdD2y73KjYqlWO4tDSfB6RQcx8oINjigsr6U0n5kfXW3Jn+np-MIQymuSO8JJZz9Pxd/O2DPC77cBDos53ol/KC0pNO5s1DMnPIEdqZxs6SseGmTuq-NkI21ltNHVzlW20JaXseQMty5xdvpp96dbXeQWshmz3wiwfy/oebm7CMw+NZDpAo-7Gwumts84Gf3M48kce9xlJLljR3pDEb7tVbvtZLRQ3pcb7neBu25+VCQeBulDkAl-oekpeduI6VP5DR5s7JI5B+2F1kpLOrRZySMXZajVOGSyuDNDTC0NbXwLG2O+KEO0-3TqnS0+IkPaWAlpKp27cZHJm+9+x85bYAq+2yTwbVlI+NGdsjOq1C3Sb+1LSznCm-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-GwoA-|]
− src/Hack/Contrib/Mime.hs
@@ -1,178 +0,0 @@-module Hack.Contrib.Mime where--import qualified Data.Map as M-import MPSUTF8-import Prelude hiding ((.))--mime_types :: M.Map String String-mime_types = - [ x ".3gp" "video/3gpp"- , x ".a" "application/octet-stream"- , x ".ai" "application/postscript"- , x ".aif" "audio/x-aiff"- , x ".aiff" "audio/x-aiff"- , x ".asc" "application/pgp-signature"- , x ".asf" "video/x-ms-asf"- , x ".asm" "text/x-asm"- , x ".asx" "video/x-ms-asf"- , x ".atom" "application/atom+xml"- , x ".au" "audio/basic"- , x ".avi" "video/x-msvideo"- , x ".bat" "application/x-msdownload"- , x ".bin" "application/octet-stream"- , x ".bmp" "image/bmp"- , x ".bz2" "application/x-bzip2"- , x ".c" "text/x-c"- , x ".cab" "application/vnd.ms-cab-compressed"- , x ".cc" "text/x-c"- , x ".chm" "application/vnd.ms-htmlhelp"- , x ".class" "application/octet-stream"- , x ".com" "application/x-msdownload"- , x ".conf" "text/plain"- , x ".cpp" "text/x-c"- , x ".crt" "application/x-x509-ca-cert"- , x ".css" "text/css"- , x ".csv" "text/csv"- , x ".cxx" "text/x-c"- , x ".deb" "application/x-debian-package"- , x ".der" "application/x-x509-ca-cert"- , x ".diff" "text/x-diff"- , x ".djv" "image/vnd.djvu"- , x ".djvu" "image/vnd.djvu"- , x ".dll" "application/x-msdownload"- , x ".dmg" "application/octet-stream"- , x ".doc" "application/msword"- , x ".dot" "application/msword"- , x ".dtd" "application/xml-dtd"- , x ".dvi" "application/x-dvi"- , x ".ear" "application/java-archive"- , x ".eml" "message/rfc822"- , x ".eps" "application/postscript"- , x ".exe" "application/x-msdownload"- , x ".f" "text/x-fortran"- , x ".f77" "text/x-fortran"- , x ".f90" "text/x-fortran"- , x ".flv" "video/x-flv"- , x ".for" "text/x-fortran"- , x ".gem" "application/octet-stream"- , x ".gemspec" "text/x-script.ruby"- , x ".gif" "image/gif"- , x ".gz" "application/x-gzip"- , x ".h" "text/x-c"- , x ".hh" "text/x-c"- , x ".htm" "text/html"- , x ".html" "text/html"- , x ".ico" "image/vnd.microsoft.icon"- , x ".ics" "text/calendar"- , x ".ifb" "text/calendar"- , x ".iso" "application/octet-stream"- , x ".jar" "application/java-archive"- , x ".java" "text/x-java-source"- , x ".jnlp" "application/x-java-jnlp-file"- , x ".jpeg" "image/jpeg"- , x ".jpg" "image/jpeg"- , x ".js" "application/javascript"- , x ".json" "application/json"- , x ".log" "text/plain"- , x ".m3u" "audio/x-mpegurl"- , x ".m4v" "video/mp4"- , x ".man" "text/troff"- , x ".mathml" "application/mathml+xml"- , x ".mbox" "application/mbox"- , x ".mdoc" "text/troff"- , x ".me" "text/troff"- , x ".mid" "audio/midi"- , x ".midi" "audio/midi"- , x ".mime" "message/rfc822"- , x ".mml" "application/mathml+xml"- , x ".mng" "video/x-mng"- , x ".mov" "video/quicktime"- , x ".mp3" "audio/mpeg"- , x ".mp4" "video/mp4"- , x ".mp4v" "video/mp4"- , x ".mpeg" "video/mpeg"- , x ".mpg" "video/mpeg"- , x ".ms" "text/troff"- , x ".msi" "application/x-msdownload"- , x ".odp" "application/vnd.oasis.opendocument.presentation"- , x ".ods" "application/vnd.oasis.opendocument.spreadsheet"- , x ".odt" "application/vnd.oasis.opendocument.text"- , x ".ogg" "application/ogg"- , x ".p" "text/x-pascal"- , x ".pas" "text/x-pascal"- , x ".pbm" "image/x-portable-bitmap"- , x ".pdf" "application/pdf"- , x ".pem" "application/x-x509-ca-cert"- , x ".pgm" "image/x-portable-graymap"- , x ".pgp" "application/pgp-encrypted"- , x ".pkg" "application/octet-stream"- , x ".pl" "text/x-script.perl"- , x ".pm" "text/x-script.perl-module"- , x ".png" "image/png"- , x ".pnm" "image/x-portable-anymap"- , x ".ppm" "image/x-portable-pixmap"- , x ".pps" "application/vnd.ms-powerpoint"- , x ".ppt" "application/vnd.ms-powerpoint"- , x ".ps" "application/postscript"- , x ".psd" "image/vnd.adobe.photoshop"- , x ".py" "text/x-script.python"- , x ".qt" "video/quicktime"- , x ".ra" "audio/x-pn-realaudio"- , x ".rake" "text/x-script.ruby"- , x ".ram" "audio/x-pn-realaudio"- , x ".rar" "application/x-rar-compressed"- , x ".rb" "text/x-script.ruby"- , x ".rdf" "application/rdf+xml"- , x ".roff" "text/troff"- , x ".rpm" "application/x-redhat-package-manager"- , x ".rss" "application/rss+xml"- , x ".rtf" "application/rtf"- , x ".ru" "text/x-script.ruby"- , x ".s" "text/x-asm"- , x ".sgm" "text/sgml"- , x ".sgml" "text/sgml"- , x ".sh" "application/x-sh"- , x ".sig" "application/pgp-signature"- , x ".snd" "audio/basic"- , x ".so" "application/octet-stream"- , x ".svg" "image/svg+xml"- , x ".svgz" "image/svg+xml"- , x ".swf" "application/x-shockwave-flash"- , x ".t" "text/troff"- , x ".tar" "application/x-tar"- , x ".tbz" "application/x-bzip-compressed-tar"- , x ".tcl" "application/x-tcl"- , x ".tex" "application/x-tex"- , x ".texi" "application/x-texinfo"- , x ".texinfo" "application/x-texinfo"- , x ".text" "text/plain"- , x ".tif" "image/tiff"- , x ".tiff" "image/tiff"- , x ".torrent" "application/x-bittorrent"- , x ".tr" "text/troff"- , x ".txt" "text/plain"- , x ".vcf" "text/x-vcard"- , x ".vcs" "text/x-vcalendar"- , x ".vrml" "model/vrml"- , x ".war" "application/java-archive"- , x ".wav" "audio/x-wav"- , x ".wma" "audio/x-ms-wma"- , x ".wmv" "video/x-ms-wmv"- , x ".wmx" "video/x-ms-wmx"- , x ".wrl" "model/vrml"- , x ".wsdl" "application/wsdl+xml"- , x ".xbm" "image/x-xbitmap"- , x ".xhtml" "application/xhtml+xml"- , x ".xls" "application/vnd.ms-excel"- , x ".xml" "application/xml"- , x ".xpm" "image/x-xpixmap"- , x ".xsl" "application/xml"- , x ".xslt" "application/xslt+xml"- , x ".yaml" "text/yaml"- , x ".yml" "text/yaml"- , x ".zip" "application/zip"- ] .to_h- where x a b = (a, b)--lookup_mime_type :: String -> Maybe String-lookup_mime_type = flip M.lookup mime_types
− src/Hack/Contrib/RawRouter.hs
@@ -1,20 +0,0 @@-module Hack.Contrib.RawRouter (route) where--import Hack-import Hack.Utils-import Hack.Request hiding (path)--import MPSUTF8-import Prelude hiding ((.), (^), (>))-import List (find)-import Data.Maybe--type RoutePath = (String, Application)--route :: [RoutePath] -> MiddleWare-route h app = \env ->- let path = env.fullpath- in- case h.find (fst > flip match path > isJust) of- Nothing -> app env- Just (_, found_app) -> found_app env
− src/Hack/Contrib/ShowExceptions.hs
@@ -1,31 +0,0 @@-module Hack.Contrib.ShowExceptions (show_exceptions) where--import Hack-import Hack.Contrib.Hub--import MPSUTF8-import Prelude hiding ((.), (^), (>), log)--import Data.Maybe-import Data.Default--import System.IO -import System.IO.Error---program :: String-program = "ShowExceptions"--show_exceptions :: Maybe Stream -> MiddleWare-show_exceptions stream app = \env -> do- let my_stream = stream.fromMaybe (env.hack_errors)- let log = simple_logger my_stream program- - app env `catch` (handler log)-- where- handler :: Logger -> IOError -> IO Response- handler log e = do- let message = e.show- Error. log message- return $ def { status = 500, body = message }
− src/Hack/Contrib/ShowStatus.hs
@@ -1,97 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Contrib.ShowStatus (show_status) where--import Hack-import Hack.Utils-import Hack.Constants-import Hack.Request hiding (body)-import Hack.Response--import MPSUTF8-import Prelude hiding ((.), (^), (>), head)--import Data.Maybe--show_status :: MiddleWare-show_status app = \env -> do- response <- app env- - let content_length = response.header _ContentLength .fromMaybe "0"- let content_empty = content_length .read .(<= (0 :: Int))- - if response.status >= 400 && content_empty- then - let - i = response.status- message = i.show_status_code .fromMaybe (i.show)- detail = env.custom_"hack.showstatus.detail" .fromMaybe message- result = template message detail env response- size = result.bytesize- in- return $ - response- .set_body result- .set_content_type _TextHtml- .set_content_length size- - else return response---template :: String -> String -> Env -> Response -> String-template message detail env response = - let h = escape_html in [$here|---<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">-<html lang="en">-<head>- <meta http-equiv="content-type" content="text/html; charset=utf-8" />- <title>#{h message } at #{h (env.path.url2unicode) }</title>- <meta name="robots" content="NONE,NOARCHIVE" />- <style type="text/css">- html * { padding:0; margin:0; }- body * { padding:10px 20px; }- body * * { padding:0; }- body { font:small sans-serif; background:#eee; }- body>div { border-bottom:1px solid #ddd; }- h1 { font-weight:normal; margin-bottom:.4em; }- h1 span { font-size:60%; color:#666; font-weight:normal; }- table { border:none; border-collapse: collapse; width:100%; }- td, th { vertical-align:top; padding:2px 3px; }- th { width:12em; text-align:right; color:#666; padding-right:.5em; }- #info { background:#f6f6f6; }- #info ol { margin: 0.5em 4em; }- #info ol li { font-family: monospace; }- #summary { background: #ffc; }- #explanation { background:#eee; border-bottom: 0px none; }- </style>-</head>-<body>- <div id="summary">- <h1>#{h message } <span>(#{ response.status })</span></h1>- <table class="meta">- <tr>- <th>Request Method:</th>- <td>#{ env.request_method }</td>- </tr>- <tr>- <th>Request URL:</th>- <td>#{h (env.url.url2unicode) }</td>- </tr>- </table>- </div>- <div id="info">- <p>#{h detail }</p>- </div>-- <div id="explanation">- <p>- You're seeing this error because you use <code>Hack.Contrib.ShowStatus</code>.- </p>- </div>-</body>-</html>---|]
− src/Hack/Contrib/SimpleAccessLogger.hs
@@ -1,22 +0,0 @@-module Hack.Contrib.SimpleAccessLogger (simple_access_logger) where--import Hack-import Hack.Utils-import Hack.Request-import Hack.Contrib.Hub--import MPSUTF8-import Prelude hiding ((.), (^), (>), log)-import Data.Maybe--program :: String-program = "SimpleAccessLogger"--simple_access_logger :: Maybe Stream -> MiddleWare-simple_access_logger stream app = \env -> do- let my_stream = stream.fromMaybe (env.hack_errors)- let log = simple_logger my_stream program- - Info .log (env.url.url2unicode)- - app env
− src/Hack/Contrib/SimpleRouter.hs
@@ -1,25 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Contrib.SimpleRouter (route) where--import Hack-import Hack.Utils--import MPSUTF8-import Prelude hiding ((.), (^), (>))-import List (find, isPrefixOf)--type RoutePath = (String, Application)--route :: [RoutePath] -> MiddleWare-route h app = \env ->- let path = env.path_info- script = env.script_name- mod_env location = env - { script_name = script ++ location- , path_info = path.drop (location.length)- }- in- case h.find (fst > (`isPrefixOf` path) ) of- Nothing -> app env- Just (location, app') -> app' (mod_env location)
− src/Hack/Contrib/Static.hs
@@ -1,22 +0,0 @@-module Hack.Contrib.Static (static) where--import Hack-import Hack.Utils-import Hack.Contrib.File (file)--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+))-import Data.Maybe-import List (find, isPrefixOf)--static :: Maybe String -> [String] -> MiddleWare-static root urls app = \env -> do- let my_urls = if urls.null then ["/favicon.ico"] else urls-- let path = env.path_info .url2unicode-- let can_serve = my_urls.find ( `isPrefixOf` path ) .isJust- - if can_serve- then file root app env- else app env
− src/Hack/Handler/Hyena.hs
@@ -1,82 +0,0 @@-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE ImpredicativeTypes #-}--module Hack.Handler.Hyena (run) where--import Hack as Hack-import Hack.Utils--import Hyena.Server-import Network.Wai as Wai--import Data.Default-import Prelude hiding ((.), (^))-import MPSUTF8 hiding (to_s)-import System.IO-import qualified Data.ByteString.Char8 as C-import qualified Data.ByteString as S--import Control.Monad-import Data.Maybe--to_s :: S.ByteString -> String-to_s = C.unpack--to_b :: String -> S.ByteString-to_b = C.pack--both_to_s :: (S.ByteString, S.ByteString) -> (String, String)-both_to_s (a,b) = (a.to_s, b.to_s)--both_to_b :: (String, String) -> (S.ByteString, S.ByteString)-both_to_b (a,b) = (a.to_b, b.to_b)--hyena_env_to_hack_env :: Environment -> IO Hack.Env-hyena_env_to_hack_env e = return $- def- { - request_method = e.requestMethod.show.upper.read- , script_name = e.scriptName.to_s- , path_info = e.pathInfo.to_s- , query_string = e.queryString .fromMaybe (to_b "") .to_s- , http = e.Wai.headers .map both_to_s- , hack_errors = e.errors- }---- hack_response_to_hyena_response :: Hack.Response -> (Int, S.ByteString, Headers, Enumerator)--enum_string :: String -> IO Enumerator-enum_string msg = do- let s = msg.to_b- let yieldBlock f z = do- z' <- f z s- case z' of- Left z'' -> return z''- Right z'' -> return z''-- return yieldBlock--type WaiResponse = (Int, S.ByteString, Wai.Headers, Enumerator)--hack_response_to_hyena_response :: Enumerator -> Hack.Response -> WaiResponse-hack_response_to_hyena_response e r =- ( r.status- , r.status.show_status_code.fromMaybe "OK" .to_b- , r.Hack.headers.map both_to_b- , e- )---hack_to_wai :: Hack.Application -> Wai.Application-hack_to_wai app env = do- hack_env <- env.hyena_env_to_hack_env- - r <- app hack_env- - enum <- r.body.enum_string- let hyena_response = r.hack_response_to_hyena_response enum- - return hyena_response--run :: Hack.Application -> IO ()-run app = app.hack_to_wai.serve
− src/Hack/Handler/Kibro.hs
@@ -1,47 +0,0 @@-module Hack.Handler.Kibro (run) where--import Hack-import Kibro-import Network.CGI hiding (Html)-import Network.URI-import Data.Default-import Prelude hiding ((.), (^))-import MPSUTF8-import System.IO--run :: Application -> IO ()-run app' = startKibro [("", handle app')]- where- - get_env = do- uri <- requestURI- request_method' <- requestMethod- let script_name' = ""- let path_info' = uri.uriPath- let query_string' = uri.uriQuery- server_name' <- serverName- server_port' <- serverPort- hack_input' <- getBody-- def - { request_method = request_method'.read- , script_name = script_name'- , path_info = path_info'- , query_string = query_string'.remove_question_mark- , server_name = server_name'- , server_port = server_port'- , hack_input = hack_input'- , hack_errors = \x -> hPutStr stderr (x.u2b)- }- .return- where - remove_question_mark = dropWhile (is '?')-- handle app = do- env <- get_env- response <- app env .liftIO-- -- set response- response.headers.mapM_ (splash setHeader)- response.status.show.setHeader "Status"- response.body.output
− src/Hack/Request.hs
@@ -1,53 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Request where--import Hack-import Prelude hiding ((.), (^), (>), lookup, (+))-import MPSUTF8-import Hack.Utils-import List (lookup)-import Data.Maybe--body :: Env -> String-body = hack_input--scheme :: Env -> String-scheme = hack_url_scheme > show > lower--port :: Env -> Int-port = server_port--path :: Env -> String-path env = env.script_name ++ env.path_info--fullpath :: Env -> String-fullpath env = - if env.query_string.empty - then env.path - else env.path ++ "?" ++ env.query_string--http_ :: String -> Env -> Maybe String-http_ s env = env.http.reverse.lookup ("HTTP_" ++s)--custom_ :: String -> Env -> Maybe String-custom_ s env = env.custom.reverse.lookup s--host :: Env -> String-host env = env.http_"HOST" .fromMaybe (env.server_name) .gsub ":\\d+\\z" ""--url :: Env -> String-url env =- [ env.scheme- , "://"- , env.host- , port_string- , env.fullpath- ]- .join'- where- port_string = - if (env.scheme.is "https" && env.port.is_not 443 || - env.scheme.is "http" && env.port.is_not 80 )- then ":" ++ env.server_port.show- else ""
− src/Hack/Response.hs
@@ -1,38 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}--module Hack.Response where--import Hack-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>), (+))--import Data.Map (toList)-import Data.Maybe---header :: String -> Response -> Maybe String-header s r = r.headers.reverse.lookup s--has_header :: String -> Response -> Bool-has_header s r = r.header s .isJust--set_header :: String -> String -> Response -> Response-set_header k v r = r - { headers = (r.headers ++ [(k,v)] ) .to_h .toList }--set_content_type :: String -> Response -> Response-set_content_type s r = r.set_header _ContentType s--set_content_length :: Int -> Response -> Response-set_content_length i r = r.set_header _ContentLength (i.show)--set_body :: String -> Response -> Response-set_body s r = r { body = s }--set_status :: Int -> Response -> Response-set_status i r = r { status = i }--set_last_modified :: String -> Response -> Response-set_last_modified s r = r.set_header _LastModified s
− src/Hack/Utils.hs
@@ -1,122 +0,0 @@-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE NoMonomorphismRestriction #-}--module Hack.Utils where--import Hack-import Hack.Constants--import MPSUTF8-import Prelude hiding ((.), (^), (>), lookup, (+), (/))--import Network.URI hiding (path)-import Data.Default--import Control.Arrow ((>>>), (<<<))-import Data.Map (lookup, Map)-import Data.Time-import Text.Template-import qualified Data.ByteString.Lazy.Char8 as B-import Control.Monad (mplus, MonadPlus)-import Data.Maybe-import System.IO-import System.Posix.Files-import System.Locale-import System.Directory-import Data.Time.Clock.POSIX-import System.FilePath ((</>))-import Data.Char (ord)-import Control.Category (Category)--import qualified Data.ByteString.Lazy.Char8 as B-import qualified Codec.Compression.GZip as GZip-import Codec.Binary.Base64.String as C---- import Date.Time--(>) :: (Control.Category.Category cat) => cat a b -> cat b c -> cat a c-(>) = (>>>)-infixl 8 >--(+) :: (MonadPlus m) => m a -> m a -> m a-(+) = mplus-infixl 8 +--(/) :: FilePath -> FilePath -> FilePath-(/) = (</>)-infixl 5 /--empty_app :: Application-empty_app = return def---- usage: app.use [content_type, cache]-use :: [MiddleWare] -> MiddleWare-use = reduce (<<<)--bytesize :: String -> Int-bytesize = B.pack > B.length > from_i--dummy_middleware :: MiddleWare-dummy_middleware = id--dummy_app :: Application-dummy_app _ = return $ def { status = 500 }--escape_html :: String -> String-escape_html = concatMap fixChar- where- fixChar '<' = "<"- fixChar '>' = ">"- fixChar '&' = "&"- fixChar '"' = "\""- fixChar c | ord c < 0x80 = [c]- fixChar c = "&#" ++ show (ord c) ++ ";"----show_status_code :: Int -> Maybe String-show_status_code x = status_code.lookup x---- MPS candidate--now :: IO UTCTime-now = getCurrentTime--format_time :: String -> UTCTime -> String-format_time = formatTime defaultTimeLocale--interpolate :: String -> [(String, String)] -> String-interpolate s params = B.unpack $ substitute (B.pack s) (context params)- where - context = map packPair > to_h- packPair (x, y) = (B.pack x, B.pack y)--just_lookup :: (Ord k) => k -> Data.Map.Map k a -> a-just_lookup s xs = xs.lookup s .fromJust--httpdate :: UTCTime -> String-httpdate x = x.format_time rfc822DateFormat where--file_size :: String -> IO Integer-file_size path = withFile (path.u2b) ReadMode hFileSize--file_mtime :: String -> IO UTCTime-file_mtime path = getFileStatus (path.u2b) - ^ modificationTime ^ realToFrac ^ posixSecondsToUTCTime--read_binary_file :: String -> IO String-read_binary_file path = path.u2b.B.readFile ^ B.unpack--get_permissions :: String -> IO Permissions-get_permissions path = getPermissions (path.u2b) --url2unicode :: String -> String-url2unicode s = s.unEscapeString.b2u--get_current_directory :: IO String-get_current_directory = getCurrentDirectory ^ b2u--zip64, unzip64 :: String -> String-zip64 = B.pack > GZip.compress > B.unpack > C.encode-unzip64 = C.decode > B.pack > GZip.decompress > B.unpack-