diff --git a/server/src/domain/monitors/monitor.model.ts b/server/src/domain/monitors/monitor.model.ts index 2517f5d8e..c04107651 100644 --- a/server/src/domain/monitors/monitor.model.ts +++ b/server/src/domain/monitors/monitor.model.ts @@ -307,6 +307,20 @@ const MonitorSchema = new Schema( type: Boolean, default: false, }, + dockerTlsCa: { + type: String, + }, + dockerTlsCert: { + type: String, + }, + dockerTlsKey: { + type: String, + select: false, + }, + dockerTlsKeySet: { + type: Boolean, + default: false, + }, dnsServer: { type: String, }, diff --git a/server/src/domain/monitors/monitor.repository.interface.ts b/server/src/domain/monitors/monitor.repository.interface.ts index 1b12fef71..5de43aa2c 100644 --- a/server/src/domain/monitors/monitor.repository.interface.ts +++ b/server/src/domain/monitors/monitor.repository.interface.ts @@ -55,6 +55,11 @@ export interface IMonitorsRepository { findMonitorCountByTeamIdAndType(teamId: string, config: TeamQueryConfig): Promise; findMonitorCountByProxyId(proxyId: string): Promise; + // Docker TLS + findDockerTlsKeyById(monitorId: string): Promise; + findAllDockerTlsKeys(): Promise<{ id: string; dockerTlsKey: string }[]>; + updateDockerTlsKey(monitorId: string, dockerTlsKey: string): Promise; // Needed for worker to rotate keys, no teamId/userId + // other findMonitorsSummaryByTeamId(teamId: string, config?: SummaryConfig): Promise; removeNotificationFromMonitors(notificationId: string): Promise; diff --git a/server/src/domain/monitors/monitor.repository.mongo.ts b/server/src/domain/monitors/monitor.repository.mongo.ts index db6b79853..efbcf6b10 100644 --- a/server/src/domain/monitors/monitor.repository.mongo.ts +++ b/server/src/domain/monitors/monitor.repository.mongo.ts @@ -298,6 +298,20 @@ class MongoMonitorsRepository implements IMonitorsRepository { return { monitors: this.mapDocuments(monitors), deletedCount }; }; + findDockerTlsKeyById = async (monitorId: string): Promise => { + const doc = await MonitorModel.findOne({ _id: monitorId }, { dockerTlsKey: 1 }).lean(); + return doc?.dockerTlsKey ?? null; + }; + + findAllDockerTlsKeys = async (): Promise<{ id: string; dockerTlsKey: string }[]> => { + const docs = await MonitorModel.find({ dockerTlsKeySet: true }, { dockerTlsKey: 1 }).lean(); + return docs.flatMap((doc) => (doc.dockerTlsKey ? [{ id: doc._id.toString(), dockerTlsKey: doc.dockerTlsKey }] : [])); + }; + + updateDockerTlsKey = async (monitorId: string, dockerTlsKey: string): Promise => { + await MonitorModel.updateOne({ _id: monitorId }, { $set: { dockerTlsKey } }); + }; + findMonitorsSummaryByTeamId = async (teamId: string, config: SummaryConfig): Promise => { const match = this.queryBuilder(config, teamId); const pipeline = [ diff --git a/server/src/domain/monitors/monitor.type.ts b/server/src/domain/monitors/monitor.type.ts index 12fcd1036..df8c52d9e 100644 --- a/server/src/domain/monitors/monitor.type.ts +++ b/server/src/domain/monitors/monitor.type.ts @@ -109,6 +109,11 @@ export interface Monitor { geoCheckLocations?: GeoContinent[]; geoCheckInterval?: number; dockerLogsEnabled?: boolean; + dockerTlsCa?: string; + dockerTlsCert?: string; + // EncryptionService ciphertext. Normally excluded + dockerTlsKey?: string; + dockerTlsKeySet?: boolean; dnsServer?: string; dnsRecordType?: DnsRecordType; recentChecks: CheckSnapshot[];