breve 0.4.1.0 → 0.4.2.0
raw patch · 4 files changed
+30/−17 lines, 4 filesdep +tls
Dependencies added: tls
Files
- README.md +6/−2
- breve.cabal +2/−2
- src/Breve/Settings.hs +19/−10
- src/Main.hs +3/−3
README.md view
@@ -33,11 +33,15 @@ hostname = "localhost" port = 3000 urltable = "$XDG_CONFIG_HOME/breve"-cert = "/usr/share/tls/breve.crt"-key = "/usr/share/tls/breve.key"+tls {+ cert = "/usr/share/tls/breve.crt"+ key = "/usr/share/tls/breve.key"+ chain = []+} ``` `urltable` is the location of breve url hashtable+`chain` is a list of chain certificate files ## License
breve.cabal view
@@ -1,5 +1,5 @@ name: breve-version: 0.4.1.0+version: 0.4.2.0 synopsis: a url shortener description: @@ -29,7 +29,7 @@ other-modules: Application, Views, Breve.Settings, Breve.Generator, Breve.UrlTable other-extensions: OverloadedStrings- build-depends: base >=4.8 && <5.0, warp, warp-tls,+ build-depends: base >=4.8 && <5.0, warp, warp-tls, tls, Spock, blaze-html, http-types, wai, wai-middleware-static, wai-extra, transformers, mtl,
src/Breve/Settings.hs view
@@ -1,21 +1,25 @@ {-# LANGUAGE OverloadedStrings #-}+ module Breve.Settings where import Control.Monad (when) import System.Environment (lookupEnv) import System.Environment.XDG.BaseDir import System.Directory (doesFileExist)+import Data.Text (Text, pack) import Data.Configurator import Data.Monoid-import Data.Text (Text, pack)-import Network.Wai.Handler.WarpTLS (tlsSettings, TLSSettings) +import Network.Wai.Handler.WarpTLS (TLSSettings (..), tlsSettingsChain)+import Network.TLS (Version (..))+import Network.TLS.Extra (ciphersuite_strong)+ data AppSettings = AppSettings- { bindHost :: Text- , bindPort :: Int- , bindUrl :: Text- , urlTable :: FilePath- , tlsSetts :: TLSSettings+ { bindHost :: Text+ , bindPort :: Int+ , bindUrl :: Text+ , urlTable :: FilePath+ , tlsSettings :: TLSSettings } @@ -33,9 +37,10 @@ config <- load [Required configPath] host <- lookupDefault "localhost" config "hostname" port <- lookupDefault 3000 config "port" - cert <- lookupDefault "/usr/share/tls/breve.crt" config "cert"- key <- lookupDefault "/usr/share/tls/breve.key" config "key" urls <- lookupDefault urlsPath config "urltable"+ cert <- lookupDefault "/usr/share/tls/breve.crt" config "tls.cert"+ key <- lookupDefault "/usr/share/tls/breve.key" config "tls.key"+ chain <- lookupDefault [] config "tls.chain" createEmptyIfMissing urls @@ -43,11 +48,15 @@ url = if port == 443 then base else base <> ":" <> pack (show port)+ tls = (tlsSettingsChain cert chain key)+ { tlsAllowedVersions = [TLS12, TLS11]+ , tlsCiphers = ciphersuite_strong+ } return AppSettings { bindHost = host , bindPort = port , bindUrl = url <> "/" , urlTable = urls- , tlsSetts = tlsSettings cert key+ , tlsSettings = tls }
src/Main.hs view
@@ -13,8 +13,8 @@ import Network.Wai.Handler.Warp (run, defaultSettings, setPort) runBreve :: TLSSettings -> Int -> SpockT IO () -> IO ()-runBreve tls port spock =- spockAsApp (spockT id spock) >>= runTLS tls settings+runBreve tlsSettings port spock =+ spockAsApp (spockT id spock) >>= runTLS tlsSettings settings where settings = setPort port defaultSettings @@ -34,4 +34,4 @@ when (bindPort == 443) (forkIO' $ runTLSRedirect bindHost) putStrLn ("Serving on " ++ unpack bindUrl)- runBreve tlsSetts bindPort (app bindUrl table)+ runBreve tlsSettings bindPort (app bindUrl table)