*Removing ssl support, will delegate it to caddy
This commit is contained in:
parent
671c7ad6a1
commit
69e613075e
|
@ -16,7 +16,6 @@ import {
|
||||||
getProtocolManager,
|
getProtocolManager,
|
||||||
ProtocolManager,
|
ProtocolManager,
|
||||||
} from "./swarm.js";
|
} from "./swarm.js";
|
||||||
import { get as getSSl, SSLManager } from "./ssl.js";
|
|
||||||
import { get as getApp } from "./app.js";
|
import { get as getApp } from "./app.js";
|
||||||
import type { HDKey } from "micro-ed25519-hdkey";
|
import type { HDKey } from "micro-ed25519-hdkey";
|
||||||
import corePlugins from "../plugins";
|
import corePlugins from "../plugins";
|
||||||
|
@ -88,10 +87,6 @@ class PluginAPI extends EventEmitter2 {
|
||||||
return getHDKey();
|
return getHDKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
get ssl(): SSLManager {
|
|
||||||
return getSSl();
|
|
||||||
}
|
|
||||||
|
|
||||||
get protocols(): ProtocolManager {
|
get protocols(): ProtocolManager {
|
||||||
return getProtocolManager();
|
return getProtocolManager();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import { relay } from "@hyperswarm/dht-relay";
|
||||||
import Stream from "@hyperswarm/dht-relay/ws";
|
import Stream from "@hyperswarm/dht-relay/ws";
|
||||||
import config from "../config.js";
|
import config from "../config.js";
|
||||||
import { get as getSwarm } from "./swarm.js";
|
import { get as getSwarm } from "./swarm.js";
|
||||||
import { get as getSslManager } from "./ssl.js";
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import log from "../log.js";
|
import log from "../log.js";
|
||||||
import { AddressInfo } from "net";
|
import { AddressInfo } from "net";
|
||||||
|
@ -18,17 +17,9 @@ import websocket from "@fastify/websocket";
|
||||||
|
|
||||||
export async function start() {
|
export async function start() {
|
||||||
const dht = getSwarm();
|
const dht = getSwarm();
|
||||||
let sslOptions: boolean | http2.SecureServerOptions = false;
|
|
||||||
|
|
||||||
if (getSslManager().ready) {
|
|
||||||
sslOptions = {
|
|
||||||
SNICallback: () => getSslManager().context,
|
|
||||||
} as http2.SecureServerOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
let relayServer = fastify({
|
let relayServer = fastify({
|
||||||
http2: true,
|
http2: true,
|
||||||
https: sslOptions as http2.SecureServerOptions,
|
|
||||||
logger: log.child({ module: "relay-server" }),
|
logger: log.child({ module: "relay-server" }),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
import * as tls from "tls";
|
|
||||||
import b4a from "b4a";
|
|
||||||
import log from "../log.js";
|
|
||||||
import config from "../config.js";
|
|
||||||
|
|
||||||
export type SSLManagerRenewHandler = (domain: string) => Promise<boolean>;
|
|
||||||
type SSLCert = string | Buffer | Array<string | Buffer>;
|
|
||||||
|
|
||||||
export class SSLManager {
|
|
||||||
private _key?: Buffer;
|
|
||||||
|
|
||||||
constructor(domain: string) {
|
|
||||||
this._domain = domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _domain: string;
|
|
||||||
|
|
||||||
get domain(): string {
|
|
||||||
return this._domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _context?: tls.SecureContext;
|
|
||||||
|
|
||||||
get context(): tls.SecureContext {
|
|
||||||
return this._context as tls.SecureContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _cert?: SSLCert;
|
|
||||||
|
|
||||||
set cert(cert: SSLCert) {
|
|
||||||
this._cert = cert;
|
|
||||||
this._maybeUpdateContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
private _renewHandler?: SSLManagerRenewHandler;
|
|
||||||
|
|
||||||
get renewHandler(): SSLManagerRenewHandler {
|
|
||||||
return this._renewHandler as any;
|
|
||||||
}
|
|
||||||
|
|
||||||
set renewHandler(value: SSLManagerRenewHandler) {
|
|
||||||
this._renewHandler = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set privateKey(key: Buffer) {
|
|
||||||
this._key = key;
|
|
||||||
this._maybeUpdateContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
get enabled() {
|
|
||||||
return config.bool("core.ssl");
|
|
||||||
}
|
|
||||||
|
|
||||||
get ready() {
|
|
||||||
return this.enabled && this.renewHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async renew(): Promise<boolean> {
|
|
||||||
let result = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
result = (await this._renewHandler?.(this._domain)) as boolean;
|
|
||||||
} catch (e) {
|
|
||||||
log.error((e as Error).message);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _maybeUpdateContext() {
|
|
||||||
const valid = (value: any) =>
|
|
||||||
b4a.isBuffer(value) || typeof value === "string" || Array.isArray(value);
|
|
||||||
|
|
||||||
if (valid(this._cert) && valid(this._key)) {
|
|
||||||
const opts: tls.SecureContextOptions = {
|
|
||||||
key: this._key,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (Array.isArray(this._cert)) {
|
|
||||||
opts.ca = this._cert.slice(1);
|
|
||||||
opts.cert = this._cert[0];
|
|
||||||
} else {
|
|
||||||
opts.cert = this._cert;
|
|
||||||
}
|
|
||||||
this._context = tls.createSecureContext(opts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let sslManager: SSLManager;
|
|
||||||
|
|
||||||
export function get(): SSLManager {
|
|
||||||
if (!sslManager) {
|
|
||||||
sslManager = new SSLManager(config.get("core.domain"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return sslManager;
|
|
||||||
}
|
|
Loading…
Reference in New Issue