Select Git revision
controller.ts
-
Christian ZHENG authoredChristian ZHENG authored
controller.ts 3.03 KiB
import * as vscode from 'vscode';
import { OPEN_GETTING_STARTED_COMMAND } from '../theia/command';
import BriefingView from '../view/briefingView';
import GettingStartedView from '../view/gettingStartedView';
import { CHOOSE_MISSION_WORKDIR_COMMAND, CommandHandler } from './commandHandler';
import ExtensionStore from './extensionStore';
import KeycloakOAuth2DeviceFlowConnection from './keycloakOAuth2DeviceFlowConnection';
export default class Controller {
public connection: KeycloakOAuth2DeviceFlowConnection;
private commandHandler: CommandHandler;
private briefingView;
private gettingStartedView: GettingStartedView;
constructor(private context: vscode.ExtensionContext) {
this.briefingView = new BriefingView();
this.gettingStartedView = new GettingStartedView(context.extensionUri);
this.commandHandler = new CommandHandler(this);
this.connection = new KeycloakOAuth2DeviceFlowConnection(
'https://auth.dev.deadlock.io/auth/realms/Deadlock/protocol/openid-connect/auth/device',
'https://auth.dev.deadlock.io/auth/realms/Deadlock/protocol/openid-connect/token',
'https://auth.dev.deadlock.io/auth/realms/Deadlock/protocol/openid-connect/userinfo',
);
const that = this;
vscode.window.registerUriHandler({
handleUri(uri: vscode.Uri) {
const queryParams: URLSearchParams = new URLSearchParams(uri.query);
const action: string | null = queryParams.get('action');
switch (action) {
case 'open-challenge':
that.launchMission(queryParams.get('missionId'));
break;
default:
vscode.window.showInformationMessage('Aucune action trouvée!');
}
},
});
}
async authenticate() {
const tokens = await this.connection.getToken({ openLink: Controller.openBrowserWithUrl });
const exensionStorage = ExtensionStore.getInstance();
await exensionStorage.setAccessToken(tokens.accessToken);
await exensionStorage.setRefreshToken(tokens.refreshToken);
this.gettingStartedView.isAlreadyConnected = !!(await exensionStorage.getAccessToken());
}
public static openBrowserWithUrl(url: string) {
vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url));
}
async launchMission(missionId: string | null) {
if (missionId) {
vscode.window.showInformationMessage(`vous lancez la mission ${missionId}`);
const extensionStore = ExtensionStore.getInstance();
const hadMissionWorkdir = extensionStore.getMissionWorkdir() !== undefined;
if (!hadMissionWorkdir) {
await vscode.commands.executeCommand(CHOOSE_MISSION_WORKDIR_COMMAND.cmd);
}
const hadBeenConnected = (await extensionStore.getAccessToken()) !== undefined;
console.log('accesToke: ' + extensionStore.getAccessToken());
if (!hadBeenConnected) {
const { accessToken, refreshToken } = await this.connection.getToken({
openLink: Controller.openBrowserWithUrl,
});
vscode.window.showInformationMessage('Nouvelle connexion validée');
} else {
vscode.window.showInformationMessage('Déjà connecté: session récupérée');