Delegate authentication to plugins

Unfortunately since plugins can now override the root this is necessary
or just can't log in.
This commit is contained in:
Asher 2021-02-12 16:49:47 -06:00
parent c2450d6bf3
commit 3fc556d4d5
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
2 changed files with 17 additions and 5 deletions

View File

@ -6,7 +6,7 @@ import * as semver from "semver"
import * as pluginapi from "../../typings/pluginapi"
import { HttpCode, HttpError } from "../common/http"
import { version } from "./constants"
import { ensureAuthenticated, replaceTemplates } from "./http"
import { authenticated, ensureAuthenticated, replaceTemplates } from "./http"
import { proxy } from "./proxy"
import * as util from "./util"
import { Router as WsRouter, WebsocketRouter, wss } from "./wsRouter"
@ -28,11 +28,13 @@ require("module")._load = function (request: string, parent: object, isMain: boo
* The module you get when importing "code-server".
*/
export const codeServer = {
express,
field,
HttpCode,
HttpError,
Level,
authenticated,
ensureAuthenticated,
express,
field,
proxy,
replaceTemplates,
WsRouter,
@ -122,10 +124,10 @@ export class PluginAPI {
public mount(r: express.Router, wr: express.Router): void {
for (const [, p] of this.plugins) {
if (p.router) {
r.use(`${p.routerPath}`, ensureAuthenticated, p.router())
r.use(`${p.routerPath}`, p.router())
}
if (p.wsRouter) {
wr.use(`${p.routerPath}`, ensureAuthenticated, (p.wsRouter() as WebsocketRouter).router)
wr.use(`${p.routerPath}`, (p.wsRouter() as WebsocketRouter).router)
}
}
}

View File

@ -142,6 +142,16 @@ export { field, Level, Logger }
*/
export const proxy: ProxyServer
/**
* Middleware to ensure the user is authenticated. Throws if they are not.
*/
export function ensureAuthenticated(req: express.Request, res?: express.Response, next?: express.NextFunction): void
/**
* Returns true if the user is authenticated.
*/
export function authenticated(req: express.Request): boolean
/**
* Replace variables in HTML: TO, BASE, CS_STATIC_BASE, and OPTIONS.
*/