Skip to content

Commit 3bdad9f

Browse files
committed
Make settings use --user-data-dir
Without this test instances step on each other feet and they also clobber your own non-test settings.
1 parent 8c580de commit 3bdad9f

File tree

6 files changed

+19
-20
lines changed

6 files changed

+19
-20
lines changed

src/node/http.ts

+4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { normalize } from "../common/util"
1010
import { AuthType, DefaultedArgs } from "./cli"
1111
import { version as codeServerVersion } from "./constants"
1212
import { Heart } from "./heart"
13+
import { UpdateProvider } from "./update"
14+
import { CoderSettings, SettingsProvider } from "./settings"
1315
import { getPasswordMethod, IsCookieValidArgs, isCookieValid, sanitizeString, escapeHtml, escapeJSON } from "./util"
1416

1517
/**
@@ -29,6 +31,8 @@ declare global {
2931
export interface Request {
3032
args: DefaultedArgs
3133
heart: Heart
34+
settings: SettingsProvider<CoderSettings>
35+
updater: UpdateProvider
3236
}
3337
}
3438
}

src/node/routes/index.ts

+7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { commit, rootPath } from "../constants"
1414
import { Heart } from "../heart"
1515
import { ensureAuthenticated, redirect } from "../http"
1616
import { PluginAPI } from "../plugin"
17+
import { UpdateProvider } from "../update"
18+
import { CoderSettings, SettingsProvider } from "../settings"
1719
import { getMediaMime, paths } from "../util"
1820
import * as apps from "./apps"
1921
import * as domainProxy from "./domainProxy"
@@ -47,6 +49,9 @@ export const register = async (app: App, args: DefaultedArgs): Promise<Disposabl
4749
app.router.use(cookieParser())
4850
app.wsRouter.use(cookieParser())
4951

52+
const settings = new SettingsProvider<CoderSettings>(path.join(args["user-data-dir"], "coder.json"))
53+
const updater = new UpdateProvider("https://api.github.com/repos/cdr/code-server/releases/latest", settings)
54+
5055
const common: express.RequestHandler = (req, _, next) => {
5156
// /healthz|/healthz/ needs to be excluded otherwise health checks will make
5257
// it look like code-server is always in use.
@@ -57,6 +62,8 @@ export const register = async (app: App, args: DefaultedArgs): Promise<Disposabl
5762
// Add common variables routes can use.
5863
req.args = args
5964
req.heart = heart
65+
req.settings = settings
66+
req.updater = updater
6067

6168
next()
6269
}

src/node/routes/update.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import { Router } from "express"
22
import { version } from "../constants"
33
import { ensureAuthenticated } from "../http"
4-
import { UpdateProvider } from "../update"
54

65
export const router = Router()
76

8-
const provider = new UpdateProvider()
9-
107
router.get("/check", ensureAuthenticated, async (req, res) => {
11-
const update = await provider.getUpdate(req.query.force === "true")
8+
const update = await req.updater.getUpdate(req.query.force === "true")
129
res.json({
1310
checked: update.checked,
1411
latest: update.version,
1512
current: version,
16-
isLatest: provider.isLatestVersion(update),
13+
isLatest: req.updater.isLatestVersion(update),
1714
})
1815
})

src/node/routes/vscode.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { WebsocketRequest } from "../../../typings/pluginapi"
44
import { logError } from "../../common/util"
55
import { isDevMode } from "../constants"
66
import { toVsCodeArgs } from "../cli"
7-
import { settings } from "../settings"
87
import { ensureAuthenticated, authenticated, redirect } from "../http"
98
import { loadAMDModule, readCompilationStats } from "../util"
109
import { Router as WsRouter } from "../wsRouter"
@@ -33,7 +32,7 @@ export class CodeServerRouteWrapper {
3332
}
3433

3534
// Ew means the workspace was closed so clear the last folder/workspace.
36-
const { query } = await settings.read()
35+
const { query } = await req.settings.read()
3736
if (query) {
3837
if (req.query.ew) {
3938
delete query.folder
@@ -58,7 +57,7 @@ export class CodeServerRouteWrapper {
5857

5958
// Store the query parameters so we can use them on the next load. This
6059
// also allows users to create functionality around query parameters.
61-
await settings.write({ query: req.query })
60+
await req.settings.write({ query: req.query })
6261

6362
next()
6463
}

src/node/settings.ts

-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { logger } from "@coder/logger"
22
import { Query } from "express-serve-static-core"
33
import { promises as fs } from "fs"
4-
import * as path from "path"
5-
import { paths } from "./util"
64

75
export type Settings = { [key: string]: Settings | string | boolean | number }
86

@@ -56,8 +54,3 @@ export interface UpdateSettings {
5654
export interface CoderSettings extends UpdateSettings {
5755
query?: Query
5856
}
59-
60-
/**
61-
* Global code-server settings file.
62-
*/
63-
export const settings = new SettingsProvider<CoderSettings>(path.join(paths.data, "coder.json"))

src/node/update.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as https from "https"
44
import * as semver from "semver"
55
import * as url from "url"
66
import { version } from "./constants"
7-
import { settings as globalSettings, SettingsProvider, UpdateSettings } from "./settings"
7+
import { SettingsProvider, UpdateSettings } from "./settings"
88

99
export interface Update {
1010
checked: number
@@ -27,12 +27,11 @@ export class UpdateProvider {
2727
* The URL for getting the latest version of code-server. Should return JSON
2828
* that fulfills `LatestResponse`.
2929
*/
30-
private readonly latestUrl = "https://api.github.com/repos/cdr/code-server/releases/latest",
30+
private readonly latestUrl: string,
3131
/**
32-
* Update information will be stored here. If not provided, the global
33-
* settings will be used.
32+
* Update information will be stored here.
3433
*/
35-
private readonly settings: SettingsProvider<UpdateSettings> = globalSettings,
34+
private readonly settings: SettingsProvider<UpdateSettings>,
3635
) {}
3736

3837
/**

0 commit comments

Comments
 (0)