Files
leaudit-platform-frontend/app/routes/api.collabora.config.tsx
T
2025-11-20 20:36:42 +08:00

64 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Collabora 配置生成 API 路由
*
* 功能:
* - 生成 Collabora iframe URL
* - 生成 WOPI access token
* - 返回完整的 Collabora 配置
*
* @encoding UTF-8
*/
import { type LoaderFunctionArgs, json } from '@remix-run/node';
import { getUserSession } from '~/api/login/auth.server';
import { generateCollaboraConfig } from '~/lib/collabora/config.server';
/**
* GET /api/collabora/config
*
* 查询参数:
* - fileId: 文件路径(例如:contracts/test.docx
* - mode: 模式(view 或 edit),默认 view
* - userId: 用户 ID(可选,从 session 获取)
* - userName: 用户名(可选,从 session 获取)
*/
export async function loader({ request }: LoaderFunctionArgs) {
try {
// 获取用户会话信息
const { userInfo } = await getUserSession(request);
// 解析查询参数
const url = new URL(request.url);
const fileId = url.searchParams.get('fileId');
const mode = (url.searchParams.get('mode') || 'view') as 'view' | 'edit';
const userId = url.searchParams.get('userId') || userInfo?.sub || 'guest';
const userName = url.searchParams.get('userName') || userInfo?.nick_name || '访客';
// 验证必需参数
if (!fileId) {
return json(
{ error: '文件路径不能为空' },
{ status: 400 }
);
}
// 生成 Collabora 配置
const config = await generateCollaboraConfig({
fileId,
mode,
userId,
userName,
});
return json(config);
} catch (error) {
console.error('生成 Collabora 配置失败:', error);
return json(
{
error: error instanceof Error ? error.message : '生成配置失败',
},
{ status: 500 }
);
}
}