zhizhi/persona-studio/backend/routes/auth.js

88 lines
2.0 KiB
JavaScript

/**
* persona-studio · 登录校验路由
* POST /api/ps/auth/login { dev_id: "EXP-001" }
*/
const express = require('express');
const router = express.Router();
const path = require('path');
const fs = require('fs');
const crypto = require('crypto');
const REGISTRY_PATH = path.join(__dirname, '..', '..', 'brain', 'registry.json');
function loadRegistry() {
try {
return JSON.parse(fs.readFileSync(REGISTRY_PATH, 'utf-8'));
} catch {
return { developers: {} };
}
}
// POST /api/ps/auth/login
router.post('/login', (req, res) => {
const { dev_id } = req.body || {};
// 访客体验模式
if (dev_id === 'GUEST') {
const registry = loadRegistry();
const guestConfig = registry.guest_mode || {};
if (!guestConfig.enabled) {
return res.status(403).json({
error: true,
code: 'GUEST_DISABLED',
message: '访客体验暂未开放'
});
}
const token = crypto.randomBytes(32).toString('hex');
return res.json({
error: false,
dev_id: 'GUEST',
name: guestConfig.name || '访客体验者',
status: 'guest',
token
});
}
if (!dev_id || !/^EXP-\d{3,}$/.test(dev_id)) {
return res.status(400).json({
error: true,
code: 'INVALID_ID',
message: '编号格式不正确,请使用 EXP-XXX 格式'
});
}
const registry = loadRegistry();
const entry = registry.developers && registry.developers[dev_id];
if (!entry) {
return res.status(404).json({
error: true,
code: 'NOT_FOUND',
message: '编号未注册,请联系管理员获取编号'
});
}
if (entry.status !== 'active' && entry.status !== 'pending_activation') {
return res.status(403).json({
error: true,
code: 'INACTIVE',
message: '编号未激活,请联系管理员'
});
}
// 生成简单 session token
const token = crypto.randomBytes(32).toString('hex');
res.json({
error: false,
dev_id,
name: entry.name,
status: entry.status,
token
});
});
module.exports = router;