diff --git a/compose.yaml b/compose.yaml index b2b7bdb..6eb4b88 100644 --- a/compose.yaml +++ b/compose.yaml @@ -20,3 +20,6 @@ services: environment: # Tell Dockge where is your stacks directory - DOCKGE_STACKS_DIR=/opt/stacks + # Usefull for interactive action within the container + stdin_open: true # docker run -i + tty: true # docker run -t diff --git a/extra/reset-password.ts b/extra/reset-password.ts index 696fb4c..2c2eeeb 100644 --- a/extra/reset-password.ts +++ b/extra/reset-password.ts @@ -6,6 +6,7 @@ import { DockgeServer } from "../backend/dockge-server"; import { log } from "../backend/log"; import { io } from "socket.io-client"; import { BaseRes } from "../common/util-common"; +import { generatePasswordHash } from "../backend/password-hash"; console.log("== Dockge Reset Password Tool =="); @@ -29,36 +30,68 @@ export const main = async () => { } try { + let user ; // 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?"); - } + user = await R.findOne("user"); - console.log("Found user: " + user.username); - - while (true) { - let password = await question("New Password: "); - let confirmPassword = await question("Confirm New Password: "); - - if (password === confirmPassword) { - await User.resetPassword(user.id, password); + if (! user ) { + if ( !process.env.USER ) { + throw new Error("user not found or provided, have you installed? Try to set USER and PASSWORD variables ..."); + } else { + console.log("Trying to initialise user : " + process.env.USER); + user = R.dispense("user"); + user.username = process.env.USER; + user.password = generatePasswordHash(process.env.PASSWORD); + await R.store(user); + console.log("User/Password set successfully"); // Reset all sessions by reset jwt secret await server.initJWTSecret(); - - console.log("Password reset successfully."); + console.log("JWT reset successfully."); // Disconnect all other socket clients of the user - await disconnectAllSocketClients(user.username, password); - - break; - } else { - console.log("Passwords do not match, please try again."); + await disconnectAllSocketClients(user.username, user.password); + console.log("You may have to restart"); + exit; } } } + + let password = ""; + let confirmPassword = " "; + + while (true) { + + if (process.env.PASSWORD) { + console.log("Found password : " + process.env.PASSWORD) ; + password = process.env.PASSWORD ; + confirmPassword = process.env.PASSWORD ; + } else { + console.log("No found password: " ) ; + password = await question("New Password: "); + confirmPassword = await question("Confirm New Password: "); + } + + if (password === confirmPassword) { + await User.resetPassword(user.id, password); + console.log("Password reset successfully."); + + // Reset all sessions by reset jwt secret + await server.initJWTSecret(); + + console.log("JWT reset successfully."); + + // Disconnect all other socket clients of the user + await disconnectAllSocketClients(user.username, password); + + } else { + console.log("Passwords do not match, please try again."); + break; + } + break; + } } catch (e) { if (e instanceof Error) { console.error("Error: " + e.message); @@ -127,3 +160,4 @@ function disconnectAllSocketClients(username : string, password : string) : Prom if (!process.env.TEST_BACKEND) { main(); } +