parent
3152372c39
commit
ccb265cb2e
@ -1,46 +1,15 @@ |
|||||||
<!DOCTYPE html> |
<!DOCTYPE html> |
||||||
<html lang="en"> |
<html lang="en"> |
||||||
|
|
||||||
<head> |
<head> |
||||||
<title></title> |
<title></title> |
||||||
</head> |
</head> |
||||||
|
|
||||||
<body> |
<body> |
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.11.5/oidc-client.min.js" |
<script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.11.5/oidc-client.min.js" integrity="sha512-pGtU1n/6GJ8fu6bjYVGIOT9Dphaw5IWPwVlqkpvVgqBxFkvdNbytUh0H8AP15NYF777P4D3XEeA/uDWFCpSQ1g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> |
||||||
integrity="sha512-pGtU1n/6GJ8fu6bjYVGIOT9Dphaw5IWPwVlqkpvVgqBxFkvdNbytUh0H8AP15NYF777P4D3XEeA/uDWFCpSQ1g==" |
|
||||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script> |
|
||||||
<script> |
<script> |
||||||
new Oidc.UserManager().signinSilentCallback() |
new Oidc.UserManager().signinSilentCallback() |
||||||
.then(() => { |
.catch((err) => { |
||||||
const refreshToken = new URLSearchParams(document.location.search).get('refresh_token'); |
console.error('OIDC: silent refresh callback error', err); |
||||||
|
}); |
||||||
if (refreshToken && /iPad|iPhone|iPod/.test(navigator.userAgent)) { |
|
||||||
const getDomain = () => { |
|
||||||
if (! '%NODE_ENV%' || '%NODE_ENV%' === 'development') { |
|
||||||
return 'localhost'; |
|
||||||
} else { |
|
||||||
return '.insports.tv'; |
|
||||||
} |
|
||||||
}; |
|
||||||
const parseJwt = (value) => { |
|
||||||
const base64Url = value.split('.')[1]; |
|
||||||
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); |
|
||||||
const jsonPayload = decodeURIComponent(window.atob(base64).split('').map((c) => `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`).join('')); |
|
||||||
|
|
||||||
return JSON.parse(jsonPayload); |
|
||||||
}; |
|
||||||
const saveRefreshToken = (value) => { |
|
||||||
const ref = parseJwt(value); |
|
||||||
const expires = `expires=${new Date((ref.exp * 1000)).toUTCString()}`; |
|
||||||
document.cookie = `refresh_token=${value};${expires};path=/;domain=${getDomain()};secure;SameSite=None`; |
|
||||||
}; |
|
||||||
saveRefreshToken(refreshToken); |
|
||||||
} |
|
||||||
}) |
|
||||||
.catch((err) => { |
|
||||||
console.error('OIDC: silent refresh callback error', err); |
|
||||||
}); |
|
||||||
</script> |
</script> |
||||||
</body> |
</body> |
||||||
|
</html> |
||||||
</html> |
|
||||||
|
|||||||
@ -1,51 +0,0 @@ |
|||||||
import { AUTH_SERVICE } from 'config' |
|
||||||
import { ClientIds } from 'config/clients/types' |
|
||||||
|
|
||||||
export type TokenFailedResponse = { |
|
||||||
error?: { |
|
||||||
code: number, |
|
||||||
message: string, |
|
||||||
}, |
|
||||||
ok: false, |
|
||||||
} |
|
||||||
|
|
||||||
type TokenResponse = { |
|
||||||
access_token: string, |
|
||||||
id_token: string, |
|
||||||
refresh_token: string, |
|
||||||
} |
|
||||||
|
|
||||||
type TokenProps = { |
|
||||||
client_id: ClientIds, |
|
||||||
email?: 'string', |
|
||||||
grant_type?: 'password' | 'refresh_token', |
|
||||||
id_token?: 'string', |
|
||||||
password?: 'string', |
|
||||||
refresh_token: string, |
|
||||||
} |
|
||||||
|
|
||||||
export const getCredentials = async ({ |
|
||||||
client_id, |
|
||||||
grant_type = 'refresh_token', |
|
||||||
refresh_token, |
|
||||||
}: TokenProps): Promise<TokenResponse> => { |
|
||||||
const url = new URL(`${AUTH_SERVICE}/token`) |
|
||||||
|
|
||||||
const credetials = await fetch(url, { |
|
||||||
body: JSON.stringify({ |
|
||||||
client_id, |
|
||||||
grant_type, |
|
||||||
refresh_token, |
|
||||||
}), |
|
||||||
headers: { |
|
||||||
'Content-Type': 'application/json', |
|
||||||
}, |
|
||||||
method: 'POST', |
|
||||||
}) |
|
||||||
|
|
||||||
const body: TokenResponse | TokenFailedResponse = await credetials.json() |
|
||||||
|
|
||||||
if ('ok' in body) return Promise.reject(body.error) |
|
||||||
|
|
||||||
return Promise.resolve(body) |
|
||||||
} |
|
||||||
Loading…
Reference in new issue