diff --git a/src/browser/pages/error.html b/src/browser/pages/error.html
index b3ad56757ae2..f44df0539ccb 100644
--- a/src/browser/pages/error.html
+++ b/src/browser/pages/error.html
@@ -11,7 +11,7 @@
content="style-src 'self'; manifest-src 'self'; img-src 'self' data:; font-src 'self' data:;"
/>
-
{{ERROR_TITLE}} - code-server
+ {{ERROR_TITLE}} - {{APP_NAME}}
diff --git a/src/node/cli.ts b/src/node/cli.ts
index 7e4674eaa052..8b1c9bfd7b5c 100644
--- a/src/node/cli.ts
+++ b/src/node/cli.ts
@@ -519,6 +519,7 @@ export interface DefaultedArgs extends ConfigArgs {
"extensions-dir": string
"user-data-dir": string
"session-socket": string
+ "app-name": string
/* Positional arguments. */
_: string[]
}
@@ -665,6 +666,10 @@ export async function setDefaults(cliArgs: UserProvidedArgs, configArgs?: Config
}
args["proxy-domain"] = finalProxies
+ if (!args["app-name"]) {
+ args["app-name"] = "code-server"
+ }
+
args._ = getResolvedPathsFromArgs(args)
return {
diff --git a/src/node/routes/errors.ts b/src/node/routes/errors.ts
index c1439d6adedc..47286210afe8 100644
--- a/src/node/routes/errors.ts
+++ b/src/node/routes/errors.ts
@@ -57,7 +57,8 @@ export const errorHandler: express.ErrorRequestHandler = async (err, req, res, n
replaceTemplates(req, content)
.replace(/{{ERROR_TITLE}}/g, statusCode.toString())
.replace(/{{ERROR_HEADER}}/g, statusCode.toString())
- .replace(/{{ERROR_BODY}}/g, escapeHtml(err.message)),
+ .replace(/{{ERROR_BODY}}/g, escapeHtml(err.message))
+ .replace(/{{APP_NAME}}/g, req.args["app-name"]),
)
} else {
res.json({
diff --git a/src/node/routes/login.ts b/src/node/routes/login.ts
index db4d1c45dbb3..6d9f33161c61 100644
--- a/src/node/routes/login.ts
+++ b/src/node/routes/login.ts
@@ -29,8 +29,7 @@ const getRoot = async (req: Request, error?: Error): Promise => {
const content = await fs.readFile(path.join(rootPath, "src/browser/pages/login.html"), "utf8")
const locale = req.args["locale"] || "en"
i18n.changeLanguage(locale)
- const appName = req.args["app-name"] || "code-server"
- const welcomeText = req.args["welcome-text"] || (i18n.t("WELCOME", { app: appName }) as string)
+ const welcomeText = req.args["welcome-text"] || (i18n.t("WELCOME", { app: req.args["app-name"] }) as string)
// Determine password message using i18n
let passwordMsg = i18n.t("LOGIN_PASSWORD", { configFile: req.args.config })
@@ -43,7 +42,7 @@ const getRoot = async (req: Request, error?: Error): Promise => {
return replaceTemplates(
req,
content
- .replace(/{{I18N_LOGIN_TITLE}}/g, i18n.t("LOGIN_TITLE", { app: appName }))
+ .replace(/{{I18N_LOGIN_TITLE}}/g, i18n.t("LOGIN_TITLE", { app: req.args["app-name"] }))
.replace(/{{WELCOME_TEXT}}/g, welcomeText)
.replace(/{{PASSWORD_MSG}}/g, passwordMsg)
.replace(/{{I18N_LOGIN_BELOW}}/g, i18n.t("LOGIN_BELOW"))
diff --git a/src/node/routes/vscode.ts b/src/node/routes/vscode.ts
index 33d1287a7892..3ff64a179604 100644
--- a/src/node/routes/vscode.ts
+++ b/src/node/routes/vscode.ts
@@ -172,7 +172,6 @@ router.get("/", ensureVSCodeLoaded, async (req, res, next) => {
})
router.get("/manifest.json", async (req, res) => {
- const appName = req.args["app-name"] || "code-server"
res.writeHead(200, { "Content-Type": "application/manifest+json" })
res.end(
@@ -180,8 +179,8 @@ router.get("/manifest.json", async (req, res) => {
req,
JSON.stringify(
{
- name: appName,
- short_name: appName,
+ name: req.args["app-name"],
+ short_name: req.args["app-name"],
start_url: ".",
display: "fullscreen",
display_override: ["window-controls-overlay"],
diff --git a/test/unit/node/cli.test.ts b/test/unit/node/cli.test.ts
index 668a3c55776c..44a0bd1c71a0 100644
--- a/test/unit/node/cli.test.ts
+++ b/test/unit/node/cli.test.ts
@@ -38,6 +38,7 @@ const defaults = {
"extensions-dir": path.join(paths.data, "extensions"),
"user-data-dir": paths.data,
"session-socket": path.join(paths.data, "code-server-ipc.sock"),
+ "app-name": "code-server",
_: [],
}
diff --git a/test/unit/node/routes/errors.test.ts b/test/unit/node/routes/errors.test.ts
index ffa8f479111c..94657abf9f92 100644
--- a/test/unit/node/routes/errors.test.ts
+++ b/test/unit/node/routes/errors.test.ts
@@ -1,4 +1,5 @@
import express from "express"
+import { UserProvidedArgs, setDefaults } from "../../../../src/node/cli"
import { errorHandler } from "../../../../src/node/routes/errors"
describe("error page is rendered for text/html requests", () => {
@@ -9,7 +10,7 @@ describe("error page is rendered for text/html requests", () => {
statusCode: 404,
message: ";>hello",
}
- const req = createRequest()
+ const req = await createRequest()
const res = {
status: jest.fn().mockReturnValue(this),
send: jest.fn().mockReturnValue(this),
@@ -20,9 +21,41 @@ describe("error page is rendered for text/html requests", () => {
expect(res.status).toHaveBeenCalledWith(404)
expect(res.send).toHaveBeenCalledWith(expect.not.stringContaining("