hoauth2-1.7.0: example/IDP.hs
module IDP where
import Data.Text.Lazy (Text)
import qualified Data.HashMap.Strict as Map
import qualified IDP.Douban as IDouban
import qualified IDP.Dropbox as IDropbox
import qualified IDP.Facebook as IFacebook
import qualified IDP.Fitbit as IFitbit
import qualified IDP.Github as IGithub
import qualified IDP.Google as IGoogle
import qualified IDP.Okta as IOkta
import qualified IDP.StackExchange as IStackExchange
import qualified IDP.Weibo as IWeibo
import Session
import Types
-- TODO: make this generic to discover any IDPs from idp directory.
--
idps :: [IDPApp]
idps = [ IDPApp IDouban.Douban
, IDPApp IDropbox.Dropbox
, IDPApp IFacebook.Facebook
, IDPApp IFitbit.Fitbit
, IDPApp IGithub.Github
, IDPApp IGoogle.Google
, IDPApp IOkta.Okta
, IDPApp IStackExchange.StackExchange
, IDPApp IWeibo.Weibo
]
initIdps :: CacheStore -> IO ()
initIdps c = mapM_ (insertIDPData c) (fmap mkIDPData idps)
idpsMap :: Map.HashMap Text IDPApp
idpsMap = Map.fromList $ fmap (\x@(IDPApp idp) -> (idpLabel idp, x)) idps
parseIDP :: Text -> Either Text IDPApp
parseIDP s = maybe (Left s) Right (Map.lookup s idpsMap)
mkIDPData :: IDPApp -> IDPData
mkIDPData (IDPApp idp) = IDPData (authUri idp) Nothing (idpLabel idp)