File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11Name : memoise
2- Version : 0.9
2+ Version : 0.10
33License : BSD3
44Author : Ryan Trinkle
55Maintainer : ryan.trinkle@gmail.com
@@ -21,6 +21,7 @@ Executable memoise
2121 , heist >= 0.12 && < 0.13
2222 , lens >= 3.9 && < 3.10
2323 , text >= 0.11 && < 0.12
24+ , network >= 2.4 && < 2.5
2425 , snaplet-postgresql-simple >= 0.4 && < 0.5
2526 GHC-options : -threaded -O2
2627 Extensions : OverloadedStrings
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import Data.Text.Encoding
1010import Data.Monoid
1111import Heist
1212import Heist.Interpreted
13+ import Network.URI hiding (query )
1314
1415data Memoise
1516 = Memoise { _heist :: Snaplet (Heist Memoise )
@@ -24,8 +25,17 @@ instance HasHeist Memoise where
2425instance HasPostgres (Handler Memoise Memoise ) where
2526 getPostgresState = with db get
2627
27- getUrlId :: Text -> Handler Memoise Memoise Integer
28- getUrlId url = do
28+ canonicalizeUrl :: Text -> Maybe URI
29+ canonicalizeUrl rawUrl =
30+ let url = unpack rawUrl
31+ url' = if isAbsoluteURI url
32+ then url
33+ else " http://" <> url
34+ in parseURI $ normalizeCase $ normalizePathSegments $ normalizeEscape url'
35+
36+ getUrlId :: URI -> Handler Memoise Memoise Integer
37+ getUrlId uri = do
38+ let url = showT uri
2939 existingResults <- query " SELECT id FROM urls WHERE url = ?" (Only url)
3040 case existingResults of
3141 (Only urlId) : _ -> return urlId
@@ -38,8 +48,11 @@ indexHandler = do
3848 mUrl <- getParam " url"
3949 case mUrl of
4050 Just url -> do
41- urlId <- getUrlId $ decodeUtf8 url
42- mainTextboxContents .= Just (" http://memoi.se/" <> showT urlId)
51+ case canonicalizeUrl (decodeUtf8 url) of
52+ Just uri -> do
53+ urlId <- getUrlId uri
54+ mainTextboxContents .= Just (" http://memoi.se/" <> showT urlId)
55+ Nothing -> mainTextboxContents .= Just " Invalid URL"
4356 render " index"
4457 Nothing -> render " index"
4558
You can’t perform that action at this time.
0 commit comments