Skip to content

Commit 677c897

Browse files
committed
feat: cli arg for file permission of socket
1 parent a989e0c commit 677c897

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

src/node/app.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { disposer } from "./http"
1111
import { isNodeJSErrnoException } from "./util"
1212
import { handleUpgrade } from "./wsRouter"
1313

14-
type ListenOptions = Pick<DefaultedArgs, "socket" | "port" | "host">
14+
type ListenOptions = Pick<DefaultedArgs, "socket-permission" | "socket" | "port" | "host">
1515

1616
export interface App extends Disposable {
1717
/** Handles regular HTTP requests. */
@@ -22,7 +22,7 @@ export interface App extends Disposable {
2222
server: http.Server
2323
}
2424

25-
const listen = (server: http.Server, { host, port, socket }: ListenOptions) => {
25+
const listen = (server: http.Server, { host, port, socket, "socket-permission": permission }: ListenOptions) => {
2626
return new Promise<void>(async (resolve, reject) => {
2727
server.on("error", reject)
2828

@@ -31,6 +31,8 @@ const listen = (server: http.Server, { host, port, socket }: ListenOptions) => {
3131
server.off("error", reject)
3232
server.on("error", (err) => util.logError(logger, "http server error", err))
3333

34+
if (socket && permission) fs.chmod(socket, permission)
35+
3436
resolve()
3537
}
3638

src/node/cli.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export interface UserProvidedArgs {
6464
open?: boolean
6565
"bind-addr"?: string
6666
socket?: string
67+
"socket-permission"?: string
6768
version?: boolean
6869
"proxy-domain"?: string[]
6970
"reuse-window"?: boolean
@@ -182,6 +183,7 @@ const options: Options<Required<UserProvidedArgs>> = {
182183
port: { type: "number", description: "" },
183184

184185
socket: { type: "string", path: true, description: "Path to a socket (bind-addr will be ignored)." },
186+
"socket-permission": { type: "string", description: "File permission of the socket." },
185187
version: { type: "boolean", short: "v", description: "Display version information." },
186188
_: { type: "string[]" },
187189

@@ -507,6 +509,7 @@ export async function setDefaults(cliArgs: UserProvidedArgs, configArgs?: Config
507509
args.host = "localhost"
508510
args.port = 0
509511
args.socket = undefined
512+
args["socket-permission"] = undefined
510513
args.cert = undefined
511514
args.auth = AuthType.None
512515
}

test/unit/node/app.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,18 @@ describe("createApp", () => {
107107
app.dispose()
108108
})
109109

110+
it("should change the file permission of a socket", async () => {
111+
const defaultArgs = await setDefaults({
112+
socket: tmpFilePath,
113+
"socket-permission": "777",
114+
})
115+
116+
const app = await createApp(defaultArgs)
117+
118+
expect((await promises.stat(tmpFilePath)).mode & 0o777).toBe(0o777)
119+
app.dispose()
120+
})
121+
110122
it("should create an https server if args.cert exists", async () => {
111123
const testCertificate = await generateCertificate("localhost")
112124
const cert = new OptionalString(testCertificate.cert)

test/unit/node/cli.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ describe("parser", () => {
7373

7474
"--socket=mumble",
7575

76+
"--socket-permission=777",
77+
7678
"3",
7779

7880
["--user-data-dir", "path/to/user/dir"],
@@ -110,6 +112,7 @@ describe("parser", () => {
110112
open: true,
111113
port: 8081,
112114
socket: path.resolve("mumble"),
115+
"socket-permission": "777",
113116
verbose: true,
114117
version: true,
115118
"bind-addr": "192.169.0.1:8080",
@@ -269,7 +272,11 @@ describe("parser", () => {
269272
})
270273

271274
it("should override with --link", async () => {
272-
const args = parse("--cert test --cert-key test --socket test --host 0.0.0.0 --port 8888 --link test".split(" "))
275+
const args = parse(
276+
"--cert test --cert-key test --socket test --socket-permission 777 --host 0.0.0.0 --port 8888 --link test".split(
277+
" ",
278+
),
279+
)
273280
const defaultArgs = await setDefaults(args)
274281
expect(defaultArgs).toEqual({
275282
...defaults,
@@ -282,6 +289,7 @@ describe("parser", () => {
282289
cert: undefined,
283290
"cert-key": path.resolve("test"),
284291
socket: undefined,
292+
"socket-permission": undefined,
285293
})
286294
})
287295

0 commit comments

Comments
 (0)