mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
Added setup scripts
This commit is contained in:
parent
f4705b1f45
commit
cc9da846e2
119
packages/server/scripts/setup/index.js
Normal file
119
packages/server/scripts/setup/index.js
Normal file
@ -0,0 +1,119 @@
|
||||
import DbManager from "@shared-classes/DbManager"
|
||||
import { Config } from "@db_models"
|
||||
|
||||
import fs from "node:fs/promises"
|
||||
import path from "node:path"
|
||||
|
||||
const forceFlag = process.argv.includes("--force")
|
||||
|
||||
const tasksPath = path.resolve(__dirname, "./tasks")
|
||||
|
||||
async function main() {
|
||||
if (
|
||||
process.env.INFISICAL_CLIENT_ID &&
|
||||
process.env.INFISICAL_CLIENT_SECRET
|
||||
) {
|
||||
console.log(
|
||||
`[BOOT] INFISICAL Credentials found, injecting env variables from INFISICAL...`,
|
||||
)
|
||||
await global.injectEnvFromInfisical()
|
||||
}
|
||||
|
||||
// create the context for tasks
|
||||
global.db = new DbManager()
|
||||
|
||||
await global.db.initialize()
|
||||
|
||||
let serverConfig = await Config.findOne({ key: "server" }).catch(() => {
|
||||
return false
|
||||
})
|
||||
|
||||
if (serverConfig && serverConfig.value.setup === true && !forceFlag) {
|
||||
console.log(
|
||||
`Server is already setup (last run at ${serverConfig.value.updated_at}), skipping setup...\nUse --force to force setup.`,
|
||||
)
|
||||
return process.exit(0)
|
||||
}
|
||||
|
||||
let tasks = await fs.readdir(tasksPath)
|
||||
|
||||
// filter only files ends with .js
|
||||
tasks = tasks.filter((task) => task.endsWith(".js"))
|
||||
|
||||
// sort by first numbers in file
|
||||
tasks = tasks.sort((a, b) => {
|
||||
const aNum = parseInt(a.split(".")[0])
|
||||
const bNum = parseInt(b.split(".")[0])
|
||||
|
||||
return aNum - bNum
|
||||
})
|
||||
|
||||
console.log(`Total (${tasks.length}) tasks...`)
|
||||
|
||||
for await (const task of tasks) {
|
||||
const taskIndex = tasks.indexOf(task) + 1
|
||||
|
||||
let taskObj = await import(path.resolve(tasksPath, task))
|
||||
|
||||
taskObj = taskObj.default ?? taskObj
|
||||
|
||||
if (typeof taskObj.fn !== "function") {
|
||||
console.log(`[ERROR] [${task}] has not a function, skipping...`)
|
||||
continue
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(
|
||||
`[INFO] Executing [${taskIndex}/${tasks.length}](${task})`,
|
||||
)
|
||||
|
||||
if (taskObj.description) {
|
||||
console.log(`[INFO] ${taskObj.description}`)
|
||||
}
|
||||
|
||||
await taskObj.fn()
|
||||
} catch (error) {
|
||||
console.log(`[ERROR] ${task} failed to execute`)
|
||||
console.log(error)
|
||||
|
||||
if (taskObj.crashOnError === true) {
|
||||
console.log(`[ERROR] ${task} crashed, exiting...`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
console.log(`[SUCCESS] ${task} executed successfully`)
|
||||
}
|
||||
|
||||
console.log("All tasks executed successfully!")
|
||||
|
||||
if (serverConfig) {
|
||||
console.log("Updating server configuration document...")
|
||||
|
||||
await Config.findOneAndUpdate(
|
||||
{ _id: serverConfig._id.toString() },
|
||||
{
|
||||
key: "server",
|
||||
value: {
|
||||
setup: true,
|
||||
updated_at: new Date(),
|
||||
},
|
||||
},
|
||||
)
|
||||
} else {
|
||||
console.log("Creating server configuration document...")
|
||||
|
||||
await Config.create({
|
||||
key: "server",
|
||||
value: {
|
||||
setup: false,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
main()
|
39
packages/server/scripts/setup/tasks/00.root-user.js
Normal file
39
packages/server/scripts/setup/tasks/00.root-user.js
Normal file
@ -0,0 +1,39 @@
|
||||
import { User } from "@db_models"
|
||||
import bcrypt from "bcrypt"
|
||||
|
||||
export default {
|
||||
description: "Create first root user",
|
||||
fn: async () => {
|
||||
// check if any user with includes admin role exists
|
||||
const adminUser = await User.find({
|
||||
$or: [{ roles: { $in: ["admin"] } }],
|
||||
})
|
||||
|
||||
if (adminUser.length > 0) {
|
||||
console.log("Admin user already exists")
|
||||
return true
|
||||
}
|
||||
|
||||
const defaultUsername = "root"
|
||||
const defaultPwd = "changemeorgethacked"
|
||||
|
||||
let user = new User({
|
||||
username: defaultUsername,
|
||||
password: await bcrypt.hash(defaultPwd, 6),
|
||||
email: "example@comty.app",
|
||||
roles: ["admin"],
|
||||
created_at: new Date().getTime(),
|
||||
accept_tos: true,
|
||||
activated: true,
|
||||
})
|
||||
|
||||
await user.save()
|
||||
|
||||
console.log(
|
||||
`Root user created. Username: ${defaultUsername}, password: ${defaultPwd}\nPlease change the password after first login!!.`,
|
||||
)
|
||||
|
||||
return true
|
||||
},
|
||||
crashOnFail: true,
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user