mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
feat: cli
This commit is contained in:
@@ -11,20 +11,51 @@ export const validateUser = async (username: string, password: string) => {
|
||||
const rootUser = process.env.ROOT_USER
|
||||
const rootPassword = process.env.ROOT_USER_PASSWORD
|
||||
|
||||
let userId: string | null = null
|
||||
|
||||
if (rootUser && rootPassword && username === rootUser) {
|
||||
if (password === rootPassword) {
|
||||
// 检查 root 用户是否存在于数据库中
|
||||
const [existingUser] = await db
|
||||
.select()
|
||||
.from(users)
|
||||
.where(eq(users.username, rootUser))
|
||||
|
||||
userId = existingUser?.id
|
||||
if (!existingUser) {
|
||||
// 为 root 用户创建数据库记录
|
||||
// 使用占位符密码哈希,因为实际密码在环境变量中
|
||||
const [newUser] = await db
|
||||
.insert(users)
|
||||
.values({
|
||||
username: rootUser,
|
||||
passwordHash: 'ENV_BASED_AUTH', // 占位符,实际使用环境变量验证
|
||||
role: 'admin',
|
||||
displayName: 'Root User',
|
||||
email: null,
|
||||
avatarUrl: null,
|
||||
isActive: true,
|
||||
})
|
||||
.onConflictDoNothing() // 避免并发创建导致的冲突
|
||||
.returning({
|
||||
id: users.id,
|
||||
})
|
||||
|
||||
userId = newUser.id
|
||||
}
|
||||
|
||||
// 检查 root 用户的 settings 是否存在,不存在则创建
|
||||
const [existingSettings] = await db
|
||||
.select()
|
||||
.from(settings)
|
||||
.where(eq(settings.userId, 'root'))
|
||||
.where(eq(settings.userId, userId))
|
||||
|
||||
if (!existingSettings) {
|
||||
// 为 root 用户创建默认 settings
|
||||
await db
|
||||
.insert(settings)
|
||||
.values({
|
||||
userId: 'root',
|
||||
userId: userId,
|
||||
defaultChatModel: null,
|
||||
defaultEmbeddingModel: null,
|
||||
defaultSummaryModel: null,
|
||||
@@ -36,7 +67,7 @@ export const validateUser = async (username: string, password: string) => {
|
||||
|
||||
// 返回 ROOT 用户信息
|
||||
return {
|
||||
id: 'root',
|
||||
id: userId,
|
||||
username: rootUser,
|
||||
role: 'admin' as const,
|
||||
displayName: 'Root User',
|
||||
@@ -49,7 +80,7 @@ export const validateUser = async (username: string, password: string) => {
|
||||
const [user] = await db
|
||||
.select()
|
||||
.from(users)
|
||||
.where(eq(users.username, username))
|
||||
.where(eq(users.id, userId!))
|
||||
|
||||
if (!user) {
|
||||
return null
|
||||
|
||||
@@ -94,6 +94,7 @@ export const createSchedule = async (
|
||||
userId: string,
|
||||
data: CreateScheduleInput
|
||||
) => {
|
||||
const { scheduleTask } = createScheduler()
|
||||
const [newSchedule] = await db
|
||||
.insert(schedule)
|
||||
.values({
|
||||
@@ -106,6 +107,15 @@ export const createSchedule = async (
|
||||
active: true,
|
||||
})
|
||||
.returning()
|
||||
|
||||
scheduleTask(userId, {
|
||||
id: newSchedule.id!,
|
||||
pattern: newSchedule.pattern,
|
||||
name: newSchedule.name,
|
||||
description: newSchedule.description,
|
||||
command: newSchedule.command,
|
||||
maxCalls: newSchedule.maxCalls || undefined,
|
||||
})
|
||||
|
||||
return newSchedule
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user