This website requires JavaScript.
fae06fb8b8
feat(web): UDT-004 gestion de roles + UserForm dinamico
dmolinari
2026-04-15 12:58:08 -03:00
6f999b8fcd
feat(api): UDT-004 controller de roles + refactor validator UDT-003 a lookup dinamico
dmolinari
2026-04-15 12:50:24 -03:00
34b714750a
feat(api): UDT-004 dominio + repositorio + application roles (tdd)
dmolinari
2026-04-15 12:31:29 -03:00
e0e9ec3b88
Actualizar README.md
dmolinari
2026-04-15 14:28:52 +00:00
c6352e1e39
Merge pull request 'docs: add minimal README' (#7 ) from chore/readme into main
dmolinari
2026-04-15 14:27:49 +00:00
ddc7c8d53d
docs: add minimal README with stack, structure, run instructions
dmolinari
2026-04-15 11:27:20 -03:00
890da06f71
Merge pull request 'UDT-003: Registro de Usuarios (admin-only) + fix JWT claim mapping' (#4 ) from feature/UDT-003 into main
dmolinari
2026-04-15 14:23:53 +00:00
bce591e63c
fix(auth): preserve JWT claim names in bearer middleware
dmolinari
2026-04-15 11:03:15 -03:00
dd99e5cc69
feat(web): UDT-003 formulario de alta de usuarios (admin)
dmolinari
2026-04-15 10:57:11 -03:00
3d598faffc
feat(api): UDT-003 registro de usuarios — backend completo (Phases 1-6)
dmolinari
2026-04-15 10:47:48 -03:00
023d30fce4
chore(repo): gitignore .claude/ local state and autogen src/src.sln
dmolinari
2026-04-14 14:39:38 -03:00
5b3797a81c
Merge pull request 'UDT-002: Logout + Refresh Token con rotación y chain revocation' (#3 ) from feature/UDT-002 into main
dmolinari
2026-04-14 17:37:47 +00:00
96dbeecc0f
fix(web): use endsWith for /auth path exclusion in refresh interceptor
dmolinari
2026-04-14 13:59:37 -03:00
7fadb88da0
docs(web): smoke test checklist UDT-002 — login, refresh, logout, reuse detection
dmolinari
2026-04-14 13:52:59 -03:00
dd4f4dbd5e
test(web): LoginPage — verify setAuth receives expiresIn and calculates expiresAt
dmolinari
2026-04-14 13:51:41 -03:00
bdaaaffaf6
feat(web): axiosClient — request/response interceptors with singleton refresh queue
dmolinari
2026-04-14 13:50:49 -03:00
d40b7247fc
feat(web): authApi — add refresh() and logout() with types and tests
dmolinari
2026-04-14 13:49:39 -03:00
f806e0a483
test(web): authStore TDD — refreshToken, expiresAt, clearAuth, updateAccess, logout async
dmolinari
2026-04-14 13:48:50 -03:00
f1d4ea0047
fix(test): RefreshTokenRepository tests use Respawn pattern instead of transaction isolation
dmolinari
2026-04-14 13:45:53 -03:00
fd2ff8a802
feat(api): map InvalidRefreshTokenException and TokenReuseDetectedException to generic 401
dmolinari
2026-04-14 13:28:45 -03:00
8768067fdd
feat(api): add /refresh [AllowAnonymous] and /logout [Authorize] endpoints to AuthController
dmolinari
2026-04-14 13:28:45 -03:00
4e7b2690bd
test(api): add Refresh and Logout endpoint integration tests RED
dmolinari
2026-04-14 13:28:44 -03:00
aed26e3de9
feat(infra): register RefreshTokenRepository, RefreshTokenGenerator, ClientContext and handlers in DI
dmolinari
2026-04-14 13:28:36 -03:00
cb4250f7b3
feat(infra): implement ClientContext for IP and UserAgent from IHttpContextAccessor
dmolinari
2026-04-14 13:28:35 -03:00
19ac807500
feat(infra): add RefreshTokenDays to JwtOptions and AuthOptions config
dmolinari
2026-04-14 13:28:35 -03:00
0c809da633
feat(infra): implement RefreshTokenRepository with Dapper and add GetByIdAsync to UsuarioRepository
dmolinari
2026-04-14 13:28:29 -03:00
e405c0453b
test(infra): add RefreshTokenRepository integration tests RED
dmolinari
2026-04-14 13:28:28 -03:00
d326dd87e0
feat(infra): implement RefreshTokenGenerator with cryptographic random bytes
dmolinari
2026-04-14 13:28:24 -03:00
2806e8dfa6
test(infra): add RefreshTokenGenerator tests RED
dmolinari
2026-04-14 13:28:24 -03:00
c910ff2fc5
feat(infra): implement GetPrincipalFromExpiredToken in JwtService
dmolinari
2026-04-14 13:28:20 -03:00
a363e3658d
test(infra): add GetPrincipalFromExpiredToken tests for JwtService RED
dmolinari
2026-04-14 13:28:20 -03:00
8bbd2b6f2a
feat(app): update LoginCommandHandler to persist hashed refresh token on login
dmolinari
2026-04-14 13:28:16 -03:00
b79efc778a
test(app): extend LoginCommandHandler tests with refresh token persistence cases RED
dmolinari
2026-04-14 13:28:15 -03:00
6c02197369
feat(app): implement LogoutCommand handler with idempotent revocation
dmolinari
2026-04-14 13:28:10 -03:00
15a7687e4c
test(app): add LogoutCommandHandler tests RED
dmolinari
2026-04-14 13:28:10 -03:00
f5e67b78a5
feat(app): implement RefreshCommand handler with token rotation and chain revocation
dmolinari
2026-04-14 13:28:06 -03:00
25639398c2
test(app): add RefreshCommandHandler tests RED
dmolinari
2026-04-14 13:28:02 -03:00
971f6f572f
feat(app): add IClientContext abstraction for IP and UserAgent
dmolinari
2026-04-14 13:17:12 -03:00
84006776b6
feat(app): add IRefreshTokenGenerator abstraction
dmolinari
2026-04-14 13:17:12 -03:00
802c89ffe5
feat(app): add IRefreshTokenRepository abstraction
dmolinari
2026-04-14 13:17:11 -03:00
ba6dffb137
feat(app): extend IJwtService with GetPrincipalFromExpiredToken
dmolinari
2026-04-14 13:17:11 -03:00
83c6a95ee2
feat(domain): add InvalidRefreshTokenException and TokenReuseDetectedException
dmolinari
2026-04-14 13:16:44 -03:00
aacfd29673
feat(domain): add TokenHasher SHA-256 base64url helper
dmolinari
2026-04-14 13:16:43 -03:00
22aff10330
test(domain): add TokenHasher tests RED
dmolinari
2026-04-14 13:16:43 -03:00
99bb3364c3
feat(domain): add RefreshToken entity with factory methods and IsActive logic
dmolinari
2026-04-14 13:16:38 -03:00
2efe4115c4
test(domain): add RefreshToken entity tests RED
dmolinari
2026-04-14 13:16:36 -03:00
ffb68db57e
db(auth): add V002__create_refresh_token migration with chain revocation indexes
dmolinari
2026-04-14 13:14:47 -03:00
3b66415e17
fix(web): default API port to 5212
dmolinari
2026-04-14 12:54:36 -03:00
cc532ff319
Merge pull request 'UI Design System: shadcn/ui + Tailwind 4 + layout shell' (#2 ) from feature/UI-DESIGN-SYSTEM into main
dmolinari
2026-04-14 14:45:08 +00:00
b3d78ff56d
Merge pull request 'UDT-001: Login (scaffolding + JWT RS256 end-to-end)' (#1 ) from feature/UDT-001 into main
dmolinari
2026-04-14 14:44:28 +00:00
5e1e979377
refactor(web): LoginPage con shadcn Form, zod validation y Alert destructive
dmolinari
2026-04-14 11:21:53 -03:00
7eea0fd17c
feat(ui): app shell con Sidebar, Header, ThemeToggle y HomePage grid de modulos
dmolinari
2026-04-14 11:21:48 -03:00
8acd2975ba
feat(ui): shadcn/ui setup con componentes base, fonts y design tokens
dmolinari
2026-04-14 11:21:43 -03:00
a15d8c166e
chore(udt-001): vite scaffold default assets
dmolinari
2026-04-13 21:36:49 -03:00
4fa891f340
chore(udt-001): add skill registry
dmolinari
2026-04-13 21:36:41 -03:00
6c4d572111
docs(udt-001): smoke test checklist
dmolinari
2026-04-13 21:36:41 -03:00
f4f063f5f0
test(udt-001): frontend tests (authStore, authApi, LoginPage - 11 tests)
dmolinari
2026-04-13 21:36:40 -03:00
a692576bc3
feat(udt-001): frontend auth UI (Zustand store, TanStack Query, LoginPage, router)
dmolinari
2026-04-13 21:36:32 -03:00
5f6ebccb54
feat(udt-001): frontend scaffold (Vite 6 + React 19 + TS strict + Tailwind 4)
dmolinari
2026-04-13 21:36:17 -03:00
b657dc0d2a
test(udt-001): backend unit and integration tests (30 tests)
dmolinari
2026-04-13 21:36:09 -03:00
9891f96618
feat(udt-001): api layer with AuthController, Program.cs and Serilog
dmolinari
2026-04-13 21:36:08 -03:00
ca57ce33b5
feat(udt-001): infrastructure (Dapper, BCrypt, JWT RS256, dispatcher)
dmolinari
2026-04-13 21:36:02 -03:00
8c26cd3ac5
feat(udt-001): application layer with LoginCommandHandler and ports
dmolinari
2026-04-13 21:36:01 -03:00
2111070c77
feat(udt-001): domain layer with Usuario entity
dmolinari
2026-04-13 21:36:00 -03:00
88ecaa2c7f
chore(udt-001): RSA key generation script
dmolinari
2026-04-13 21:35:56 -03:00
1e5cac737b
feat(udt-001): db schema for Usuario with admin seed
dmolinari
2026-04-13 21:35:55 -03:00
c666729685
chore(udt-001): repo scaffold with central package management
dmolinari
2026-04-13 21:35:51 -03:00
376373a801
.gitignore
dmolinari
2026-04-13 18:27:26 -03:00