module Yesod.Comments.Utils
( commentUserDetails
, currentUserDetails
, requireUserDetails
, defaultUserDetails
, isCommentingUser
, gravatar
) where
import Yesod
import Yesod.Auth
import Yesod.Comments.Core
import Data.Text (Text)
import Data.Maybe (fromMaybe)
import Network.Gravatar hiding (gravatar)
import qualified Network.Gravatar as G
commentUserDetails :: YesodComments m => Comment -> GHandler s m UserDetails
commentUserDetails c =
return . fromMaybe (defaultUserDetails c) =<<
case (cIsAuth c, fromPathPiece (cUserName c)) of
(True, Just uid) -> userDetails uid
_ -> return Nothing
currentUserDetails :: YesodComments m => GHandler s m (Maybe UserDetails)
currentUserDetails = do
muid <- maybeAuthId
case muid of
Just uid -> userDetails uid
_ -> return Nothing
requireUserDetails :: YesodComments m => GHandler s m (UserDetails)
requireUserDetails = do
mudetails <- currentUserDetails
case mudetails of
Just udetails -> return udetails
_ -> permissionDenied "you must be logged in"
defaultUserDetails :: Comment -> UserDetails
defaultUserDetails c = UserDetails (cUserName c) (cUserName c) (cUserEmail c)
gravatar :: Int -> Text -> String
gravatar s = G.gravatar defaultConfig { gDefault = Just MM, gSize = Just $ Size s }
isCommentingUser :: YesodComments m => Comment -> GHandler s m Bool
isCommentingUser comment = do
mudetails <- currentUserDetails
cudetails <- commentUserDetails comment
return $ maybe False (== cudetails) mudetails