summaryrefslogtreecommitdiffstats
path: root/extra/remove-2fa.js
diff options
context:
space:
mode:
Diffstat (limited to 'extra/remove-2fa.js')
-rw-r--r--extra/remove-2fa.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/extra/remove-2fa.js b/extra/remove-2fa.js
new file mode 100644
index 0000000..e6a8b97
--- /dev/null
+++ b/extra/remove-2fa.js
@@ -0,0 +1,65 @@
+console.log("== Uptime Kuma Remove 2FA Tool ==");
+console.log("Loading the database");
+
+const Database = require("../server/database");
+const { R } = require("redbean-node");
+const readline = require("readline");
+const TwoFA = require("../server/2fa");
+const args = require("args-parser")(process.argv);
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout
+});
+
+const main = async () => {
+ Database.initDataDir(args);
+ await Database.connect();
+
+ try {
+ // No need to actually reset the password for testing, just make sure no connection problem. It is ok for now.
+ if (!process.env.TEST_BACKEND) {
+ const user = await R.findOne("user");
+ if (! user) {
+ throw new Error("user not found, have you installed?");
+ }
+
+ console.log("Found user: " + user.username);
+
+ let ans = await question("Are you sure want to remove 2FA? [y/N]");
+
+ if (ans.toLowerCase() === "y") {
+ await TwoFA.disable2FA(user.id);
+ console.log("2FA has been removed successfully.");
+ }
+
+ }
+ } catch (e) {
+ console.error("Error: " + e.message);
+ }
+
+ await Database.close();
+ rl.close();
+
+ console.log("Finished.");
+};
+
+/**
+ * Ask question of user
+ * @param {string} question Question to ask
+ * @returns {Promise<string>} Users response
+ */
+function question(question) {
+ return new Promise((resolve) => {
+ rl.question(question, (answer) => {
+ resolve(answer);
+ });
+ });
+}
+
+if (!process.env.TEST_BACKEND) {
+ main();
+}
+
+module.exports = {
+ main,
+};