From bddd8422c6a9d8d09a8254dfca8b90a38beae75f Mon Sep 17 00:00:00 2001 From: Alex <apuret@e-biz.fr> Date: Wed, 5 Aug 2020 16:34:43 +0200 Subject: [PATCH] chore: allow cors from deadlock.io --- Dockerfile | 2 +- plugins/deadlock-extension/compile.sh | 3 +- plugins/deadlock-extension/package.json | 6 +- server.js | 76 +++++++++++++++++++++++++ webpack.config.js | 23 -------- 5 files changed, 81 insertions(+), 29 deletions(-) create mode 100644 server.js delete mode 100644 webpack.config.js diff --git a/Dockerfile b/Dockerfile index c47075b0..b0a3e1ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM theiaide/theia-java:1.3.0 -COPY webpack.config.js /home/theia/webpack.config.js COPY plugins /home/plugins +COPY server.js /home/theia/src-gen/backend/server.js ENTRYPOINT [ "yarn", "theia", "start", "/home/project", "--hostname=0.0.0.0", "--plugins=local-dir:/home/plugins"] diff --git a/plugins/deadlock-extension/compile.sh b/plugins/deadlock-extension/compile.sh index 5ae383ef..049d9f38 100755 --- a/plugins/deadlock-extension/compile.sh +++ b/plugins/deadlock-extension/compile.sh @@ -3,7 +3,8 @@ cd front/ yarn install yarn build +rm node_modules -rf cd - cp front/build/static/bundle.js media/static/bundle.js cp front/build/static/bundle.css media/static/bundle.css -cp front/build/manifest.json media/ \ No newline at end of file +cp front/build/manifest.json media/ diff --git a/plugins/deadlock-extension/package.json b/plugins/deadlock-extension/package.json index f1cb9630..18259afb 100644 --- a/plugins/deadlock-extension/package.json +++ b/plugins/deadlock-extension/package.json @@ -49,10 +49,8 @@ ] }, "menus": { - "view/title": [ - ], - "view/item/context": [ - ] + "view/title": [], + "view/item/context": [] } }, "scripts": { diff --git a/server.js b/server.js new file mode 100644 index 00000000..2a76f0a1 --- /dev/null +++ b/server.js @@ -0,0 +1,76 @@ +// @ts-check +require('reflect-metadata'); + +// Patch electron version if missing, see https://github.com/eclipse-theia/theia/pull/7361#pullrequestreview-377065146 +if (typeof process.versions.electron === 'undefined' && typeof process.env.THEIA_ELECTRON_VERSION === 'string') { + process.versions.electron = process.env.THEIA_ELECTRON_VERSION; +} + +const path = require('path'); +const express = require('express'); +const { Container } = require('inversify'); +const { BackendApplication, CliManager } = require('@theia/core/lib/node'); +const { backendApplicationModule } = require('@theia/core/lib/node/backend-application-module'); +const { messagingBackendModule } = require('@theia/core/lib/node/messaging/messaging-backend-module'); +const { loggerBackendModule } = require('@theia/core/lib/node/logger-backend-module'); + +const container = new Container(); +container.load(backendApplicationModule); +container.load(messagingBackendModule); +container.load(loggerBackendModule); + +//CORS middleware +const allowCrossDomain = function (req, res, next) { + if (req.headers.origin.endsWith('.deadlock.io')) { + res.setHeader('Access-Control-Allow-Origin', req.headers.origin); + res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE'); + } + next(); +}; + +function load(raw) { + return Promise.resolve(raw.default).then(module => + container.load(module) + ) +} + +function start(port, host, argv) { + if (argv === undefined) { + argv = process.argv; + } + + const cliManager = container.get(CliManager); + return cliManager.initializeCli(argv).then(function () { + const application = container.get(BackendApplication); + application.use(allowCrossDomain); + application.use(express.static(path.join(__dirname, '../../lib'))); + application.use(express.static(path.join(__dirname, '../../lib/index.html'))); + return application.start(port, host); + }); +} + +module.exports = (port, host, argv) => Promise.resolve() + .then(function () { return Promise.resolve(require('@theia/process/lib/common/process-common-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/process/lib/node/process-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/filesystem/lib/node/filesystem-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/filesystem/lib/node/download/file-download-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/workspace/lib/node/workspace-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/languages/lib/node/languages-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/file-search/lib/node/file-search-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/git/lib/node/git-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/git/lib/node/env/git-env-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/json/lib/node/json-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/terminal/lib/node/terminal-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/task/lib/node/task-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/debug/lib/node/debug-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/search-in-workspace/lib/node/search-in-workspace-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/plugin-ext/lib/plugin-ext-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/plugin-ext-vscode/lib/node/plugin-vscode-backend-module')).then(load) }) + .then(function () { return Promise.resolve(require('@theia/vsx-registry/lib/node/vsx-registry-backend-module')).then(load) }) + .then(() => start(port, host, argv)).catch(reason => { + console.error('Failed to start the backend application.'); + if (reason) { + console.error(reason); + } + throw reason; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 1b706078..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This file can be edited to customize webpack configuration. - * To reset delete this file and rerun theia build again. - */ -// @ts-check -const config = require('./gen-webpack.config.js'); - -config.devServer: { - headers: { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", - "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization" - } -} - -/** - * Expose bundled modules on window.theia.moduleName namespace, e.g. - * window['theia']['@theia/core/lib/common/uri']. - * Such syntax can be used by external code, for instance, for testing. -config.module.rules.push({ - test: /\.js$/, - loader: require.resolve('@theia/application-manager/lib/expose-loader') -}); */ -- GitLab