diff options
Diffstat (limited to 'front-end/src/store/socialMfaPlugin.ts')
-rw-r--r-- | front-end/src/store/socialMfaPlugin.ts | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/front-end/src/store/socialMfaPlugin.ts b/front-end/src/store/socialMfaPlugin.ts index b9bce27..3968cf1 100644 --- a/front-end/src/store/socialMfaPlugin.ts +++ b/front-end/src/store/socialMfaPlugin.ts @@ -1,3 +1,4 @@ + import 'pinia' import { MaybeRef } from 'vue'; import { useSocialOauthLogin, useUser, SocialOAuthPortal, fromPortals, useAxios } from '@vnuge/vnlib.browser' @@ -34,30 +35,42 @@ export const socialMfaPlugin = (portalEndpoint?: MaybeRef<string>): PiniaPlugin } } - const _loadPromise = new Promise<SocialMfaPlugin>((resolve, reject) => { + const _loadPromise = new Promise<SocialMfaPlugin>((resolve, _) => { - if(get(portalEndpoint) == null) { + if (get(portalEndpoint) == null) { const socialOauth = useSocialOauthLogin([]) setLogoutMethod(socialOauth) return resolve(socialOauth) } + /* + Try to load social methods from server, if it fails, then we will + fall back to default + */ + defer(async () => { + + let portals: SocialOAuthPortal[] = [] + try { //Get axios instance const axios = useAxios(null) //Get all enabled portals - const { data } = await axios.get<SocialOAuthPortal[]>(get(portalEndpoint)); - //Setup social providers from server portals - const socialOauth = useSocialOauthLogin(fromPortals(data)); - setLogoutMethod(socialOauth); - - resolve(socialOauth) + const { data, headers } = await axios.get<SocialOAuthPortal[]>(get(portalEndpoint)!); + + if(headers['content-type'] === 'application/json') { + portals = data + } } catch (error) { - reject(error) + //Let failure fall back to default } + + //Create social login from available portals + const socialOauth = useSocialOauthLogin(fromPortals(portals)); + setLogoutMethod(socialOauth); + resolve(socialOauth) }) }) |