diff --git a/x-pack/legacy/plugins/code/index.ts b/x-pack/legacy/plugins/code/index.ts index 0c16c7e28602e..fe205175245b4 100644 --- a/x-pack/legacy/plugins/code/index.ts +++ b/x-pack/legacy/plugins/code/index.ts @@ -12,9 +12,9 @@ import { resolve } from 'path'; import { CoreSetup, PluginInitializerContext } from 'src/core/server'; import { APP_TITLE } from './common/constants'; -import { LanguageServers, LanguageServersDeveloping } from './server/lsp/language_servers'; import { codePlugin } from './server'; import { DEFAULT_WATERMARK_LOW_PERCENTAGE } from './server/disk_watermark'; +import { LanguageServers, LanguageServersDeveloping } from './server/lsp/language_servers'; export type RequestFacade = Legacy.Request; export type RequestQueryFacade = RequestQuery; @@ -88,6 +88,7 @@ export const code = (kibana: any) => security: Joi.object({ enableMavenImport: Joi.boolean().default(true), enableGradleImport: Joi.boolean().default(false), + installGoDependency: Joi.boolean().default(false), installNodeDependency: Joi.boolean().default(true), gitHostWhitelist: Joi.array() .items(Joi.string()) diff --git a/x-pack/legacy/plugins/code/server/lsp/go_launcher.ts b/x-pack/legacy/plugins/code/server/lsp/go_launcher.ts index 0b4e2991f28a4..c5333185a200b 100644 --- a/x-pack/legacy/plugins/code/server/lsp/go_launcher.ts +++ b/x-pack/legacy/plugins/code/server/lsp/go_launcher.ts @@ -39,6 +39,9 @@ export class GoServerLauncher extends AbstractLauncher { maxWorkspace, this.options, { + initialOptions: { + installGoDependency: this.options.security.installGoDependency, + }, clientCapabilities: { textDocument: { hover: { @@ -94,6 +97,14 @@ export class GoServerLauncher extends AbstractLauncher { if (!fs.existsSync(goPath)) { fs.mkdirSync(goPath); } + let go111MODULE = 'off'; + if (this.options.security.installGoDependency) { + // There are no proper approaches to disable downloading go dependencies except creating inconsistencies of the + // running environments of go-langserver. Given that go language server will do its best to convert the repos + // into modules, one of the doable approaches is setting 'GO111MODULE' to false to be incompatible with the + // moduled repos. + go111MODULE = 'on'; + } const params: string[] = ['-port=' + port.toString()]; const golsp = path.resolve(installationPath, launchersFound[0]); @@ -107,7 +118,7 @@ export class GoServerLauncher extends AbstractLauncher { GOROOT: goRoot, GOPATH: goPath, PATH: envPath, - GO111MODULE: 'on', + GO111MODULE: go111MODULE, CGO_ENABLED: '0', }, }); diff --git a/x-pack/legacy/plugins/code/server/server_options.ts b/x-pack/legacy/plugins/code/server/server_options.ts index 1aa966d9d8d23..c64a9e73c4103 100644 --- a/x-pack/legacy/plugins/code/server/server_options.ts +++ b/x-pack/legacy/plugins/code/server/server_options.ts @@ -16,6 +16,7 @@ export interface LspOptions { export interface SecurityOptions { enableMavenImport: boolean; enableGradleImport: boolean; + installGoDependency: boolean; installNodeDependency: boolean; gitHostWhitelist: string[]; gitProtocolWhitelist: string[];