Update matcher binary path to /app/bin/face_matcher in configuration and documentation
All checks were successful
Publish FaceAI Container / publish (push) Successful in 2m53s
All checks were successful
Publish FaceAI Container / publish (push) Successful in 2m53s
This commit is contained in:
parent
cf316c8563
commit
c0732c142c
7 changed files with 76 additions and 8 deletions
|
|
@ -60,6 +60,35 @@ app.use(cors({
|
|||
credentials: true
|
||||
}));
|
||||
|
||||
function summarizeRace(race) {
|
||||
return {
|
||||
id: race?.id || null,
|
||||
name: race?.name || null,
|
||||
storage: race?.storage || null
|
||||
};
|
||||
}
|
||||
|
||||
function summarizeUser(user) {
|
||||
return {
|
||||
id: user?.id || null,
|
||||
displayName: user?.displayName || null,
|
||||
membershipStatus: user?.membershipStatus || null
|
||||
};
|
||||
}
|
||||
|
||||
function clientIp(req) {
|
||||
const forwardedFor = String(req.headers['x-forwarded-for'] || '').split(',')[0].trim();
|
||||
return forwardedFor || req.ip || req.socket?.remoteAddress || null;
|
||||
}
|
||||
|
||||
function logFaceAiAccess(event, req, details = {}) {
|
||||
console.log(`[FaceAI] ${event} ${JSON.stringify({
|
||||
ip: clientIp(req),
|
||||
userAgent: req.headers['user-agent'] || null,
|
||||
...details
|
||||
})}`);
|
||||
}
|
||||
|
||||
function getFaceAiSession(req) {
|
||||
const sessionId = req.cookies[config.sessionCookieName];
|
||||
return sessionId ? getSession(sessionId) : null;
|
||||
|
|
@ -318,6 +347,15 @@ app.post('/api/auth/exchange', async (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
logFaceAiAccess('Session exchange', req, {
|
||||
sessionId,
|
||||
user: summarizeUser(payload.user),
|
||||
race: summarizeRace(race),
|
||||
lang: payload.lang,
|
||||
availability,
|
||||
returnUrl: payload.returnUrl
|
||||
});
|
||||
|
||||
res.cookie(config.sessionCookieName, sessionId, {
|
||||
httpOnly: true,
|
||||
sameSite: 'lax',
|
||||
|
|
@ -341,6 +379,13 @@ app.post('/api/auth/exchange', async (req, res) => {
|
|||
});
|
||||
|
||||
app.get('/api/session', requireSession, (req, res) => {
|
||||
logFaceAiAccess('Session viewed', req, {
|
||||
sessionId: req.cookies[config.sessionCookieName] || null,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(req.faceaiSession.race),
|
||||
lang: req.faceaiSession.lang,
|
||||
availability: req.faceaiSession.availability || null
|
||||
});
|
||||
res.json(req.faceaiSession);
|
||||
});
|
||||
|
||||
|
|
@ -420,6 +465,16 @@ app.post('/api/searches', requireSession, enforceSearchRateLimit, upload.single(
|
|||
removeOnFail: 100
|
||||
});
|
||||
|
||||
logFaceAiAccess('Identification requested', req, {
|
||||
searchId: updatedSearch.id,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(race),
|
||||
lang: req.faceaiSession.lang,
|
||||
selfieName: updatedSearch.selfieName,
|
||||
uploadPath: updatedSearch.uploadPath,
|
||||
availability
|
||||
});
|
||||
|
||||
res.status(201).json({
|
||||
id: updatedSearch.id,
|
||||
status: updatedSearch.status,
|
||||
|
|
@ -476,8 +531,19 @@ app.get('/api/searches/:id/redirect', requireSession, async (req, res) => {
|
|||
|
||||
const token = issueReturnToken(result);
|
||||
|
||||
const redirectUrl = `${config.legacyReturnUrl}?resultId=${encodeURIComponent(result.id)}&token=${encodeURIComponent(token)}`;
|
||||
|
||||
logFaceAiAccess('Identification redirect issued', req, {
|
||||
searchId: search.id,
|
||||
resultId: result.id,
|
||||
user: summarizeUser(req.faceaiSession.user),
|
||||
race: summarizeRace(req.faceaiSession.race),
|
||||
matchCount: result.matches?.length || 0,
|
||||
redirectUrl
|
||||
});
|
||||
|
||||
res.json({
|
||||
url: `${config.legacyReturnUrl}?resultId=${encodeURIComponent(result.id)}&token=${encodeURIComponent(token)}`
|
||||
url: redirectUrl
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue