|
|
- // installable packages
- const base64url = require("base64url");
- const { v4: uuidv4 } = require("uuid");
- const fetch = require("node-fetch").default;
-
- // native packages
- const crypto = require("crypto");
- const { URL, URLSearchParams } = require("url");
-
- // config
- const BASE_URL = "http://localhost:8080";
- const REALM = "demorealm";
- const REDIRECT_URI = "com.juice.booster3://auth";
- const CLIENT_ID = "native-webview";
-
- const sha256encrypt = (code) => {
- const base64Digest = crypto
- .createHash("sha256")
- .update(code)
- .digest("base64");
-
- return base64url.fromBase64(base64Digest);
- };
-
- const nonceFactory = () => {
- const timestamp = Date.now();
- return sha256encrypt(timestamp.toString());
- };
-
- function generateAuthUrl() {
- const nonce = uuidv4();
- const state = uuidv4();
-
- const url = new URL(
- `${BASE_URL}/auth/realms/${REALM}/protocol/openid-connect/auth`,
- );
- url.searchParams.append("client_id", CLIENT_ID);
- url.searchParams.append("redirect_uri", REDIRECT_URI);
- url.searchParams.append("state", state);
- url.searchParams.append("response_mode", "fragment");
- url.searchParams.append("response_type", "code");
- url.searchParams.append("scope", "openid");
- url.searchParams.append("nonce", nonce);
-
- console.log(url.href);
- }
-
- async function getTokenByUrl(urlString) {
- let url = new URL(urlString);
-
- let code = new URLSearchParams(url.hash).get("code");
- console.log(`Auth with code is: ${code}`);
-
- url = new URL(
- `${BASE_URL}/auth/realms/${REALM}/protocol/openid-connect/token`,
- );
- const payload = {
- client_id: CLIENT_ID,
- code,
- grant_type: "authorization_code",
- redirect_uri: REDIRECT_URI,
- };
-
- let response = await fetch(url, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- Accept: "*/*",
- },
- redirect: "manual",
- body: new URLSearchParams(payload).toString(),
- });
-
- const token = await response.json();
- console.log(token);
- }
-
- async function refresh(refresh_token) {
- const url = new URL(
- `${BASE_URL}/auth/realms/${REALM}/protocol/openid-connect/token`,
- );
- const payload = {
- client_id: CLIENT_ID,
- refresh_token,
- grant_type: "refresh_token",
- redirect_uri: REDIRECT_URI,
- };
-
- let response = await fetch(url, {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- Accept: "*/*",
- },
- redirect: "manual",
- body: new URLSearchParams(payload).toString(),
- });
-
- const token = await response.json();
- console.log(token);
- }
-
- if (require.main === module) {
- const redirectUri = process.argv[2];
- if (redirectUri == null) {
- generateAuthUrl();
- } else {
- getTokenByUrl(redirectUri);
- }
- }
|