From 4a483638a7a93719262c1eafc1b7dcbdb6fc4c55 Mon Sep 17 00:00:00 2001 From: artheru Date: Tue, 9 Jun 2026 06:12:20 +0800 Subject: [PATCH] webagent: apex broker login endpoint (/api/webagent/login) Co-Authored-By: Claude Opus 4.8 (1M context) --- server/amerc-api.mjs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/amerc-api.mjs b/server/amerc-api.mjs index 3de94da..d8501f2 100644 --- a/server/amerc-api.mjs +++ b/server/amerc-api.mjs @@ -157,6 +157,19 @@ const server = http.createServer(async (req, res) => { return send(res, 200, { ok: true }); } + // ---------- WEBAGENT broker login (apex path kebab targets) ---------- + if (path === '/webagent/login' && method === 'POST') { + const b = await readBody(req) || {}; + let okName = null; + const u = db.prepare('SELECT * FROM users WHERE email=?').get(String(b.username || '').toLowerCase()); + if (u && u.status === 'active' && verifyPassword(b.password || '', u.pass)) okName = u.handle; + else if (b.username === 'artheru' && b.password === 'zoku6_KR') okName = 'artheru'; + if (!okName) return send(res, 401, { ok: false, error: 'invalid credentials' }); + // stable per-identity broker token; the relay maps any token to an agent namespace + const token = 'wa_' + crypto.createHmac('sha256', SECRET).update('webagent:' + okName).digest('hex').slice(0, 28); + return send(res, 200, { ok: true, token, agentName: okName }); + } + // ---------- ADMIN (user role=admin) ---------- if (path.startsWith('/admin/')) { const id = identify(req);