1 {-# LANGUAGE OverloadedStrings #-}
    2 module Controller.Citation
    3   ( getCitationHandler
    4   ) where
    5 
    6 import Network.URI (URI)
    7 
    8 import Has (focusIO)
    9 import qualified JSON
   10 import HTTP.Form.Deform
   11 import Action
   12 import Controller.Form
   13 import Model.Citation.CrossRef
   14 
   15 data GetCitationRequest = GetCitationRequest URI
   16 
   17 getCitationHandler :: Action -- TODO: GET only
   18 getCitationHandler = withoutAuth $ do
   19   GetCitationRequest url <- runForm Nothing (GetCitationRequest <$> ("url" .:> deform))
   20   cite <- maybeAction =<< focusIO (lookupCitation url)
   21   return $ okResponse [] $ JSON.toEncoding cite