From 5491e8b98c217c215754649c9e15588fcb65a18b Mon Sep 17 00:00:00 2001 From: Alex <apuret@e-biz.fr> Date: Mon, 27 Jul 2020 11:29:17 +0200 Subject: [PATCH] feat: add keycloak --- .gitignore | 2 +- plugins/deadlock-extension/package-lock.json | 19 +++++++ plugins/deadlock-extension/package.json | 1 + plugins/deadlock-extension/src/config.ts | 5 ++ plugins/deadlock-extension/src/extension.ts | 13 ++++- .../deadlock-extension/src/keycloakManager.js | 52 +++++++++++++++++++ 6 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 plugins/deadlock-extension/src/config.ts create mode 100644 plugins/deadlock-extension/src/keycloakManager.js diff --git a/.gitignore b/.gitignore index d37af391..ab6bef8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ out/ - +.idea/ # Created by https://www.toptal.com/developers/gitignore/api/node,java # Edit at https://www.toptal.com/developers/gitignore?templates=node,java diff --git a/plugins/deadlock-extension/package-lock.json b/plugins/deadlock-extension/package-lock.json index 3c1a051e..512652dc 100644 --- a/plugins/deadlock-extension/package-lock.json +++ b/plugins/deadlock-extension/package-lock.json @@ -228,6 +228,11 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -787,6 +792,11 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -815,6 +825,15 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "keycloak-js": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-11.0.0.tgz", + "integrity": "sha512-hjpIrO+ujaRsSJC76xEpVlZVAPpXm3OZYruxGa/cZ/PF7lwp9kRmIinqCxdg0jttr4dogCbOZ2YrFpqPx4a8mw==", + "requires": { + "base64-js": "1.3.1", + "js-sha256": "0.9.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", diff --git a/plugins/deadlock-extension/package.json b/plugins/deadlock-extension/package.json index e9d216ca..9d9d2e1f 100644 --- a/plugins/deadlock-extension/package.json +++ b/plugins/deadlock-extension/package.json @@ -36,6 +36,7 @@ }, "dependencies": { "@types/marked": "^1.1.0", + "keycloak-js": "^11.0.0", "marked": "^1.1.1" }, "devDependencies": { diff --git a/plugins/deadlock-extension/src/config.ts b/plugins/deadlock-extension/src/config.ts new file mode 100644 index 00000000..713367bd --- /dev/null +++ b/plugins/deadlock-extension/src/config.ts @@ -0,0 +1,5 @@ +import * as path from 'path'; + +export const CONFIG_PATH = '/home/config/'; +export const USER_CHALLENGE_PATH = path.join(CONFIG_PATH, 'user-challenge.json'); +export const KEYCLOAK_CONFIG_PATH = path.join(CONFIG_PATH, 'keycloak.json'); diff --git a/plugins/deadlock-extension/src/extension.ts b/plugins/deadlock-extension/src/extension.ts index f4e553fb..46d36914 100644 --- a/plugins/deadlock-extension/src/extension.ts +++ b/plugins/deadlock-extension/src/extension.ts @@ -4,12 +4,14 @@ import { Uri } from 'vscode'; // eslint-disable-next-line @typescript-eslint/no-var-requires const marked = require('marked'); +import keycloakManager from './keycloakManager'; +import { USER_CHALLENGE_PATH } from './config'; + interface UserChallengeConfig { paths: Record<string, string>; host: string; } -const CONFIG_PATH = '/home/config/'; let readMeContent = ''; let userChallengeConfig: UserChallengeConfig; @@ -17,7 +19,7 @@ function init() { const currentWorkspace = vscode.workspace.workspaceFolders; vscode.workspace - .openTextDocument(Uri.parse(path.join(CONFIG_PATH, 'user-challenge.json'))) + .openTextDocument(Uri.parse(USER_CHALLENGE_PATH)) .then((userConfig) => { userChallengeConfig = JSON.parse(userConfig.getText()); DeadlockPanel.update(); @@ -35,6 +37,13 @@ function init() { DeadlockPanel.update(); }); } + + keycloakManager.loadKeycloakIfNecessary(() => { + console.log('keycloak is ready'); + if (keycloakManager.getKeycloak() && keycloakManager.getKeycloak().token) { + console.log(keycloakManager.getKeycloak().token); + } + }); } export function activate(context: vscode.ExtensionContext) { diff --git a/plugins/deadlock-extension/src/keycloakManager.js b/plugins/deadlock-extension/src/keycloakManager.js new file mode 100644 index 00000000..0d60dc06 --- /dev/null +++ b/plugins/deadlock-extension/src/keycloakManager.js @@ -0,0 +1,52 @@ +import Keycloak from 'keycloak-js/dist/keycloak'; +import { KEYCLOAK_CONFIG_PATH } from './config'; + +let keycloak; +let isAuthenticated = false; +const keycloakManager = {}; + +keycloakManager.getKeycloak = () => keycloak; + +keycloakManager.setKeycloak = (kc) => { + keycloak = kc; +}; + +keycloakManager.resetKeycloak = () => { + keycloak = undefined; +}; + +keycloakManager.loadKeycloakIfNecessary = (cb) => { + if (!keycloakManager.getKeycloak()) { + keycloakManager.loadKeycloak().then(() => cb()); + } else { + cb(); + } +}; + +keycloakManager.isAuthenticated = () => isAuthenticated; + +keycloakManager.logout = () => keycloakManager.getKeycloak().logout(); + +keycloakManager.getAvatar = () => keycloakManager.getKeycloak().tokenParsed.avatar_url; + +keycloakManager.loadKeycloak = () => { + let keycloak = Keycloak(KEYCLOAK_CONFIG_PATH); + return new Promise((resolve, reject) => { + keycloak.init({ onLoad: 'check-sso' }).success((authenticated) => { + if (authenticated) { + keycloakManager.setKeycloak(keycloak); + setInterval(() => { + keycloak.updateToken(10).error(() => keycloak.logout()); + }, 10000); + isAuthenticated = true; + resolve(); + } else { + keycloakManager.resetKeycloak(); + keycloak.login(); + reject(); + } + }); + }); +}; + +export default keycloakManager; -- GitLab