From e22d56025466dfb426a98423f54121b32dee5653 Mon Sep 17 00:00:00 2001 From: Nilanjan Debnath <91799113+nilanjan-debnath@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:03:25 +0530 Subject: [PATCH 01/17] Add SSL authentication method for database setup Add SSL checkbox and CA Certificate textarea for SetupDatabase.vue page Add UPTIME_KUMA_DB_SSL and UPTIME_KUMA_DB_CA env variables to dbConfig as ssl and ca inside setup-database.js --- server/database.js | 18 ++++++++++++++ server/setup-database.js | 8 +++++++ src/pages/SetupDatabase.vue | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/server/database.js b/server/database.js index d1176ed309..41e94a90fd 100644 --- a/server/database.js +++ b/server/database.js @@ -284,6 +284,12 @@ class Database { port: dbConfig.port, user: dbConfig.username, password: dbConfig.password, + ...(dbConfig.ssl ? { + ssl: { + rejectUnauthorized: true, + ...(dbConfig.ca && dbConfig.ca.trim() !== "" ? { ca: [ dbConfig.ca ] } : {}), + } + } : {}), }); // Set to true, so for example "uptime.kuma", becomes `uptime.kuma`, not `uptime`.`kuma` @@ -309,6 +315,12 @@ class Database { } return next(); }, + ...(dbConfig.ssl ? { + ssl: { + rejectUnauthorized: true, + ...(dbConfig.ca && dbConfig.ca.trim() !== "" ? { ca: [ dbConfig.ca ] } : {}), + } + } : {}), }, pool: mariadbPoolConfig, }; @@ -330,6 +342,12 @@ class Database { } return next(); }, + ...(dbConfig.ssl ? { + ssl: { + rejectUnauthorized: true, + ...(dbConfig.ca && dbConfig.ca.trim() !== "" ? { ca: [ dbConfig.ca ] } : {}), + } + } : {}), }, pool: mariadbPoolConfig, }; diff --git a/server/setup-database.js b/server/setup-database.js index 53c1d18a4e..a7336a6299 100644 --- a/server/setup-database.js +++ b/server/setup-database.js @@ -102,6 +102,8 @@ class SetupDatabase { dbConfig.dbName = process.env.UPTIME_KUMA_DB_NAME; dbConfig.username = getEnvOrFile("UPTIME_KUMA_DB_USERNAME"); dbConfig.password = getEnvOrFile("UPTIME_KUMA_DB_PASSWORD"); + dbConfig.ssl = (process.env.UPTIME_KUMA_DB_SSL.toLowerCase() === "true"); + dbConfig.ca = process.env.UPTIME_KUMA_DB_CA; Database.writeDBConfig(dbConfig); } } @@ -239,6 +241,12 @@ class SetupDatabase { user: dbConfig.username, password: dbConfig.password, database: dbConfig.dbName, + ...(dbConfig.ssl ? { + ssl: { + rejectUnauthorized: true, + ...(dbConfig.ca && dbConfig.ca.trim() !== "" ? { ca: [ dbConfig.ca ] } : {}), + } + } : {}), }); await connection.execute("SELECT 1"); connection.end(); diff --git a/src/pages/SetupDatabase.vue b/src/pages/SetupDatabase.vue index 58951f9178..42d51377ef 100644 --- a/src/pages/SetupDatabase.vue +++ b/src/pages/SetupDatabase.vue @@ -121,6 +121,43 @@ + +