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)