| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { useEffect, useMemo, useState } from "preact/hooks";
- const parseJwt = token => {
- var base64Url = token.split('.')[1];
- var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
- var jsonPayload = decodeURIComponent(window.atob(base64).split('').map(
- c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
- ).join(''));
- return JSON.parse(jsonPayload);
- };
-
- // const idcsStripe = "https://idcs-25070016ce0c4eb8b6eea18f07fe170d.identity.oraclecloud.com";
- const idcsStripe = "https://idcs-login-stage.identity.oraclecloud.com";
- // const clientId = "4e728d65cf5b482ea81e56bf23a9ad8a";
- const clientId = "754db2d1964d4f12ab312a2ab6f025ed";
-
- const login = () => {
- const state = crypto.randomUUID();
- const nonce = crypto.randomUUID();
- sessionStorage.setItem("oauth", JSON.stringify({ state, nonce }));
- window.location.href = `${idcsStripe}/oauth2/v1/authorize` +
- `?client_id=${clientId}` +
- "&response_type=code" +
- `&redirect_uri=${encodeURIComponent(window.location.href)}` +
- "&scope=openid" +
- `&nonce=${nonce}` +
- `&state=${state}`;
- };
-
- const logout = (token: string) => () => {
- // fetch(
- // `https://idcs-25070016ce0c4eb8b6eea18f07fe170d.identity.oraclecloud.com/oauth2/v1/userlogout?post_logout_redirect_uri=${encodeURIComponent(window.location.origin)}&id_token_hint=${token}`,
- // // `https://idcs-25070016ce0c4eb8b6eea18f07fe170d.identity.oraclecloud.com/sso/v1/user/logout?post_logout_redirect_uri=${encodeURIComponent(window.location.origin)}&id_token_hint=${token}`,
- // // `https://idcs-25070016ce0c4eb8b6eea18f07fe170d.identity.oraclecloud.com/oauth2/v1/userlogout?id_token_hint=${token}`,
- // // `${idcsStripe}/oauth2/v1/userlogout`,
- // {
- // headers: {
- // "Content-Type": "application/scim+json",
- // // Authorization: `Bearer ${accessToken}`
- // // Authorization: "Basic NGU3MjhkNjVjZjViNDgyZWE4MWU1NmJmMjNhOWFkOGE6ZGM1NDdkYmUtOGQ0Yi00MTU1LWEzNzgtZjNhMDNkNTZhNjU0"
- // }
- // }
- // );
- window.location.href = `${idcsStripe}/sso/v1/user/logout`;
- }
- export const useLogin = () => {
- const [userLogin, setUserLogin] = useState("");
- const [accessToken, setAccessToken] = useState("");
- const [idToken, setIdToken] = useState("");
- useEffect(() => {
- const searchParams = new URLSearchParams(window.location.search);
- if (searchParams.has("code") && searchParams.has("state")) {
- const { state, nonce } = JSON.parse(sessionStorage.getItem("oauth"));
- const receivedState = searchParams.get("state");
- if (receivedState !== state) {
- return;
- }
- // Get the tokens using the received authorization code
- const code = searchParams.get("code");
- console.log("code", code);
- fetch("https://localhost/occ/api/auth/login", {
- method: "POST",
- headers: new Headers({
- "Content-Type": "application/json"
- }),
- body: JSON.stringify({ code, nonce })
- })
- .then(response => response.json())
- .then(body => {
- const idToken = parseJwt(body.idToken);
- setUserLogin(idToken.user_displayname);
- setIdToken(body.idToken);
- setAccessToken(body.accessToken);
- console.log("Tokens:", { idToken, accessToken: parseJwt(body.accessToken) })
- })
- .finally(() => sessionStorage.removeItem("oauth"));
- // Clear the search parameter from the url
- window.history.pushState({}, document.title, window.location.pathname);
- } else {
- sessionStorage.removeItem("oauth");
- }
- }, []);
- return {
- userLogin,
- idToken,
- accessToken,
- login,
- logout: logout(idToken)
- };
- };
|