Fix TypeScript errors: Update User type system across all storage implementations
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
/* 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 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user