From 6dca30d43f104b244799a8ebe1a2806e21743293 Mon Sep 17 00:00:00 2001 From: jdwiederstein01 Date: Fri, 8 Nov 2024 12:37:04 +0100 Subject: [PATCH 01/12] instanceURL support + AvatarURL changes --- package.json | 2 +- src/CiPipelineProvider.ts | 12 ++- src/SidebarProvider.ts | 58 +++++++--- src/extension.ts | 9 +- src/ts/authentication.ts | 8 +- src/ts/reloadCache.ts | 8 +- src/ts/userDataRequests.ts | 46 +++++--- webviews/components/Codesphere.svelte | 2 +- webviews/components/Overview.svelte | 15 ++- webviews/components/Sidebar.svelte | 149 ++++++++++++++++++++++++-- 10 files changed, 258 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 27a4f66..cc6ec6b 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ ], "pricing": "Free", "activationEvents": [ - "*" + "onStartupFinished" ], "capabilities": { "untrustedWorkspaces": { diff --git a/src/CiPipelineProvider.ts b/src/CiPipelineProvider.ts index af5bce0..254ae64 100644 --- a/src/CiPipelineProvider.ts +++ b/src/CiPipelineProvider.ts @@ -45,10 +45,14 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { webviewView.webview.onDidReceiveMessage(async (data) => { let socket: any; let uaSocket = getUaSocket(); + let instanceURL: string = cache.get("codesphere.instanceURL") as string; + instanceURL = instanceURL.replace(/^https?:\/\//, ''); + instanceURL = instanceURL.replace(/\/$/, ''); + console.log(`instanceURL: ${instanceURL}`); switch (data.type) { case "getCiPipelineStages": { - const socketURL = `wss://${data.value.dataCenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.dataCenterId}.${instanceURL}/workspace-proxy`; console.log(socketURL + `socketURL`); const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; const workspaceID: number = parseInt(data.value.workspaceId); @@ -101,7 +105,7 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { value: { stage: data.value.stage } - }) + }); break; } @@ -111,7 +115,7 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { } const delay = (ms: any) => new Promise(resolve => setTimeout(resolve, ms)); const workspaceId = parseInt(data.value.workspaceId); - const socketURL = `wss://${data.value.datacenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.datacenterId}.${instanceURL}/workspace-proxy`; const accessToken = cache.get("codesphere.accessTokenCache"); socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); let uaSocketconnect2 = getUaSocket(); @@ -172,7 +176,7 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { const workspaceId = parseInt(data.value.workspaceId); const stage = data.value.stage; let endpoint: number = 0; - const socketURL = `wss://${data.value.dataCenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.dataCenterId}.${instanceURL}/workspace-proxy`; const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); let uaSocket = getUaSocket(); diff --git a/src/SidebarProvider.ts b/src/SidebarProvider.ts index 895fbf2..f001fb6 100644 --- a/src/SidebarProvider.ts +++ b/src/SidebarProvider.ts @@ -134,6 +134,10 @@ export class SidebarProvider implements vscode.WebviewViewProvider { cache.update("codesphere.workspaceOverview", ''); } + if (!cache.get("codesphere.instanceURL")) { + cache.update("codesphere.instanceURL", 'https://codesphere.com'); + } + cache.setKeysForSync(["codesphere.isLoggedIn", "codesphere.accessTokenCache", "codesphere.teams", @@ -142,7 +146,13 @@ export class SidebarProvider implements vscode.WebviewViewProvider { "codesphere.lastCode", "codesphere.activeTunnel", "codesphere.currentWorkspace", - "codesphere.workspaceOverview"]); + "codesphere.workspaceOverview", + "codesphere.instanceURL"]); + + let instanceURL: string = cache.get("codesphere.instanceURL") as string; + instanceURL = instanceURL.replace(/^https?:\/\//, ''); + instanceURL = instanceURL.replace(/\/$/, ''); + console.log(`instanceURL: ${instanceURL}`); webviewView.webview.onDidReceiveMessage(async (data) => { let socket: any; @@ -153,7 +163,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { switch (data.type) { case "testConnection": { try { - const response = await axios.post('https://codesphere.com/team-service/listTeams', {}, { + const response = await axios.post(`${instanceURL}/team-service/listTeams`, {}, { headers: { Authorization: `Bearer ${cache.get("codesphere.accessTokenCache")}` } @@ -180,7 +190,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { } const workspaceId = data.value.workspaceId; const workspaceName = data.value.workspaceName; - const socketURL = `wss://${data.value.datacenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.datacenterId}.${instanceURL}/workspace-proxy`; const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; const teamId = data.value.teamId; socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); @@ -418,7 +428,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { } const workspaceId = data.value.workspaceId; const workspaceName = data.value.workspaceName; - const socketURL = `wss://${data.value.datacenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.datacenterId}.${instanceURL}/workspace-proxy`; const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; const teamId = data.value.teamId; socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); @@ -491,7 +501,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { const workspaceId = data.value.workspaceId; const stage = data.value.stage; - const socketURL = `wss://${data.value.dcId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.dcId}.${instanceURL}/workspace-proxy`; const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); @@ -515,20 +525,42 @@ export class SidebarProvider implements vscode.WebviewViewProvider { break; } + + case "getInstanceURL": { + if (!data.value) { + return; + } + let instanceURL = cache.get("codesphere.instanceURL"); + this._view?.webview.postMessage({ type: "getInstanceURL", value: instanceURL }); + break; + } + + case "updateInstanceURL": { + if (!data.value) { + return; + } + let url = data.value.url; + await cache.update("codesphere.instanceURL", url); + this._view?.webview.postMessage({ type: "updateInstanceURL"}); + + break; + } + case "signin": { if (!data.value) { return; } try { - const sessionId = await signIn(data.value.email, data.value.password); + const instanceURL = cache.get("codesphere.instanceURL"); + const sessionId = await signIn(data.value.email, data.value.password, instanceURL as string); await this.extensionContext.secrets.store("codesphere.sessionId", sessionId as string); const storedSessionId = await this.extensionContext.secrets.get("codesphere.sessionId"); - + const accessToken = await new Promise((resolve, reject) => { - genAccessToken(storedSessionId as string, (error: Error | null, accessToken?: string) => { + genAccessToken(storedSessionId as string, instanceURL as string, (error: Error | null, accessToken?: string) => { if (error) { return reject(error); } @@ -544,7 +576,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { console.log('accessTokentesti', accessToken); - await reloadCache(accessToken, (error, teams, workspaces, userData) => { + await reloadCache(accessToken, instanceURL as string, (error, teams, workspaces, userData) => { if (error) { vscode.window.showErrorMessage('An error occurred while reloading cache: ' + error.message); return; @@ -643,7 +675,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { case "activateWorkspace": { // wakes up sleeping on-demand workspaces when open workspace accordion in the UI const workspaceId = data.value.workspaceId; - const socketURL = `wss://${data.value.datacenterId}.codesphere.com/deployment-service`; + const socketURL = `wss://${data.value.datacenterId}.${instanceURL}/deployment-service`; const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; socket = await setupWs(new wsLib.WebSocket(socketURL), "deployment-service", accessToken, cache, workspaceId); uaSocket2 = getUaSocket(); @@ -747,7 +779,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { } const delay = (ms: any) => new Promise(resolve => setTimeout(resolve, ms)); const workspaceId = data.value.workspaceId; - const socketURL = `wss://${data.value.datacenterId}.codesphere.com/workspace-proxy`; + const socketURL = `wss://${data.value.datacenterId}.${instanceURL}/workspace-proxy`; const accessToken = cache.get("codesphere.accessTokenCache"); socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceId); let uaSocketconnect2 = getUaSocket(); @@ -802,8 +834,8 @@ export class SidebarProvider implements vscode.WebviewViewProvider { // vscode.commands.executeCommand('remote-explorer.signIntoTunnelGithub', 'hello-react'); // const accessToken = cache.get("codesphere.accessTokenCache"); // const workspaceId = data.value.workspaceId; - // const socketURLPull = `wss://${data.value.dataCenterId}.codesphere.com/workspace-proxy`; - // const socketURLGitHubToken = `wss://${data.value.dataCenterId}.codesphere.com/ide-service`; + // const socketURLPull = `wss://${data.value.dataCenterId}.${instanceURL}/workspace-proxy`; + // const socketURLGitHubToken = `wss://${data.value.dataCenterId}.${instanceURL}/ide-service`; // const delay = (ms: any) => new Promise(resolve => setTimeout(resolve, ms)); // // generate gitHub accessToken diff --git a/src/extension.ts b/src/extension.ts index 45d3c7a..018af01 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -17,7 +17,7 @@ function getWorkspaceRootPath(): string { } export function activate(context: vscode.ExtensionContext) { - //testing + const config = vscode.workspace.getConfiguration('remote.tunnels'); @@ -51,6 +51,8 @@ export function activate(context: vscode.ExtensionContext) { console.log('config ' + JSON.stringify(config)); + vscode.workspace.getConfiguration('window').update('restoreWindows', 'none', vscode.ConfigurationTarget.Global); + context.subscriptions.push( vscode.window.registerWebviewViewProvider( "codesphere-sidebar", @@ -81,7 +83,7 @@ export function activate(context: vscode.ExtensionContext) { ); - vscode.workspace + const userData: any = context.globalState.get("codesphere.userData"); const gitEmail: string = userData.email || ""; let gitFirstName: string = userData.firstName || ""; @@ -179,7 +181,8 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand('codesphere.reload', async () => { const accessToken = await context.secrets.get("codesphere.accessToken"); if (accessToken) { - reloadCache(accessToken, (error, teams, workspaces, userData) => { + const instanceURL = await context.globalState.get("codesphere.instanceURL") as string; + reloadCache(accessToken, instanceURL, (error, teams, workspaces, userData) => { if (error) { vscode.window.showErrorMessage('An error occurred while reloading cache: ' + error.message); return; diff --git a/src/ts/authentication.ts b/src/ts/authentication.ts index 8bb8332..0f29b0a 100644 --- a/src/ts/authentication.ts +++ b/src/ts/authentication.ts @@ -2,8 +2,8 @@ import axios from "axios"; import * as vscode from "vscode"; // Funktion zum Anmelden -export function signIn(email: string, password: string): Promise { - const signInUrl = 'https://codesphere.com/auth-service/signIn'; +export function signIn(email: string, password: string, instanceURL: string): Promise { + const signInUrl = `${instanceURL}/auth-service/signIn`; const requestData = { email: email, @@ -33,8 +33,8 @@ export function signIn(email: string, password: string): Promise { } // Funktion zum Generieren des Access Tokens -export function genAccessToken(sessionId: string, callback: (error: any, accessToken?: string) => void) { - const genAccessTokenUrl = 'https://codesphere.com/auth-service/genAccessToken'; +export function genAccessToken(sessionId: string, instanceURL: string, callback: (error: any, accessToken?: string) => void) { + const genAccessTokenUrl = `${instanceURL}/auth-service/genAccessToken`; const requestData = { id: sessionId diff --git a/src/ts/reloadCache.ts b/src/ts/reloadCache.ts index 8a0a73b..9bbc207 100644 --- a/src/ts/reloadCache.ts +++ b/src/ts/reloadCache.ts @@ -2,12 +2,12 @@ import { listTeams, listWorkspaces, getUserData } from "./userDataRequests"; -export async function reloadCache(accessToken: string, callback: (error: Error | null, team: Array, workspaces: { [teamId: string]: any[] }, userData: Array | null) => void) { +export async function reloadCache(accessToken: string, instanceURL: string, callback: (error: Error | null, team: Array, workspaces: { [teamId: string]: any[] }, userData: Array | null) => void) { try { - const teamPromise = await listTeams(accessToken); + const teamPromise = await listTeams(accessToken, instanceURL); const teams: Array = await teamPromise; - const workspacesPromise = await listWorkspaces(accessToken, teams); - const userDataPromise = await getUserData(accessToken); + const workspacesPromise = await listWorkspaces(accessToken, teams, instanceURL); + const userDataPromise = await getUserData(accessToken, instanceURL); const [team, workspaces, userData] = await Promise.all([teamPromise, workspacesPromise, userDataPromise]); diff --git a/src/ts/userDataRequests.ts b/src/ts/userDataRequests.ts index 3fe4ebe..adc7317 100644 --- a/src/ts/userDataRequests.ts +++ b/src/ts/userDataRequests.ts @@ -2,9 +2,9 @@ import axios from 'axios'; // Diese Funktion sendet einen POST-Request an die API, um die Teams abzurufen -export async function listTeams(accessToken: string): Promise { +export async function listTeams(accessToken: string, instanceURL: string): Promise { try { - const response = await axios.post('https://codesphere.com/team-service/listTeams', {}, { + const response = await axios.post(`${instanceURL}/team-service/listTeams`, {}, { headers: { Authorization: `Bearer ${accessToken}` } @@ -21,10 +21,10 @@ export async function listTeams(accessToken: string): Promise { } // Diese Funktion sendet einen POST-Request an die API, um die Workspaces abzurufen - export async function listWorkspaces(accessToken: string, teams: Array): Promise<{ [teamId: string]: Array }> { + export async function listWorkspaces(accessToken: string, teams: Array, instanceURL: string): Promise<{ [teamId: string]: Array }> { try { const workspacePromises = teams.map(async (team) => { - const response = await axios.post('https://codesphere.com/workspace-service/listWorkspaces', { + const response = await axios.post(`${instanceURL}/workspace-service/listWorkspaces`, { teamId: team.id }, { headers: { @@ -52,21 +52,43 @@ export async function listTeams(accessToken: string): Promise { } } -// Diese Funktion sendet einen POST-Request an die API, um die Benutzerdaten abzurufen -export async function getUserData(accessToken: string): Promise { +export async function getUserData(accessToken: string, instanceURL: string): Promise { try { - const response = await axios.post('https://codesphere.com/auth-service/getUser', {}, { + const userResponse = await axios.post(`${instanceURL}/auth-service/getUser`, {}, { headers: { Authorization: `Bearer ${accessToken}` } }); - if (response.data.code === "Ok") { - return response.data.data; - } else { - throw new Error(`Fehler beim Abrufen des Users: ${response.data.errMessage}`); + if (userResponse.data.code !== "Ok") { + throw new Error(`Fehler beim Abrufen des Users: ${userResponse.data.errMessage}`); } + + let userData = userResponse.data.data; + console.log(`Userdaten: ${JSON.stringify(userData)}`); + + const avatarResponse = await axios.post(`${instanceURL}/auth-service/getAvatarURL`, [userData.userId], { + headers: { + Authorization: `Bearer ${accessToken}` + } + }); + + if (avatarResponse.data.code !== "Ok") { + throw new Error(`Fehler beim Abrufen des Avatars: ${avatarResponse.data.errMessage}`); + } + + // const avatarURL = avatarResponse.data.avatarURL; + console.log(`Avatar URL: ${JSON.stringify(avatarResponse.data.data[0])}`); + + userData = { + ...userData, + avatarURL: avatarResponse.data.data[0] + }; + + console.log(`Userdaten mit Avatar: ${JSON.stringify(userData)}`); + + return userData; } catch (error) { - throw new Error(`Fehler beim Abrufen der User: ${error}`); + throw new Error(`Fehler beim Abrufen der Userdaten: ${error}`); } } \ No newline at end of file diff --git a/webviews/components/Codesphere.svelte b/webviews/components/Codesphere.svelte index e3c919f..28759f0 100644 --- a/webviews/components/Codesphere.svelte +++ b/webviews/components/Codesphere.svelte @@ -263,7 +263,7 @@

Your Teams

- User Avatar + User Avatar
{#each teamArray as team (team.id)} diff --git a/webviews/components/Overview.svelte b/webviews/components/Overview.svelte index 913469e..0e4c057 100644 --- a/webviews/components/Overview.svelte +++ b/webviews/components/Overview.svelte @@ -21,6 +21,15 @@ let runStageSuccess = ''; let pullState = false; let pushState = false; + let codesphereURL; + + function getInstanceURL() { + vscode.postMessage({ + type: 'getInstanceURL', + value: { + } + }); + } function openCiPanel () { vscode.postMessage({ @@ -43,7 +52,7 @@ // function to create the deployment URL for the workspace function createWorkspaceURL(dcId, wsId) { - workspaceURL = `https://${wsId}-3000.${dcId}.codesphere.com` + workspaceURL = `https://${wsId}-3000.${dcId}.${codesphereURL}` } // funtion to set up the vscode server on Codesphere if it is not already running @@ -293,6 +302,9 @@ case 'gitPush': pushState = false; break; + case 'getInstanceURL': + codesphereURL = message.value; + break; } }); }); @@ -303,6 +315,7 @@ onMount(testAccessToken); onMount(getconnectedWorkspace); onMount(createWorkspaceURL); + onMount(getInstanceURL); @@ -278,9 +386,34 @@ + + {#if showURLModal} +
+ +
+ {/if}

{errorMessage}

+

{codesphereURL}

From d1e554f9306cbc0048b32ae334ddcc138130bd56 Mon Sep 17 00:00:00 2001 From: JD Wiederstein Date: Fri, 8 Nov 2024 13:57:32 +0100 Subject: [PATCH 02/12] fix windows error --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 018af01..dd33d99 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -120,7 +120,7 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.executeCommand('setContext', 'codesphere.currentWorkspace', workspaceId); - if (workspaceId !== "") { + if (workspaceId !== "" && workspaceId !== "$WORKSPACE_ID") { const pwdUri = vscode.Uri.parse('home/user/app'); vscode.commands.executeCommand('vscode.openFolder', pwdUri); } From e67b67233995f9940cc7d17c8653a4103da8ed34 Mon Sep 17 00:00:00 2001 From: jdwiederstein01 Date: Fri, 8 Nov 2024 15:34:09 +0100 Subject: [PATCH 03/12] fix bug in test connection --- src/SidebarProvider.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/SidebarProvider.ts b/src/SidebarProvider.ts index f001fb6..dca3e62 100644 --- a/src/SidebarProvider.ts +++ b/src/SidebarProvider.ts @@ -163,21 +163,31 @@ export class SidebarProvider implements vscode.WebviewViewProvider { switch (data.type) { case "testConnection": { try { - const response = await axios.post(`${instanceURL}/team-service/listTeams`, {}, { + const accessToken = await cache.get("codesphere.accessTokenCache") as string; + console.log('accessToken', accessToken); + + const url = `https://${instanceURL}/team-service/listTeams`; + console.log('url12345', url); + + const response = await axios.post(url, {}, { headers: { - Authorization: `Bearer ${cache.get("codesphere.accessTokenCache")}` - } + Authorization: `Bearer ${accessToken}` + }, + timeout: 5000 }); + + console.log('response', JSON.stringify(response.data)); if (response.data.code === "Ok") { console.log("Token is valid"); } else { + console.log(`Fehler bei testConnection: ${response.data}`); webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); - console.log('Token is invalid'); - throw new Error(`Fehler beim Abrufen der Teams: ${response.data.errMessage}`); + console.log('Token is invalid1'); + throw new Error(`Fehler beim Abrufen der Teams: ${response.data}`); } } catch (error) { webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); - console.log('Token is invalid'); + console.log('Token is invalid2'); throw new Error(`Fehler beim Abrufen der Teams: ${error}`); } From 0e67132802ecb35dc427d71ea5b883b0064181c5 Mon Sep 17 00:00:00 2001 From: "jan-david.wiederstein" Date: Tue, 12 Nov 2024 13:52:54 +0100 Subject: [PATCH 04/12] fix icon issue on activity bar --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc6ec6b..bfa212c 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "type": "webview", "id": "codesphere-sidebar", "name": "Codesphere", - "icon": "media/Codesphere.svg", + "icon": "media/codesphere.svg", "contextualTitle": "Codesphere" } ], From e2fa31922b6a61df97e1840ea841250e6b9ff005 Mon Sep 17 00:00:00 2001 From: Simon Pfeiffer Date: Tue, 12 Nov 2024 18:39:01 +0100 Subject: [PATCH 05/12] 0.1.8 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfc0191..d5a5ee9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codesphere", - "version": "0.1.7", + "version": "0.1.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codesphere", - "version": "0.1.7", + "version": "0.1.8", "dependencies": { "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", diff --git a/package.json b/package.json index bfa212c..9379145 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "codesphere", "displayName": "Codesphere", "description": "Connect VS Code to your Codesphere workspaces", - "version": "0.1.7", + "version": "0.1.8", "icon": "media/Codesphere.png", "repository": { "type": "git", From 761e493659652aedf091fccdfdc58ccefcdb5716 Mon Sep 17 00:00:00 2001 From: Simon Pfeiffer Date: Tue, 12 Nov 2024 18:41:04 +0100 Subject: [PATCH 06/12] 0.1.9 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d5a5ee9..e1bcc51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codesphere", - "version": "0.1.8", + "version": "0.1.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codesphere", - "version": "0.1.8", + "version": "0.1.9", "dependencies": { "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", diff --git a/package.json b/package.json index 9379145..df8d848 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "codesphere", "displayName": "Codesphere", "description": "Connect VS Code to your Codesphere workspaces", - "version": "0.1.8", + "version": "0.1.9", "icon": "media/Codesphere.png", "repository": { "type": "git", From 93123a63effb29b216e8020412595282ede8502c Mon Sep 17 00:00:00 2001 From: Simon Pfeiffer Date: Tue, 12 Nov 2024 18:41:15 +0100 Subject: [PATCH 07/12] 0.1.10 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1bcc51..7b79e53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codesphere", - "version": "0.1.9", + "version": "0.1.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codesphere", - "version": "0.1.9", + "version": "0.1.10", "dependencies": { "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", diff --git a/package.json b/package.json index df8d848..65ef3a4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "codesphere", "displayName": "Codesphere", "description": "Connect VS Code to your Codesphere workspaces", - "version": "0.1.9", + "version": "0.1.10", "icon": "media/Codesphere.png", "repository": { "type": "git", From 63ecce6436b1df632e440a59fd0fe36184d5388f Mon Sep 17 00:00:00 2001 From: Simon Pfeiffer Date: Wed, 13 Nov 2024 10:51:02 +0100 Subject: [PATCH 08/12] Fix dependency mismatch --- package-lock.json | 38 +++++++++++++++++++++++++++++++++++++- package.json | 4 +++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b79e53..315555b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,11 @@ "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", "axios": "^1.6.8", + "bufferutil": "^4.0.8", "exec-sh": "^0.4.0", "merge": "^2.1.1", - "n": "^9.2.1" + "n": "^9.2.1", + "utf-8-validate": "^6.0.5" }, "devDependencies": { "@rollup/plugin-commonjs": "^25.0.8", @@ -1871,6 +1873,18 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -4682,6 +4696,16 @@ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "optional": true }, + "node_modules/node-gyp-build": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.3.tgz", + "integrity": "sha512-EMS95CMJzdoSKoIiXo8pxKoL8DYxwIZXYlLmgPb8KUv794abpnLK6ynsCAWNliOjREKruYKdzbh76HHYUHX7nw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -6636,6 +6660,18 @@ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, + "node_modules/utf-8-validate": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.5.tgz", + "integrity": "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", diff --git a/package.json b/package.json index 65ef3a4..8d636a7 100644 --- a/package.json +++ b/package.json @@ -185,8 +185,10 @@ "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", "axios": "^1.6.8", + "bufferutil": "^4.0.8", "exec-sh": "^0.4.0", "merge": "^2.1.1", - "n": "^9.2.1" + "n": "^9.2.1", + "utf-8-validate": "^6.0.5" } } From cd0ea77f15a4b24709cf6de260bece0b0473fa85 Mon Sep 17 00:00:00 2001 From: Simon Pfeiffer Date: Wed, 13 Nov 2024 10:51:30 +0100 Subject: [PATCH 09/12] 0.1.11 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 315555b..85c4de2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codesphere", - "version": "0.1.10", + "version": "0.1.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codesphere", - "version": "0.1.10", + "version": "0.1.11", "dependencies": { "@vscode/vsce": "^2.26.1", "ansi-to-html": "^0.7.2", diff --git a/package.json b/package.json index 8d636a7..939536d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "codesphere", "displayName": "Codesphere", "description": "Connect VS Code to your Codesphere workspaces", - "version": "0.1.10", + "version": "0.1.11", "icon": "media/Codesphere.png", "repository": { "type": "git", From 476f051e64e8cbdd6862dd53e4c075a0afcb6aa0 Mon Sep 17 00:00:00 2001 From: jdwiederstein01 Date: Thu, 21 Nov 2024 15:33:53 +0100 Subject: [PATCH 10/12] add custom subdomains --- src/CiPipelineProvider.ts | 2 - src/SidebarProvider.ts | 13 +++++- src/extension.ts | 9 ++++- src/ts/userDataRequests.ts | 61 +++++++++++++++++++++++------ src/ts/wsService.ts | 32 ++++++++++++++- webviews/components/Overview.svelte | 8 ++-- 6 files changed, 104 insertions(+), 21 deletions(-) diff --git a/src/CiPipelineProvider.ts b/src/CiPipelineProvider.ts index 254ae64..0a6abbc 100644 --- a/src/CiPipelineProvider.ts +++ b/src/CiPipelineProvider.ts @@ -35,9 +35,7 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { webviewView.webview.options = { // Allow scripts in the webview enableScripts: true, - localResourceRoots: [this._extensionUri], - }; webviewView.webview.html = this._getHtmlWebview(webviewView.webview); diff --git a/src/SidebarProvider.ts b/src/SidebarProvider.ts index dca3e62..1e05249 100644 --- a/src/SidebarProvider.ts +++ b/src/SidebarProvider.ts @@ -165,7 +165,10 @@ export class SidebarProvider implements vscode.WebviewViewProvider { try { const accessToken = await cache.get("codesphere.accessTokenCache") as string; console.log('accessToken', accessToken); - + instanceURL = cache.get("codesphere.instanceURL") as string; + instanceURL = instanceURL.replace(/^https?:\/\//, ''); + instanceURL = instanceURL.replace(/\/$/, ''); + const url = `https://${instanceURL}/team-service/listTeams`; console.log('url12345', url); @@ -585,12 +588,18 @@ export class SidebarProvider implements vscode.WebviewViewProvider { cache.update("codesphere.accessTokenCache", accessToken); console.log('accessTokentesti', accessToken); - + + // TODO: replace this call to the onMount function in webview to ensure, that all data get fetched when open the webview + // right now the data might be in an old state when opening the webview when already signed in await reloadCache(accessToken, instanceURL as string, (error, teams, workspaces, userData) => { if (error) { vscode.window.showErrorMessage('An error occurred while reloading cache: ' + error.message); return; } + // TODO: add functionality to add custom workspace subdomain + add domain if available to workspace + // add two key to the json object: 'subdomain' and 'domain'. subdomain must be constructed with workspaceID and base subdomain. + // domain must be fetched from /deployment-service websocket method: listDomainsByTeams + // this might be added to the cache.update("codesphere.workspaces", workspaces); cache.update("codesphere.userData", userData); cache.update("codesphere.teams", teams); diff --git a/src/extension.ts b/src/extension.ts index dd33d99..e2caca6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -77,8 +77,12 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.window.registerWebviewViewProvider( 'ci-pipeline', - ciPipelineProvider - + ciPipelineProvider, + { + webviewOptions: { + retainContextWhenHidden: true + } + } ), ); @@ -189,6 +193,7 @@ export function activate(context: vscode.ExtensionContext) { } context.globalState.update("codesphere.workspaces", workspaces); context.globalState.update("codesphere.userData", userData); + context.globalState.update("codesphere.teams", teams); vscode.commands.executeCommand('workbench.action.webview.reloadWebviewAction', 'codesphere-sidebar'); }); } else { diff --git a/src/ts/userDataRequests.ts b/src/ts/userDataRequests.ts index adc7317..7bd0918 100644 --- a/src/ts/userDataRequests.ts +++ b/src/ts/userDataRequests.ts @@ -1,5 +1,10 @@ import axios from 'axios'; - +import * as wsLib from 'ws'; +const { setupWs, + request, + getUaSocket, + getSubdomainStructure + } = require('./wsService'); // Diese Funktion sendet einen POST-Request an die API, um die Teams abzurufen export async function listTeams(accessToken: string, instanceURL: string): Promise { @@ -11,6 +16,7 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi }); if (response.data.code === "Ok") { + console.log("test teams"); return response.data.data; } else { throw new Error(`Fehler beim Abrufen der Teams: ${response.data.errMessage}`); @@ -23,7 +29,26 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi // Diese Funktion sendet einen POST-Request an die API, um die Workspaces abzurufen export async function listWorkspaces(accessToken: string, teams: Array, instanceURL: string): Promise<{ [teamId: string]: Array }> { try { - const workspacePromises = teams.map(async (team) => { + let socket: any; + let uaSocket: any; + + // Funktion für künstliche Verzögerungen (falls benötigt) + const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); + + // Map für die Ergebnisse + const workspaceMap: { [teamId: string]: Array } = {}; + let endpointId = 999; + for (const team of teams) { + // Initialisiere WebSocket-Verbindung, falls nicht vorhanden + if (!socket) { + const strippedURL = instanceURL.split("://")[1]; + const socketURL = `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`; + console.log(`Socket URL: ${socketURL}`); + socket = await setupWs(new wsLib.WebSocket(socketURL), "ide-service", accessToken); + uaSocket = getUaSocket(); + } + + // Abrufen der Workspaces für das aktuelle Team const response = await axios.post(`${instanceURL}/workspace-service/listWorkspaces`, { teamId: team.id }, { @@ -33,25 +58,39 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi }); if (response.data.code === "Ok") { - return response.data.data; + // Subdomain-Struktur abrufen + const structure = getSubdomainStructure(uaSocket, endpointId); + + // Konfiguration abrufen + await request(uaSocket, "getBrowserConfig", {}, "ide-service", endpointId); + + const subDomainStructure = await structure; + console.log(`Subdomain structure: ${subDomainStructure}`); + + // Workspaces anreichern + const enrichedData = response.data.data.map((workspace: any) => ({ + ...workspace, + subDomainStructure + })); + + // Ergebnis im Map speichern + workspaceMap[team.id] = enrichedData; + endpointId++; } else { throw new Error(`Fehler beim Abrufen der Workspaces für Team ${team.id}: ${response.data.errMessage}`); } - }); - - const workspaceArrays = await Promise.all(workspacePromises); - - const workspaceMap: { [teamId: string]: Array } = {}; - teams.forEach((team, index) => { - workspaceMap[team.id] = workspaceArrays[index]; - }); + // Optional: Verzögerung einfügen (falls erforderlich) + // await delay(100); // Beispiel: 100ms Verzögerung + } + console.log(`${JSON.stringify(workspaceMap)}`); return workspaceMap; } catch (error) { throw new Error(`Fehler beim Abrufen der Workspaces: ${error}`); } } + export async function getUserData(accessToken: string, instanceURL: string): Promise { try { const userResponse = await axios.post(`${instanceURL}/auth-service/getUser`, {}, { diff --git a/src/ts/wsService.ts b/src/ts/wsService.ts index 08db803..6ee23bd 100644 --- a/src/ts/wsService.ts +++ b/src/ts/wsService.ts @@ -8,7 +8,7 @@ let dsSocket: any; let uaSocket: any; -const setupWs = (ws: any, name: string, accessToken: undefined, cache:any, workspaceID: string) => { +const setupWs = (ws: any, name: string, accessToken: undefined, cache?:any, workspaceID?: string) => { let reconnectAttempts = 0; const RECONNECT_ATTEMPTS = 10000; const RECONNECT_DELAY = 5000; @@ -659,6 +659,35 @@ const ciStageStatusHandler = async (deploymentSocket: any, endpointId: number, p }); }; +const getSubdomainStructure = async (deploymentSocket: any, endpointId: any) => { + return new Promise((resolve, reject) => { + const nexLogHandler = (msg: any) => { + try { + let msgTest = msg.toString(); + let parsedMsg = JSON.parse(msgTest); + if (msgTest.includes(`"endpointId":${endpointId}`)) { + let workspaceHostingBaseDomain = parsedMsg.reply.data.workspaceHostingBaseDomain; + console.log(`subdomain-Structure` + JSON.stringify(parsedMsg.reply.data.workspaceHostingBaseDomain)); + resolve(workspaceHostingBaseDomain); + deploymentSocket.off("message", nexLogHandler); + } + + } catch (error) { + console.error("Error parsing message:", error); + reject(error); + } + }; + + const errorHandler = (err: any) => { + console.log("Socket exited with error:" + err); + reject(err); + }; + + deploymentSocket.on("message", nexLogHandler); + deploymentSocket.on("error", errorHandler); + }); +}; + @@ -683,6 +712,7 @@ module.exports = { checkCiPipelineStructure, ciStepHandler, ciStageStatusHandler, + getSubdomainStructure, getUaSocket: () => uaSocket, getDsSocket: () => dsSocket }; \ No newline at end of file diff --git a/webviews/components/Overview.svelte b/webviews/components/Overview.svelte index 0e4c057..8fe40cb 100644 --- a/webviews/components/Overview.svelte +++ b/webviews/components/Overview.svelte @@ -51,8 +51,10 @@ } // function to create the deployment URL for the workspace - function createWorkspaceURL(dcId, wsId) { - workspaceURL = `https://${wsId}-3000.${dcId}.${codesphereURL}` + // TODO: instead of contructing the workspaceURL here, you can fetch it instead of globalStorage + // there might be connected a domain to a workspace, so if this is the case use the domain instead of base subdomain + function createWorkspaceURL(subDomainStructure, wsId) { + workspaceURL = `https://${wsId}-3000.${subDomainStructure}` } // funtion to set up the vscode server on Codesphere if it is not already running @@ -219,7 +221,7 @@ case 'overviewData': overviewData = message.value; activateWorkspace(overviewData.workspace.id, overviewData.workspace.dataCenterId); - createWorkspaceURL(overviewData.workspace.dataCenterId, overviewData.workspace.id); + createWorkspaceURL(overviewData.workspace.subDomainStructure, overviewData.workspace.id); getconnectedWorkspace(); break; case 'resourcesDeployed': From 2f55a6e40191c00fea3c3e6e840a4e7f8b9814b6 Mon Sep 17 00:00:00 2001 From: jdwiederstein01 Date: Thu, 21 Nov 2024 17:18:25 +0100 Subject: [PATCH 11/12] remove comments --- src/ts/userDataRequests.ts | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/ts/userDataRequests.ts b/src/ts/userDataRequests.ts index 7bd0918..9533f1c 100644 --- a/src/ts/userDataRequests.ts +++ b/src/ts/userDataRequests.ts @@ -26,29 +26,23 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi } } - // Diese Funktion sendet einen POST-Request an die API, um die Workspaces abzurufen export async function listWorkspaces(accessToken: string, teams: Array, instanceURL: string): Promise<{ [teamId: string]: Array }> { try { let socket: any; let uaSocket: any; + let socketURL: any; + const strippedURL = instanceURL.split("://")[1]; - // Funktion für künstliche Verzögerungen (falls benötigt) - const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); - - // Map für die Ergebnisse const workspaceMap: { [teamId: string]: Array } = {}; let endpointId = 999; for (const team of teams) { - // Initialisiere WebSocket-Verbindung, falls nicht vorhanden - if (!socket) { - const strippedURL = instanceURL.split("://")[1]; - const socketURL = `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`; + if (!socket || socketURL !== `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`) { + socketURL = `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`; console.log(`Socket URL: ${socketURL}`); socket = await setupWs(new wsLib.WebSocket(socketURL), "ide-service", accessToken); uaSocket = getUaSocket(); } - // Abrufen der Workspaces für das aktuelle Team const response = await axios.post(`${instanceURL}/workspace-service/listWorkspaces`, { teamId: team.id }, { @@ -58,30 +52,23 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi }); if (response.data.code === "Ok") { - // Subdomain-Struktur abrufen const structure = getSubdomainStructure(uaSocket, endpointId); - // Konfiguration abrufen await request(uaSocket, "getBrowserConfig", {}, "ide-service", endpointId); const subDomainStructure = await structure; console.log(`Subdomain structure: ${subDomainStructure}`); - // Workspaces anreichern const enrichedData = response.data.data.map((workspace: any) => ({ ...workspace, subDomainStructure })); - // Ergebnis im Map speichern workspaceMap[team.id] = enrichedData; endpointId++; } else { throw new Error(`Fehler beim Abrufen der Workspaces für Team ${team.id}: ${response.data.errMessage}`); } - - // Optional: Verzögerung einfügen (falls erforderlich) - // await delay(100); // Beispiel: 100ms Verzögerung } console.log(`${JSON.stringify(workspaceMap)}`); return workspaceMap; From 9990709c4298c476e709304ea66c02564c82281c Mon Sep 17 00:00:00 2001 From: jdwiederstein01 Date: Thu, 21 Nov 2024 17:54:58 +0100 Subject: [PATCH 12/12] remove comments and console.logs --- src/CiPipelineProvider.ts | 6 --- src/NoCurrentWorkspaceProvider.ts | 2 - src/SidebarProvider.ts | 30 ++++---------- src/extension.ts | 36 ++--------------- src/ts/authentication.ts | 17 ++++---- src/ts/readBash.ts | 3 +- src/ts/sanatizeWorkspaceNames.ts | 16 ++++---- src/ts/userDataRequests.ts | 9 ----- src/ts/wsService.ts | 57 ++++++++------------------- webviews/components/CiPipeline.svelte | 3 -- webviews/components/Codesphere.svelte | 7 +--- webviews/components/Overview.svelte | 6 --- webviews/components/Sidebar.svelte | 8 ++-- 13 files changed, 49 insertions(+), 151 deletions(-) diff --git a/src/CiPipelineProvider.ts b/src/CiPipelineProvider.ts index 0a6abbc..57c12ab 100644 --- a/src/CiPipelineProvider.ts +++ b/src/CiPipelineProvider.ts @@ -33,7 +33,6 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { let cache = this.extensionContext.globalState; webviewView.webview.options = { - // Allow scripts in the webview enableScripts: true, localResourceRoots: [this._extensionUri], }; @@ -46,12 +45,10 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { let instanceURL: string = cache.get("codesphere.instanceURL") as string; instanceURL = instanceURL.replace(/^https?:\/\//, ''); instanceURL = instanceURL.replace(/\/$/, ''); - console.log(`instanceURL: ${instanceURL}`); switch (data.type) { case "getCiPipelineStages": { const socketURL = `wss://${data.value.dataCenterId}.${instanceURL}/workspace-proxy`; - console.log(socketURL + `socketURL`); const accessToken = await this.extensionContext.secrets.get("codesphere.accessToken") as string; const workspaceID: number = parseInt(data.value.workspaceId); socket = await setupWs(new wsLib.WebSocket(socketURL), "workspace-proxy", accessToken, cache, workspaceID); @@ -61,7 +58,6 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { const ciPipelineCheck = checkCiPipelineStructure(uaSocket, 324); ciPipelineCheck.then((ci: any) => { ciStructure = ci; - console.log('ciStructure: ' + JSON.stringify(ciStructure)); this._view?.webview.postMessage({ type: "CIPipelineStages", value: { @@ -198,7 +194,6 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { await request(uaSocket, "startPipeline", { workspaceId: workspaceId, stage: stage }, "workspace-proxy", 32); for (let i = 0; i < data.value.stepcount; i++) { - console.log('stage'); request(uaSocket, "logs", { workspaceId: workspaceId, stage: stage, step:i }, "workspace-proxy", (400+i)); } @@ -210,7 +205,6 @@ export class CiPipelineProvider implements vscode.WebviewViewProvider { while (!ciStageFinished) { - console.log('Ci Pipeline is runing'); await delay(1000); if (ciPipelineStatus === 'success') { diff --git a/src/NoCurrentWorkspaceProvider.ts b/src/NoCurrentWorkspaceProvider.ts index d6dd8ed..23cedcc 100644 --- a/src/NoCurrentWorkspaceProvider.ts +++ b/src/NoCurrentWorkspaceProvider.ts @@ -13,9 +13,7 @@ export class NoCurrentWorkspaceProvider implements vscode.WebviewViewProvider { this._view = webviewView; webviewView.webview.options = { - // Allow scripts in the webview enableScripts: true, - localResourceRoots: [this._extensionUri], }; diff --git a/src/SidebarProvider.ts b/src/SidebarProvider.ts index 1e05249..824ab7d 100644 --- a/src/SidebarProvider.ts +++ b/src/SidebarProvider.ts @@ -27,7 +27,7 @@ import { exec } from 'child_process'; const extension_package = require('../package.json'); const version = extension_package.version; -// Definiere den Pfad zur VSIX-Datei +// Thats the name of the vsix file for developement const vsixFile = 'codesphere-'+version+'.vsix'; @@ -43,9 +43,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { let cache = this.extensionContext.globalState; webviewView.webview.options = { - // Allow scripts in the webview enableScripts: true, - localResourceRoots: [this._extensionUri], }; @@ -77,20 +75,19 @@ export class SidebarProvider implements vscode.WebviewViewProvider { let matchingObject = null; for (const teamId in workspacesInTeam) { - const workspaces = workspacesInTeam[teamId]; // Hole die Liste der Arbeitsbereiche für das Team + const workspaces = workspacesInTeam[teamId]; for (const workspace of workspaces) { if (parseInt(workspace.id) === currentWorkspace) { matchingObject = workspace; - break; // Verlasse die Schleife, sobald ein Treffer gefunden wurde + break; } } if (matchingObject) { - break; // Verlasse die äußere Schleife, sobald ein Treffer gefunden wurde + break; } } cache.update("codesphere.currentconnectedWorkspace", matchingObject); - // Check if the workspace exists before using it if (matchingObject) { this._view?.webview.postMessage({ type: "overviewData", @@ -152,7 +149,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { let instanceURL: string = cache.get("codesphere.instanceURL") as string; instanceURL = instanceURL.replace(/^https?:\/\//, ''); instanceURL = instanceURL.replace(/\/$/, ''); - console.log(`instanceURL: ${instanceURL}`); webviewView.webview.onDidReceiveMessage(async (data) => { let socket: any; @@ -164,13 +160,11 @@ export class SidebarProvider implements vscode.WebviewViewProvider { case "testConnection": { try { const accessToken = await cache.get("codesphere.accessTokenCache") as string; - console.log('accessToken', accessToken); instanceURL = cache.get("codesphere.instanceURL") as string; instanceURL = instanceURL.replace(/^https?:\/\//, ''); instanceURL = instanceURL.replace(/\/$/, ''); const url = `https://${instanceURL}/team-service/listTeams`; - console.log('url12345', url); const response = await axios.post(url, {}, { headers: { @@ -179,7 +173,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { timeout: 5000 }); - console.log('response', JSON.stringify(response.data)); if (response.data.code === "Ok") { console.log("Token is valid"); } else { @@ -212,7 +205,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { await request(uaSocket, "terminalSessionsStream", { workspaceId: workspaceId }, "terminalSessionsStream", 2); - // Warte auf die Antwort des vorherigen Requests und extrahiere den tmuxSessionName const terminalSessionsResponse = await request(uaSocket, "createTmuxSession", { workspaceId: workspaceId }, "workspace-proxy", 3); const tmuxSessionName = terminalSessionsResponse.data.name; @@ -330,7 +322,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { isVSIXWorkspace.then((vsixState: boolean) => { workspaceDev = vsixState; - console.log('workspaceDev', workspaceDev); delay(100); if (!workspaceDev) { request(uaSocket, "terminalStream", { method: "data", data: "./.codesphere-internal/code tunnel --install-extension Codesphere.codesphere" +"\r"}, "workspace-proxy", 4); @@ -505,7 +496,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { break; } - // Verwendung der Funktion signIn case "startCiStage": { if (!data.value) { return; @@ -586,9 +576,7 @@ export class SidebarProvider implements vscode.WebviewViewProvider { await this.extensionContext.secrets.store("codesphere.accessToken", accessToken); cache.update("codesphere.accessTokenCache", accessToken); - - console.log('accessTokentesti', accessToken); - + // TODO: replace this call to the onMount function in webview to ensure, that all data get fetched when open the webview // right now the data might be in an old state when opening the webview when already signed in await reloadCache(accessToken, instanceURL as string, (error, teams, workspaces, userData) => { @@ -596,10 +584,9 @@ export class SidebarProvider implements vscode.WebviewViewProvider { vscode.window.showErrorMessage('An error occurred while reloading cache: ' + error.message); return; } - // TODO: add functionality to add custom workspace subdomain + add domain if available to workspace - // add two key to the json object: 'subdomain' and 'domain'. subdomain must be constructed with workspaceID and base subdomain. + // TODO: add connected domain of workspace if exists // domain must be fetched from /deployment-service websocket method: listDomainsByTeams - // this might be added to the + // and then added to the right workspace object cache.update("codesphere.workspaces", workspaces); cache.update("codesphere.userData", userData); cache.update("codesphere.teams", teams); @@ -631,7 +618,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { return; } - console.log(`stdout: ${stdout}`); }); exec(gitBashName, (error, stdout, stderr) => { @@ -645,7 +631,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { return; } - console.log(`stdout: ${stdout}`); }); webviewView.webview.html = this._getHtmlForWebviewAfterSignIn(webviewView.webview); @@ -778,7 +763,6 @@ export class SidebarProvider implements vscode.WebviewViewProvider { if (!data.value) { return; } - // todo: check wether it is mandatory to erease the currentWorkspace context. I dont think so but at the moment i dont want to destroy anything webviewView.webview.html = this._getHtmlForWebviewAfterSignIn(webviewView.webview); vscode.commands.executeCommand('setContext', 'codesphere.currentWorkspace', ""); vscode.commands.executeCommand('setContext', 'codesphere.workspaceOverview', ''); diff --git a/src/extension.ts b/src/extension.ts index e2caca6..7473360 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -18,39 +18,15 @@ function getWorkspaceRootPath(): string { export function activate(context: vscode.ExtensionContext) { - - const config = vscode.workspace.getConfiguration('remote.tunnels'); - - // Beispielhafte Einstellungen abrufen und anzeigen - const portMappings = config.get('portMappings'); - const auth = config.get('auth'); - const connectionTimeout = config.get('connectionTimeout'); - - console.log('portMappings: ', portMappings); - console.log('auth: ', auth); - console.log('connectionTimeout: ', connectionTimeout); + const rootPath: string = getWorkspaceRootPath(); const sidebarProvider = new SidebarProvider(context.extensionUri, context); const noCurrentWorkspaceProvider = new NoCurrentWorkspaceProvider(context.extensionUri); - const rootPath: string = getWorkspaceRootPath(); const fileTreeProvider = new FileTreeProvider(rootPath); - console.log('roothPath is: ', rootPath); const ciPipelineProvider = new CiPipelineProvider(context.extensionUri, context); - const remoteName = vscode.env.remoteName; - console.log('remote name ' + remoteName); - - const appHost = vscode.env.appHost; - console.log('app host ' + appHost); - - const activeSSH = vscode.env.sessionId; - console.log('active tunnel ' + activeSSH); - - const machineId = vscode.env.machineId; - console.log('machine id ' + machineId); - - console.log('config ' + JSON.stringify(config)); - + //TODO: the line below disables vscode to remember the last opened windows. + // change it that it only disables it inside remote tunnels vscode.workspace.getConfiguration('window').update('restoreWindows', 'none', vscode.ConfigurationTarget.Global); context.subscriptions.push( @@ -105,7 +81,6 @@ export function activate(context: vscode.ExtensionContext) { const gitBashName = `git config --global user.name "${gitFirstName} ${gitLastName}"`; let workspaceId: string = ""; - // prüfen ob man sich in einem remote tunnmel befindet. Wenn ja dann wird der ordner angepasst. exec (bashcommand, (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); @@ -117,7 +92,6 @@ export function activate(context: vscode.ExtensionContext) { return; } - console.log(`stdout: ${stdout}`); workspaceId = stdout ? stdout.trim() : ``; context.globalState.update("codesphere.currentWorkspace", workspaceId); @@ -141,7 +115,6 @@ export function activate(context: vscode.ExtensionContext) { return; } - console.log(`stdout: ${stdout}`); }); exec (gitBashName, (error, stdout, stderr) => { @@ -155,7 +128,6 @@ export function activate(context: vscode.ExtensionContext) { return; } - console.log(`stdout: ${stdout}`); }); if (!rootPath) { @@ -258,5 +230,5 @@ export function activate(context: vscode.ExtensionContext) { // This method is called when your extension is deactivated export function deactivate() { - + } \ No newline at end of file diff --git a/src/ts/authentication.ts b/src/ts/authentication.ts index 0f29b0a..6365bff 100644 --- a/src/ts/authentication.ts +++ b/src/ts/authentication.ts @@ -1,7 +1,6 @@ import axios from "axios"; import * as vscode from "vscode"; -// Funktion zum Anmelden export function signIn(email: string, password: string, instanceURL: string): Promise { const signInUrl = `${instanceURL}/auth-service/signIn`; @@ -16,23 +15,22 @@ export function signIn(email: string, password: string, instanceURL: string): Pr .then(response => { const { data, status } = response; if (status === 200) { - console.log('body', data); if (data.code === "Error") { - throw new Error(data.errMessage); // Fehler werfen + throw new Error(data.errMessage); } - return data.data.sessionId; // sessionId zurückgeben + return data.data.sessionId; } else { console.log('error3', response); - throw new Error(response.statusText); // Fehler werfen + throw new Error(response.statusText); } }) .catch(error => { console.log('error1', error); - throw error; // Fehler weiterwerfen + throw error; }); } -// Funktion zum Generieren des Access Tokens + export function genAccessToken(sessionId: string, instanceURL: string, callback: (error: any, accessToken?: string) => void) { const genAccessTokenUrl = `${instanceURL}/auth-service/genAccessToken`; @@ -44,9 +42,8 @@ export function genAccessToken(sessionId: string, instanceURL: string, callback: .then(response => { const { data, status } = response; if (status === 200) { - console.log('body', data); const accessToken = data.data.accessToken; - callback(null, accessToken); // accessToken an die Callback-Funktion übergeben + callback(null, accessToken); } else { vscode.window.showErrorMessage('Failed to generate access token: ' + data.errMessage); callback(new Error(data.errMessage)); @@ -54,7 +51,7 @@ export function genAccessToken(sessionId: string, instanceURL: string, callback: }) .catch(error => { console.log('error', error); - callback(error); // Fehler an die Callback-Funktion übergeben + callback(error); vscode.window.showErrorMessage('An error occurred while generating access token: ' + error.message); }); } diff --git a/src/ts/readBash.ts b/src/ts/readBash.ts index c60876b..eab4bb8 100644 --- a/src/ts/readBash.ts +++ b/src/ts/readBash.ts @@ -1,9 +1,8 @@ const fs = require('fs'); -// Funktion zum Lesen des Inhalts der Datei + export function readBashFile(filePath: string): string { try { - // Dateiinhalt lesen const content = fs.readFileSync(filePath, 'utf-8'); return content; } catch (err) { diff --git a/src/ts/sanatizeWorkspaceNames.ts b/src/ts/sanatizeWorkspaceNames.ts index a42dea7..d13cf77 100644 --- a/src/ts/sanatizeWorkspaceNames.ts +++ b/src/ts/sanatizeWorkspaceNames.ts @@ -1,19 +1,19 @@ -// Funktion, um alle Buchstaben in Kleinbuchstaben umzuwandeln +// convert all characters to lowercase function toLowerCaseLetters(str: string) { return str.replace(/[A-Z]/g, (char) => char.toLowerCase()); } -// Funktion zum Bereinigen und Umwandeln des Workspace-Namens +// function to sanitize the workspace name export function sanitizeWorkspaceName(workspaceName: string) { - // Entferne alle Zeichen außer Buchstaben, Zahlen und Bindestrichen + // remove all characters that are not letters, numbers or hyphens let sanitized = workspaceName.replace(/[^a-zA-Z0-9-]/g, '-'); - // Entferne eventuelle Doppel-Bindestriche + // remove multiple hyphens sanitized = sanitized.replace(/-{2,}/g, '-'); - // Entferne Bindestriche am Anfang und Ende + // remove leading and trailing hyphens sanitized = sanitized.replace(/^-+|-+$/g, ''); - // Begrenze auf die ersten 20 Zeichen + // limit the length to 20 characters sanitized = sanitized.substring(0, 19); - // Mache alle Buchstaben zu Kleinbuchstaben - sanitized = toLowerCaseLetters(sanitized); // Hier werden nur Buchstaben zu Kleinbuchstaben umgewandelt + // convert all characters to lowercase + sanitized = toLowerCaseLetters(sanitized); return sanitized; } \ No newline at end of file diff --git a/src/ts/userDataRequests.ts b/src/ts/userDataRequests.ts index 9533f1c..8537f16 100644 --- a/src/ts/userDataRequests.ts +++ b/src/ts/userDataRequests.ts @@ -6,7 +6,6 @@ const { setupWs, getSubdomainStructure } = require('./wsService'); -// Diese Funktion sendet einen POST-Request an die API, um die Teams abzurufen export async function listTeams(accessToken: string, instanceURL: string): Promise { try { const response = await axios.post(`${instanceURL}/team-service/listTeams`, {}, { @@ -16,7 +15,6 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi }); if (response.data.code === "Ok") { - console.log("test teams"); return response.data.data; } else { throw new Error(`Fehler beim Abrufen der Teams: ${response.data.errMessage}`); @@ -38,7 +36,6 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi for (const team of teams) { if (!socket || socketURL !== `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`) { socketURL = `wss://${team.defaultDataCenterId}.${strippedURL}/ide-service`; - console.log(`Socket URL: ${socketURL}`); socket = await setupWs(new wsLib.WebSocket(socketURL), "ide-service", accessToken); uaSocket = getUaSocket(); } @@ -57,7 +54,6 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi await request(uaSocket, "getBrowserConfig", {}, "ide-service", endpointId); const subDomainStructure = await structure; - console.log(`Subdomain structure: ${subDomainStructure}`); const enrichedData = response.data.data.map((workspace: any) => ({ ...workspace, @@ -70,7 +66,6 @@ export async function listTeams(accessToken: string, instanceURL: string): Promi throw new Error(`Fehler beim Abrufen der Workspaces für Team ${team.id}: ${response.data.errMessage}`); } } - console.log(`${JSON.stringify(workspaceMap)}`); return workspaceMap; } catch (error) { throw new Error(`Fehler beim Abrufen der Workspaces: ${error}`); @@ -91,7 +86,6 @@ export async function getUserData(accessToken: string, instanceURL: string): Pro } let userData = userResponse.data.data; - console.log(`Userdaten: ${JSON.stringify(userData)}`); const avatarResponse = await axios.post(`${instanceURL}/auth-service/getAvatarURL`, [userData.userId], { headers: { @@ -103,15 +97,12 @@ export async function getUserData(accessToken: string, instanceURL: string): Pro throw new Error(`Fehler beim Abrufen des Avatars: ${avatarResponse.data.errMessage}`); } - // const avatarURL = avatarResponse.data.avatarURL; - console.log(`Avatar URL: ${JSON.stringify(avatarResponse.data.data[0])}`); userData = { ...userData, avatarURL: avatarResponse.data.data[0] }; - console.log(`Userdaten mit Avatar: ${JSON.stringify(userData)}`); return userData; } catch (error) { diff --git a/src/ts/wsService.ts b/src/ts/wsService.ts index 6ee23bd..d80c95a 100644 --- a/src/ts/wsService.ts +++ b/src/ts/wsService.ts @@ -38,10 +38,9 @@ const setupWs = (ws: any, name: string, accessToken: undefined, cache?:any, work console.log(name + ' websocket opened successfully'); if (name === "workspace-proxy") { - uaSocket = ws; // Update the reference to the current WebSocket for "user-activity" + uaSocket = ws; } - // send authentication message to authenticate the websocket ws.send(JSON.stringify({ method: "setClientContext", endpointId: 1, @@ -55,10 +54,9 @@ const setupWs = (ws: any, name: string, accessToken: undefined, cache?:any, work })); if (name === "deployment-service") { - uaSocket = ws; // Update the reference to the current WebSocket for "user-activity" + uaSocket = ws; } - // send authentication message to authenticate the websocket ws.send(JSON.stringify({ method: "setClientContext", endpointId: 1, @@ -72,10 +70,9 @@ const setupWs = (ws: any, name: string, accessToken: undefined, cache?:any, work })); if (name === "ide-service") { - uaSocket = ws; // Update the reference to the current WebSocket for "user-activity" + uaSocket = ws; } - // send authentication message to authenticate the websocket ws.send(JSON.stringify({ method: "setClientContext", endpointId: 1, @@ -144,7 +141,6 @@ const request = (ws: any, method: any, args: any, name: any, wsId: any) => { const waitForWorkspaceRunning = async (deploymentSocket: any, cache: any, workspaceID: any) => { return new Promise((resolve, reject) => { - // Handler für Nachrichten const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes("and use code")) { @@ -153,20 +149,17 @@ const waitForWorkspaceRunning = async (deploymentSocket: any, cache: any, worksp if (codeMatch && codeMatch.length > 1) { const extractedCode = codeMatch[1]; cache.update(`codesphere.lastCode${workspaceID}`, extractedCode); - // Wenn der Code extrahiert wurde, erfülle die Promise und entferne den Handler resolve(extractedCode); - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten + deploymentSocket.off("message", nexLogHandler); } } }; - // Handler für Fehler const errorHandler = (err: any) => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -174,30 +167,27 @@ const waitForWorkspaceRunning = async (deploymentSocket: any, cache: any, worksp const doesTunnelAlreadyExist = async (deploymentSocket: any, cache: any, workspaceID: any) => { return new Promise((resolve, reject) => { - // Handler für Nachrichten const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes("How would you like to log in to Visual Studio Code?")) { resolve('not found'); - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten + deploymentSocket.off("message", nexLogHandler); } if (msgTest.includes("Connected to an existing tunnel process running on this machine.")) { resolve('found'); - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten + deploymentSocket.off("message", nexLogHandler); } if (msgTest.includes("Open this link in your browser")) { resolve('found-nopid'); - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten + deploymentSocket.off("message", nexLogHandler); } }; - // Handler für Fehler const errorHandler = (err: any) => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -208,16 +198,14 @@ const giveWorkspaceName = async (deploymentSocket: any) => { const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes("What would you like to call this machine?")) { - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten - resolve(); // Kein Argument erforderlich + deploymentSocket.off("message", nexLogHandler); + resolve(); } }; - // Handler für Fehler const errorHandler = (err: any) => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -228,16 +216,14 @@ const serverIsUp = async (deploymentSocket: any, cache: any, workspaceName:any, const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes(`Creating tunnel with the name: ${workspaceName}`)) { - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten - resolve(); // Kein Argument erforderlich + deploymentSocket.off("message", nexLogHandler); + resolve(); } }; - // Handler für Fehler const errorHandler = (err: any) => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -248,16 +234,14 @@ const afterTunnelInit = async (deploymentSocket: any, workspaceName: any) => { const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes(`Open this link in your browser https://vscode.dev/tunnel/${workspaceName}/home/user/app`)) { - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten - resolve(); // Kein Argument erforderlich + deploymentSocket.off("message", nexLogHandler); + resolve(); } }; - // Handler für Fehler const errorHandler = (err: any): void => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -268,16 +252,15 @@ const tunnelIsReady = async (deploymentSocket: any) => { const nexLogHandler = (msg: any) => { const msgTest = msg.toString(); if (msgTest.includes(`Extension install complete`)) { - deploymentSocket.off("message", nexLogHandler); // Entferne den Handler für zukünftige Nachrichten - resolve(); // Kein Argument erforderlich + deploymentSocket.off("message", nexLogHandler); + resolve(); } }; - // Handler für Fehler + const errorHandler = (err: any): void => { console.log("Socket exited with error:" + err); reject(err); }; - // Hinzufügen von Nachrichten- und Fehlerhandlern deploymentSocket.on("message", nexLogHandler); deploymentSocket.on("error", errorHandler); }); @@ -319,7 +302,6 @@ const getPidFromServer = async (deploymentSocket: any) => { const pidMatch = msgTest.match(pidRegex); if (pidMatch && pidMatch.length > 1) { const extractedPid = pidMatch[1]; - console.log("Extracted PID: " + extractedPid); resolve(extractedPid); deploymentSocket.off("message", nexLogHandler); } @@ -402,7 +384,6 @@ const checkCiPipelineState = async (deploymentSocket: any, endpointId: number) = let parsedMsg = JSON.parse(msgTest); if (msgTest.includes(`"endpointId":${endpointId}`)) { - console.log(`tests14` + msgTest) deploymentSocket.off("message", nexLogHandler); deploymentSocket.off("error", errorHandler); resolve(parsedMsg.reply); @@ -522,7 +503,6 @@ const checkCiPipelineStructure = async (deploymentSocket: any, endpointId: numbe let parsedMsg = JSON.parse(msgTest); if (msgTest.includes(`"endpointId":${endpointId}`)) { - console.log(`ci-Structure` + msgTest) deploymentSocket.off("message", nexLogHandler); deploymentSocket.off("error", errorHandler); resolve(parsedMsg.reply); @@ -596,7 +576,6 @@ const ciStageStatusHandler = async (deploymentSocket: any, endpointId: number, p let parsedMsg = JSON.parse(msgTest); if (msgTest.includes(`"endpointId":${endpointId}`)) { - // ci-pipeline has finished successfully if (parsedMsg.reply.state === "success") { deploymentSocket.off("message", ciStageStatus); @@ -615,7 +594,6 @@ const ciStageStatusHandler = async (deploymentSocket: any, endpointId: number, p } resolve('success'); } - // ci-pipeline has failed if (parsedMsg.reply.state === "failure" || parsedMsg.reply.state === 'aborted') { deploymentSocket.off("message", ciStageStatus); deploymentSocket.off("error", errorHandler); @@ -634,8 +612,6 @@ const ciStageStatusHandler = async (deploymentSocket: any, endpointId: number, p } resolve('failure'); } - // ci-pipeline is still running - // return the state of each step, so the UI can be updated if (parsedMsg.reply.state === "running") { postMessage('updateCiStageStatus', {status: parsedMsg.reply.steps, stage: stage, state: parsedMsg.reply.state} ); @@ -667,7 +643,6 @@ const getSubdomainStructure = async (deploymentSocket: any, endpointId: any) => let parsedMsg = JSON.parse(msgTest); if (msgTest.includes(`"endpointId":${endpointId}`)) { let workspaceHostingBaseDomain = parsedMsg.reply.data.workspaceHostingBaseDomain; - console.log(`subdomain-Structure` + JSON.stringify(parsedMsg.reply.data.workspaceHostingBaseDomain)); resolve(workspaceHostingBaseDomain); deploymentSocket.off("message", nexLogHandler); } diff --git a/webviews/components/CiPipeline.svelte b/webviews/components/CiPipeline.svelte index 3a9ceee..6f9336f 100644 --- a/webviews/components/CiPipeline.svelte +++ b/webviews/components/CiPipeline.svelte @@ -146,9 +146,6 @@ case 'CIPipelineStages': CIArray = JSON.parse(message.value.CIArray); - console.log(CIArray.prepare); - console.log(CIArray.test); - console.log(CIArray.run); prepareStageSteps = CIArray.prepare.steps; testStageSteps = CIArray.test.steps; runStageSteps = CIArray.run.steps; diff --git a/webviews/components/Codesphere.svelte b/webviews/components/Codesphere.svelte index 28759f0..7880c38 100644 --- a/webviews/components/Codesphere.svelte +++ b/webviews/components/Codesphere.svelte @@ -87,7 +87,6 @@ case 'listTeams': teamArray = JSON.parse(message.value); teamArray = [...teamArray]; - console.log('supsup' + teamArray); break; case 'getWorkspaces': workspaceArray = JSON.parse(message.value); @@ -103,7 +102,6 @@ workspaceToConnect = [...workspaceToConnect, message.value.state]; break; case 'is connected': - // define code which will affect the DOM depending on the message activeWorkspaces = message.value.activeTunnels; activeWorkspaces = {...activeWorkspaces}; @@ -206,8 +204,8 @@ .workspace { cursor: pointer; - display: flex; /* Flexbox verwenden */ - align-items: center; /* Vertikal zentrieren */ + display: flex; + align-items: center; transition: color .2s; } @@ -294,7 +292,6 @@ {#if workspaceArray[team.id]} {#each workspaceArray[team.id] as workspace}
-
openOverview(workspace.id, team.id) } role="presentation">

diff --git a/webviews/components/Overview.svelte b/webviews/components/Overview.svelte index 8fe40cb..ba1ad5d 100644 --- a/webviews/components/Overview.svelte +++ b/webviews/components/Overview.svelte @@ -192,7 +192,6 @@ } function gitPull(workspaceId, dscId) { - console.log('gitPull') vscode.postMessage({ type: 'gitPull', value: { @@ -245,11 +244,7 @@ creatingTunnel = false; break; case 'connectedWorkspace': - console.log(`is it connected?1${message.value}`) - console.log(`is it connected?2${overviewData.workspace.id}`) - console.log(`is it connected?3${parseInt(message.value) === overviewData.workspace.id}`) if (parseInt(message.value) === parseInt(overviewData.workspace.id)) { - console.log(`is it connected? ${message.value === overviewData.workspace.id}`) connectedWorkspace = true; vscode.postMessage({ type: 'getActiveWorkspaces', @@ -259,7 +254,6 @@ } break; case 'activeWorkspaces': - console.log(JSON.stringify(message.value) + ' tests123') if (message.value[overviewData.workspace.id]) { activeWorkspace = true; } diff --git a/webviews/components/Sidebar.svelte b/webviews/components/Sidebar.svelte index 83846c5..3a49e1d 100644 --- a/webviews/components/Sidebar.svelte +++ b/webviews/components/Sidebar.svelte @@ -1,11 +1,12 @@ -