From 2f5a6d9648ff37155bd197f8a75ede430fdaece3 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 4 Dec 2023 20:46:57 +0800 Subject: [PATCH] Update docker.js --- server/docker.js | 16 ++++++++-------- server/model/monitor.js | 2 +- server/util-server.js | 8 ++++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/server/docker.js b/server/docker.js index bec0e0b12..12b49a8b9 100644 --- a/server/docker.js +++ b/server/docker.js @@ -1,10 +1,10 @@ const axios = require("axios"); const { R } = require("redbean-node"); const https = require("https"); -const fs = require("fs"); +const fs = require("fs/promises"); const path = require("path"); const Database = require("./database"); -const { axiosAbortSignal } = require("./util-server"); +const { axiosAbortSignal, fileExists } = require("./util-server"); class DockerHost { @@ -81,7 +81,7 @@ class DockerHost { options.socketPath = dockerHost.dockerDaemon; } else if (dockerHost.dockerType === "tcp") { options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon); - options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); + options.httpsAgent = new https.Agent(await DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); } try { @@ -143,7 +143,7 @@ class DockerHost { * @param {string} url The docker host URL rewritten to https:// * @returns {object} HTTP agent options */ - static getHttpsAgentOptions(dockerType, url) { + static async getHttpsAgentOptions(dockerType, url) { let baseOptions = { maxCachedSessions: 0, rejectUnauthorized: true @@ -156,10 +156,10 @@ class DockerHost { let certPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameCert); let keyPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameKey); - if (dockerType === "tcp" && fs.existsSync(caPath) && fs.existsSync(certPath) && fs.existsSync(keyPath)) { - let ca = fs.readFileSync(caPath); - let key = fs.readFileSync(keyPath); - let cert = fs.readFileSync(certPath); + if (dockerType === "tcp" && await fileExists(caPath) && await fileExists(certPath) && await fileExists(keyPath)) { + let ca = await fs.readFile(caPath); + let key = await fs.readFile(keyPath); + let cert = await fs.readFile(certPath); certOptions = { ca, key, diff --git a/server/model/monitor.js b/server/model/monitor.js index e0b52062c..70ae0fb05 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -740,7 +740,7 @@ class Monitor extends BeanModel { } else if (dockerHost._dockerType === "tcp") { options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon); options.httpsAgent = CacheableDnsHttpAgent.getHttpsAgent( - DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL) + await DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL) ); } diff --git a/server/util-server.js b/server/util-server.js index 3246925e9..6bdf99a6b 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -1,3 +1,5 @@ +import fs from "fs"; + const tcpp = require("tcp-ping"); const ping = require("@louislam/ping"); const { R } = require("redbean-node"); @@ -1096,3 +1098,9 @@ module.exports.axiosAbortSignal = (timeoutMs) => { } } }; + +module.exports.fileExists = (file) => { + return fs.promises.access(file, fs.constants.F_OK) + .then(() => true) + .catch(() => false); +};