@oktis-works/api 0.4.14 → 0.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/middleware/csrf.d.ts.map +1 -1
- package/dist/middleware/csrf.js +13 -5
- package/dist/middleware/csrf.js.map +1 -1
- package/dist/routes/auth/index.d.ts.map +1 -1
- package/dist/routes/auth/index.js +40 -20
- package/dist/routes/auth/index.js.map +1 -1
- package/dist/routes/docs/index.js +1 -1
- package/dist/routes/docs/index.js.map +1 -1
- package/dist/utils/csrf.d.ts.map +1 -1
- package/dist/utils/csrf.js +1 -0
- package/dist/utils/csrf.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU1C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAC9C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAE9C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAoBhD;AAWD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU1C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAC9C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAE9C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAoBhD;AAWD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkDrF"}
|
package/dist/middleware/csrf.js
CHANGED
|
@@ -69,13 +69,21 @@ export async function csrfMiddleware(c, next) {
|
|
|
69
69
|
await next();
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (!
|
|
72
|
+
// Login ainda não possui sessão para emitir um token CSRF. A validação
|
|
73
|
+
// estrita de Origin protege contra login-CSRF; as demais mutações exigem o
|
|
74
|
+
// par cookie + header abaixo.
|
|
75
|
+
if (c.req.path === '/api/v1/auth/login' || c.req.path === '/api/v1/auth/register') {
|
|
76
|
+
if (!isSameOrigin(c)) {
|
|
77
77
|
return c.json({ error: 'CSRF_TOKEN_INVALID', message: 'CSRF validation failed.' }, 403);
|
|
78
78
|
}
|
|
79
|
+
await next();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const cookieHeader = c.req.header('Cookie');
|
|
83
|
+
const cookieToken = readCookie(cookieHeader, CSRF_COOKIE);
|
|
84
|
+
const headerToken = c.req.header(CSRF_HEADER);
|
|
85
|
+
if (!cookieToken || !headerToken || cookieToken !== headerToken || !isSameOrigin(c)) {
|
|
86
|
+
return c.json({ error: 'CSRF_TOKEN_INVALID', message: 'CSRF validation failed.' }, 403);
|
|
79
87
|
}
|
|
80
88
|
await next();
|
|
81
89
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsD5B,QAAA,MAAM,UAAU,4EAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsD5B,QAAA,MAAM,UAAU,4EAAa,CAAC;AAsN9B,eAAe,UAAU,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { AuthService } from '@oktis-works/auth';
|
|
|
5
5
|
import { loadConfig } from '@oktis-works/config';
|
|
6
6
|
import { establishTenantContext } from '@oktis-works/core';
|
|
7
7
|
import { getConnection } from '@oktis-works/database';
|
|
8
|
-
import { setCsrfCookie } from '../../utils/csrf.js';
|
|
8
|
+
import { getCsrfToken, setCsrfCookie } from '../../utils/csrf.js';
|
|
9
9
|
const config = loadConfig();
|
|
10
10
|
const authService = new AuthService(config.auth);
|
|
11
11
|
const { cookie: cookieCfg } = config.auth;
|
|
@@ -50,10 +50,12 @@ const authRouter = new Hono();
|
|
|
50
50
|
// Cookie options from config — None requer Secure (auto em produção)
|
|
51
51
|
const isProd = config.app.nodeEnv === 'production';
|
|
52
52
|
const cookieSecure = cookieCfg.secure ?? isProd;
|
|
53
|
+
const cookieDomain = cookieCfg.domain;
|
|
53
54
|
const ACCESS_OPTS = {
|
|
54
55
|
httpOnly: true,
|
|
55
56
|
secure: cookieSecure,
|
|
56
57
|
sameSite: cookieCfg.sameSite,
|
|
58
|
+
...(cookieDomain ? { domain: cookieDomain } : {}),
|
|
57
59
|
path: '/',
|
|
58
60
|
maxAge: cookieCfg.accessTokenMaxAge ?? 60 * 15, // 15min
|
|
59
61
|
};
|
|
@@ -61,6 +63,7 @@ const REFRESH_OPTS = {
|
|
|
61
63
|
httpOnly: true,
|
|
62
64
|
secure: cookieSecure,
|
|
63
65
|
sameSite: cookieCfg.sameSite,
|
|
66
|
+
...(cookieDomain ? { domain: cookieDomain } : {}),
|
|
64
67
|
path: '/',
|
|
65
68
|
maxAge: cookieCfg.refreshTokenMaxAge ?? 60 * 60 * 24 * 30, // 30d
|
|
66
69
|
};
|
|
@@ -70,10 +73,29 @@ function setAuthCookies(c, accessToken, refreshToken) {
|
|
|
70
73
|
setCookie(c, 'refresh_token', refreshToken, REFRESH_OPTS);
|
|
71
74
|
}
|
|
72
75
|
function clearAuthCookies(c) {
|
|
73
|
-
deleteCookie(c, 'access_token', { path: '/' });
|
|
74
|
-
deleteCookie(c, 'refresh_token', { path: '/' });
|
|
76
|
+
deleteCookie(c, 'access_token', { path: '/', ...(cookieDomain ? { domain: cookieDomain } : {}) });
|
|
77
|
+
deleteCookie(c, 'refresh_token', { path: '/', ...(cookieDomain ? { domain: cookieDomain } : {}) });
|
|
78
|
+
}
|
|
79
|
+
function isBrowserRequest(c) {
|
|
80
|
+
return Boolean(c.req.header('Origin') || c.req.header('Sec-Fetch-Site'));
|
|
81
|
+
}
|
|
82
|
+
function authResponse(c, result) {
|
|
83
|
+
if (isBrowserRequest(c)) {
|
|
84
|
+
return { user: result.user, tenantId: result.tenantId };
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
user: result.user,
|
|
88
|
+
tenantId: result.tenantId,
|
|
89
|
+
accessToken: result.accessToken,
|
|
90
|
+
refreshToken: result.refreshToken,
|
|
91
|
+
};
|
|
75
92
|
}
|
|
76
93
|
// CSRF é validado globalmente em app.use('/api/*', csrfMiddleware) — ver middleware/csrf.ts
|
|
94
|
+
// GET /auth/csrf — bootstrap explícito para browsers, sem expor Set-Cookie ao JS
|
|
95
|
+
authRouter.get('/csrf', async (c) => {
|
|
96
|
+
const token = getCsrfToken(c) ?? setCsrfCookie(c);
|
|
97
|
+
return c.json({ csrfToken: token });
|
|
98
|
+
});
|
|
77
99
|
// POST /auth/register
|
|
78
100
|
authRouter.post('/register', async (c) => {
|
|
79
101
|
try {
|
|
@@ -95,12 +117,7 @@ authRouter.post('/register', async (c) => {
|
|
|
95
117
|
setAuthCookies(c, result.accessToken, result.refreshToken);
|
|
96
118
|
setCsrfCookie(c);
|
|
97
119
|
// Tokens no body também: compat com clientes API-first (@oktis-works/api-client)
|
|
98
|
-
return c.json(
|
|
99
|
-
user: result.user,
|
|
100
|
-
tenantId: result.tenantId,
|
|
101
|
-
accessToken: result.accessToken,
|
|
102
|
-
refreshToken: result.refreshToken,
|
|
103
|
-
}, 201);
|
|
120
|
+
return c.json(authResponse(c, result), 201);
|
|
104
121
|
}
|
|
105
122
|
catch (error) {
|
|
106
123
|
const message = error instanceof Error ? error.message : 'Registration failed';
|
|
@@ -133,12 +150,7 @@ authRouter.post('/login', async (c) => {
|
|
|
133
150
|
setCsrfCookie(c);
|
|
134
151
|
// Tokens no body também: clientes API-first (@oktis-works/api-client) usam
|
|
135
152
|
// Bearer; o browser continua nos cookies HttpOnly (nunca localStorage).
|
|
136
|
-
return c.json(
|
|
137
|
-
user: result.user,
|
|
138
|
-
tenantId: result.tenantId,
|
|
139
|
-
accessToken: result.accessToken,
|
|
140
|
-
refreshToken: result.refreshToken,
|
|
141
|
-
});
|
|
153
|
+
return c.json(authResponse(c, result));
|
|
142
154
|
}
|
|
143
155
|
catch (error) {
|
|
144
156
|
const message = error instanceof Error ? error.message : 'Login failed';
|
|
@@ -154,24 +166,32 @@ authRouter.post('/refresh', async (c) => {
|
|
|
154
166
|
if (!refreshToken) {
|
|
155
167
|
return c.json({ error: 'Missing refresh token' }, 400);
|
|
156
168
|
}
|
|
157
|
-
const tokens = await authService.refreshToken(refreshToken
|
|
169
|
+
const tokens = await authService.refreshToken(refreshToken, {
|
|
170
|
+
ipAddress: c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip'),
|
|
171
|
+
userAgent: c.req.header('user-agent'),
|
|
172
|
+
});
|
|
158
173
|
if (!tokens) {
|
|
159
174
|
clearAuthCookies(c);
|
|
160
175
|
return c.json({ error: 'Invalid refresh token' }, 401);
|
|
161
176
|
}
|
|
162
177
|
setAuthCookies(c, tokens.accessToken, tokens.refreshToken);
|
|
163
|
-
|
|
164
|
-
|
|
178
|
+
if (!getCsrfToken(c))
|
|
179
|
+
setCsrfCookie(c);
|
|
180
|
+
// Browser usa cookies; apenas clientes sem Origin recebem tokens no body.
|
|
181
|
+
return c.json(isBrowserRequest(c)
|
|
182
|
+
? { success: true }
|
|
183
|
+
: { success: true, accessToken: tokens.accessToken, refreshToken: tokens.refreshToken });
|
|
165
184
|
}
|
|
166
185
|
catch (error) {
|
|
167
186
|
const message = error instanceof Error ? error.message : 'Token refresh failed';
|
|
168
187
|
return c.json({ error: message }, 400);
|
|
169
188
|
}
|
|
170
189
|
});
|
|
171
|
-
// POST /auth/logout — encerra sessão pelo refresh_token do cookie
|
|
190
|
+
// POST /auth/logout — encerra sessão pelo refresh_token do cookie ou do body
|
|
172
191
|
authRouter.post('/logout', async (c) => {
|
|
173
192
|
try {
|
|
174
|
-
const
|
|
193
|
+
const body = await c.req.json().catch(() => ({}));
|
|
194
|
+
const refreshToken = getCookie(c, 'refresh_token') ?? body['refreshToken'];
|
|
175
195
|
if (refreshToken) {
|
|
176
196
|
await authService.logout(refreshToken);
|
|
177
197
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,7 +97,7 @@ function buildOpenApiDocument(origin) {
|
|
|
97
97
|
info: {
|
|
98
98
|
title: 'OkCMS API',
|
|
99
99
|
version: CMS_VERSION,
|
|
100
|
-
description: 'CMS híbrido, modular e API-first. Autenticação JWT Bearer; clientes browser também devem enviar o par CSRF (cookie
|
|
100
|
+
description: 'CMS híbrido, modular e API-first. Autenticação JWT Bearer; clientes browser também devem enviar o par CSRF (cookie configurado + header X-CSRF-Token). Rate limit padrão: 300 req/min por tenant+IP.',
|
|
101
101
|
},
|
|
102
102
|
servers: [{ url: origin }],
|
|
103
103
|
components: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/csrf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/utils/csrf.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/utils/csrf.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAoBnD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAIxE;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAEnF"}
|
package/dist/utils/csrf.js
CHANGED
package/dist/utils/csrf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/utils/csrf.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AAEzD,+EAA+E;AAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,YAAY,CAAC;AACnD,MAAM,gBAAgB,GAAG;IACvB,2EAA2E;IAC3E,2EAA2E;IAC3E,6CAA6C;IAC7C,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;IAClC,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM;CAC7B,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,CAAkC;IAC9D,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,YAAY,CAAC,CAAkC;IAC7D,OAAO,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/utils/csrf.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;AAC5B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;AAEzD,+EAA+E;AAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,YAAY,CAAC;AACnD,MAAM,gBAAgB,GAAG;IACvB,2EAA2E;IAC3E,2EAA2E;IAC3E,6CAA6C;IAC7C,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;IAClC,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM;CAC7B,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,CAAkC;IAC9D,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,YAAY,CAAC,CAAkC;IAC7D,OAAO,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC"}
|