packages feed

libstackexchange-0.3.1: examples/server-side-authentication.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UnicodeSyntax #-}
-- | Simple StackExchange server-side authentication example
-- It consists of two steps.
--
-- * Firstly, after you ran the application, you go to http://appaddress:8000/authenticate-me-please
--   It will redirect you to StackExchange website, asking for confirmation. When you confirm
--   apps access, you will be redirected to @rURI@, it should be http://appaddress:8000/save-token
-- * Secondly, you can check what access token did you receive by asking http://appaddress:8000/show-tokens
--
-- That's it.
module Main where

import Control.Monad
import Data.IORef

import Control.Monad.Trans (liftIO)
import Happstack.Server hiding (host, path)

import Network.StackExchange


main ∷ IO ()
main = do
  tokens ← newIORef []
  simpleHTTP nullConf $ msum
    [ dir "authenticate-me-please" $ seeOther (render $ explicitUserPermission cID rURI) ""
    , dir "save-token" $ do
        c ← lookText "code"
        liftIO $ askSE (explicitAccessToken cID cSecret c rURI) >>= modifyIORef' tokens . (:)
        ok "Saved."
    , dir "show-tokens" $ liftIO (readIORef tokens) >>= ok . show
    ]
 where
  rURI = undefined

  cID = undefined

  cSecret = undefined