Merge pull request #3017 from chakflying/v2/fix/external-database-setup

[2.0] Fix: Add external mariaDB setup
pull/3529/head^2
Louis Lam 2 years ago committed by GitHub
commit a2d147b88e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -7,6 +7,7 @@ const knex = require("knex");
const { PluginsManager } = require("./plugins-manager"); const { PluginsManager } = require("./plugins-manager");
const path = require("path"); const path = require("path");
const { EmbeddedMariaDB } = require("./embedded-mariadb"); const { EmbeddedMariaDB } = require("./embedded-mariadb");
const mysql = require("mysql2/promise");
/** /**
* Database & App Data Folder * Database & App Data Folder
@ -188,6 +189,19 @@ class Database {
} }
}; };
} else if (dbConfig.type === "mariadb") { } 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,
user: dbConfig.username,
password: dbConfig.password,
});
await connection.execute("CREATE DATABASE IF NOT EXISTS " + dbConfig.dbName + " CHARACTER SET utf8mb4");
config = { config = {
client: "mysql2", client: "mysql2",
connection: { connection: {

@ -614,7 +614,7 @@ let needSetup = false;
throw new Error("Password is too weak. It should contain alphabetic and numeric characters. It must be at least 6 characters in length."); throw new Error("Password is too weak. It should contain alphabetic and numeric characters. It must be at least 6 characters in length.");
} }
if ((await R.count("user")) !== 0) { if ((await R.knex("user").count("id as count").first()).count !== 0) {
throw new Error("Uptime Kuma has been initialized. If you want to run setup again, please delete the database."); throw new Error("Uptime Kuma has been initialized. If you want to run setup again, please delete the database.");
} }
@ -1683,7 +1683,7 @@ async function initDatabase(testMode = false) {
} }
// If there is no record in user table, it is a new Uptime Kuma instance, need to setup // If there is no record in user table, it is a new Uptime Kuma instance, need to setup
if ((await R.count("user")) === 0) { if ((await R.knex("user").count("id as count").first()).count === 0) {
log.info("server", "No user, need setup"); log.info("server", "No user, need setup");
needSetup = true; needSetup = true;
} }

Loading…
Cancel
Save