156 lines
5.0 KiB
TypeScript
156 lines
5.0 KiB
TypeScript
/* eslint-disable no-console, @typescript-eslint/no-explicit-any */
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
import { getStorage } from '@/lib/db';
|
|
import { User } from '@/lib/types';
|
|
|
|
export const runtime = 'edge';
|
|
|
|
// 检查是否为站长账户
|
|
function isOwnerAccount(username: string): boolean {
|
|
const ownerUsername = process.env.USERNAME || 'admin';
|
|
return username === ownerUsername;
|
|
}
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
// 从Authorization头获取当前用户
|
|
const auth = request.headers.get('Authorization')?.replace('Bearer ', '');
|
|
if (!auth) {
|
|
return NextResponse.json({ error: '需要认证' }, { status: 401 });
|
|
}
|
|
|
|
const currentUsername = decodeURIComponent(auth);
|
|
|
|
// 检查是否为站长账户
|
|
if (!isOwnerAccount(currentUsername)) {
|
|
return NextResponse.json({ error: '权限不足' }, { status: 403 });
|
|
}
|
|
|
|
// 获取所有用户及其设置
|
|
const storage = getStorage();
|
|
const users: User[] = await storage.getAllUsers();
|
|
const usersWithSettings = await Promise.all(
|
|
users.map(async (user) => {
|
|
const settings = await storage.getUserSettings(user.username);
|
|
return {
|
|
username: user.username,
|
|
role: user.role || 'user',
|
|
created_at: user.created_at,
|
|
filter_adult_content: settings?.filter_adult_content ?? true,
|
|
can_disable_filter: settings?.can_disable_filter ?? true,
|
|
managed_by_admin: settings?.managed_by_admin ?? false,
|
|
last_filter_change: settings?.last_filter_change
|
|
};
|
|
})
|
|
);
|
|
|
|
return NextResponse.json({
|
|
users: usersWithSettings,
|
|
total: usersWithSettings.length
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('获取用户列表失败:', error);
|
|
return NextResponse.json({ error: '获取用户列表失败' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
// 从Authorization头获取当前用户
|
|
const auth = request.headers.get('Authorization')?.replace('Bearer ', '');
|
|
if (!auth) {
|
|
return NextResponse.json({ error: '需要认证' }, { status: 401 });
|
|
}
|
|
|
|
const currentUsername = decodeURIComponent(auth);
|
|
|
|
// 检查是否为站长账户
|
|
if (!isOwnerAccount(currentUsername)) {
|
|
return NextResponse.json({ error: '权限不足' }, { status: 403 });
|
|
}
|
|
|
|
const storage = getStorage();
|
|
const { action, username, settings } = await request.json();
|
|
|
|
switch (action) {
|
|
case 'update_settings': {
|
|
// 更新用户设置
|
|
const currentSettings = await storage.getUserSettings(username);
|
|
const newSettings = {
|
|
...currentSettings,
|
|
...settings,
|
|
last_filter_change: new Date().toISOString()
|
|
};
|
|
|
|
await storage.setUserSettings(username, newSettings);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: `已更新用户 ${username} 的设置`
|
|
});
|
|
}
|
|
|
|
case 'force_filter': {
|
|
// 强制开启某用户的成人内容过滤
|
|
const currentSettings = await storage.getUserSettings(username) || {
|
|
filter_adult_content: true,
|
|
theme: 'auto' as const,
|
|
language: 'zh-CN',
|
|
auto_play: false,
|
|
video_quality: 'auto'
|
|
};
|
|
|
|
await storage.setUserSettings(username, {
|
|
...currentSettings,
|
|
filter_adult_content: true,
|
|
can_disable_filter: false,
|
|
managed_by_admin: true,
|
|
last_filter_change: new Date().toISOString()
|
|
});
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: `已强制开启用户 ${username} 的成人内容过滤`
|
|
});
|
|
}
|
|
|
|
case 'allow_disable': {
|
|
// 允许用户自己管理过滤设置
|
|
const existingSettings = await storage.getUserSettings(username) || {
|
|
filter_adult_content: true,
|
|
theme: 'auto' as const,
|
|
language: 'zh-CN',
|
|
auto_play: false,
|
|
video_quality: 'auto'
|
|
};
|
|
|
|
await storage.setUserSettings(username, {
|
|
...existingSettings,
|
|
filter_adult_content: existingSettings.filter_adult_content ?? true,
|
|
theme: existingSettings.theme || 'auto',
|
|
language: existingSettings.language || 'zh-CN',
|
|
auto_play: existingSettings.auto_play ?? false,
|
|
video_quality: existingSettings.video_quality || 'auto',
|
|
can_disable_filter: true,
|
|
managed_by_admin: false,
|
|
last_filter_change: new Date().toISOString()
|
|
});
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: `已允许用户 ${username} 自己管理过滤设置`
|
|
});
|
|
}
|
|
|
|
default:
|
|
return NextResponse.json({ error: '未知操作' }, { status: 400 });
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('用户管理操作失败:', error);
|
|
return NextResponse.json({ error: '操作失败' }, { status: 500 });
|
|
}
|
|
}
|