packages feed

hpaste-1.2.0: src/Hpaste/Controller/Raw.hs

{-# OPTIONS -Wall -fno-warn-name-shadowing #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}

-- | Raw controller.

module Hpaste.Controller.Raw
  (handle)
  where

import Hpaste.Model.Paste   (getPasteById)
import Hpaste.Types

import Control.Applicative
import Data.ByteString.UTF8 (toString)
import Data.Maybe
import Data.Text.Lazy       (fromStrict)
import Prelude              hiding ((++))
import Safe
import Snap.App

-- | Handle the paste page.
handle :: HPCtrl ()
handle = do
  pid <- (>>= readMay) . fmap (toString) <$> getParam "id"
  case pid of
    Nothing -> goHome
    Just (pid :: Integer) -> do
      modifyResponse $ setContentType "text/plain; charset=UTF-8"
      paste <- model $ getPasteById (PasteId pid)
      maybe goHome (outputText . fromStrict . pastePaste) paste