mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-12 10:39:57 +00:00
Add daemon host option and default to localhost instead of all addresses
This commit is contained in:
@@ -8,7 +8,13 @@ import { Readable } from "stream";
|
|||||||
|
|
||||||
import { DecodeTransform, EncodeTransform } from "./transforms";
|
import { DecodeTransform, EncodeTransform } from "./transforms";
|
||||||
|
|
||||||
export function init(port: number, serverPassword?: string) {
|
interface DaemonOpts {
|
||||||
|
host: string;
|
||||||
|
port: number;
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function init(opts: DaemonOpts) {
|
||||||
const server = http.createServer();
|
const server = http.createServer();
|
||||||
const wss = new WebSocket.Server({ noServer: true });
|
const wss = new WebSocket.Server({ noServer: true });
|
||||||
|
|
||||||
@@ -65,14 +71,14 @@ export function init(port: number, serverPassword?: string) {
|
|||||||
* server password specified in launch options.
|
* server password specified in launch options.
|
||||||
*/
|
*/
|
||||||
function authenticate(req: IncomingMessage) {
|
function authenticate(req: IncomingMessage) {
|
||||||
if (!serverPassword) return true;
|
if (!opts.password) return true;
|
||||||
|
|
||||||
const password = new URL(
|
const password = new URL(
|
||||||
req.url!,
|
req.url!,
|
||||||
`http://${req.headers.host}`
|
`http://${req.headers.host}`
|
||||||
).searchParams.get("password");
|
).searchParams.get("password");
|
||||||
|
|
||||||
return password === serverPassword;
|
return password === opts.password;
|
||||||
}
|
}
|
||||||
|
|
||||||
server.on("upgrade", (req, socket, head) => {
|
server.on("upgrade", (req, socket, head) => {
|
||||||
@@ -113,5 +119,5 @@ export function init(port: number, serverPassword?: string) {
|
|||||||
res.end();
|
res.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen(port);
|
server.listen({ port: opts.port, host: opts.host });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,19 @@ import { __applicationVersion } from "../package.json";
|
|||||||
|
|
||||||
const argv = minimist(process.argv.slice(2), {
|
const argv = minimist(process.argv.slice(2), {
|
||||||
boolean: ["daemon", "help", "version"],
|
boolean: ["daemon", "help", "version"],
|
||||||
string: ["__name", "port", "password"],
|
string: ["__name", "host", "port", "password"],
|
||||||
alias: {
|
alias: {
|
||||||
d: "daemon",
|
d: "daemon",
|
||||||
h: "help",
|
h: "help",
|
||||||
v: "version",
|
v: "version",
|
||||||
p: "port"
|
n: "host",
|
||||||
|
p: "port",
|
||||||
|
P: "password"
|
||||||
},
|
},
|
||||||
default: {
|
default: {
|
||||||
__name: path.basename(process.argv[0]),
|
__name: path.basename(process.argv[0]),
|
||||||
daemon: false,
|
daemon: false,
|
||||||
|
host: "localhost",
|
||||||
port: "9556"
|
port: "9556"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -32,15 +35,17 @@ Options:
|
|||||||
-h, --help Print usage info
|
-h, --help Print usage info
|
||||||
-v, --version Print version info
|
-v, --version Print version info
|
||||||
-d, --daemon Launch in daemon mode. This starts a WebSocket server that
|
-d, --daemon Launch in daemon mode. This starts a WebSocket server that
|
||||||
the extension can be configured to connect to under bridge
|
the extension can be configured to connect to under bridge
|
||||||
options.
|
options.
|
||||||
-p, --port Set port number for WebSocket server. This must match the
|
-n, --host Host for daemon WebSocket server. This must match the host
|
||||||
port set in the extension options.
|
set in the extension options.
|
||||||
--password Set an optional password for the WebSocket server. This must
|
-p, --port Port number for daemon WebSocket server. This must match the
|
||||||
match the password set in the extension options.
|
port set in the extension options.
|
||||||
WARNING: This password is intended only as a basic access
|
-P, --password Set an optional password for the daemon WebSocket server.
|
||||||
control measure and is transmitted in plain text even over
|
This must match the password set in the extension options.
|
||||||
remote connections!
|
WARNING: This password is intended only as a basic access
|
||||||
|
control measure and is transmitted in plain text even over
|
||||||
|
remote connections!
|
||||||
`
|
`
|
||||||
);
|
);
|
||||||
} else if (argv.daemon) {
|
} else if (argv.daemon) {
|
||||||
@@ -51,7 +56,11 @@ Options:
|
|||||||
}
|
}
|
||||||
|
|
||||||
import("./daemon").then(daemon => {
|
import("./daemon").then(daemon => {
|
||||||
daemon.init(port, argv.password);
|
daemon.init({
|
||||||
|
host: argv.host,
|
||||||
|
port,
|
||||||
|
password: argv.password
|
||||||
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
import("./bridge");
|
import("./bridge");
|
||||||
|
|||||||
@@ -15,7 +15,16 @@ async function getBackupServerUrl() {
|
|||||||
const { bridgeBackupHost, bridgeBackupPort, bridgeBackupPassword } =
|
const { bridgeBackupHost, bridgeBackupPort, bridgeBackupPassword } =
|
||||||
await options.getAll();
|
await options.getAll();
|
||||||
|
|
||||||
const url = new URL(`ws://${bridgeBackupHost}:${bridgeBackupPort}`);
|
const url = new URL(
|
||||||
|
`ws://${
|
||||||
|
// Handle IPv6 address formatting
|
||||||
|
bridgeBackupHost.includes(":")
|
||||||
|
? `[${bridgeBackupHost}]`
|
||||||
|
: bridgeBackupHost
|
||||||
|
}`
|
||||||
|
);
|
||||||
|
url.port = bridgeBackupPort.toString();
|
||||||
|
|
||||||
if (bridgeBackupPassword) {
|
if (bridgeBackupPassword) {
|
||||||
url.searchParams.append("password", bridgeBackupPassword);
|
url.searchParams.append("password", bridgeBackupPassword);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user