diff --git a/package-lock.json b/package-lock.json index ccb72dee3..7bb085b10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.8.22", @@ -79,6 +79,7 @@ "socket.io": "~4.8.0", "socket.io-client": "~4.8.0", "socks-proxy-agent": "~8.0.5", + "sqlstring": "~2.3.3", "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", diff --git a/package.json b/package.json index 97b7bc339..54a8aa43c 100644 --- a/package.json +++ b/package.json @@ -137,6 +137,7 @@ "socket.io": "~4.8.0", "socket.io-client": "~4.8.0", "socks-proxy-agent": "~8.0.5", + "sqlstring": "~2.3.3", "tar": "~6.2.1", "tcp-ping": "~0.1.1", "thirty-two": "~1.0.2", diff --git a/server/database.js b/server/database.js index c07797fd1..d22ceb29b 100644 --- a/server/database.js +++ b/server/database.js @@ -12,6 +12,7 @@ const { UptimeCalculator } = require("./uptime-calculator"); const dayjs = require("dayjs"); const { SimpleMigrationServer } = require("./utils/simple-migration-server"); const KumaColumnCompiler = require("./utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler"); +const SqlString = require("sqlstring"); /** * Database & App Data Folder @@ -256,10 +257,6 @@ class Database { } }; } else if (dbConfig.type === "mariadb") { - if (!/^\w+$/.test(dbConfig.dbName)) { - throw Error("Invalid database name. A database name can only consist of letters, numbers and underscores"); - } - const connection = await mysql.createConnection({ host: dbConfig.hostname, port: dbConfig.port, @@ -267,7 +264,11 @@ class Database { password: dbConfig.password, }); - await connection.execute("CREATE DATABASE IF NOT EXISTS " + dbConfig.dbName + " CHARACTER SET utf8mb4"); + // Set to true, so for example "uptime.kuma", becomes `uptime.kuma`, not `uptime`.`kuma` + // Doc: https://github.com/mysqljs/sqlstring?tab=readme-ov-file#escaping-query-identifiers + const escapedDBName = SqlString.escapeId(dbConfig.dbName, true); + + await connection.execute("CREATE DATABASE IF NOT EXISTS " + escapedDBName + " CHARACTER SET utf8mb4"); connection.end(); config = {