From 8e0182aa503dbe2f9eb2cfb29a2bcf74ec400292 Mon Sep 17 00:00:00 2001 From: Rafael Date: Wed, 24 Dec 2025 19:03:50 -0300 Subject: [PATCH] FEAT: add TOTP support for change password and local build support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Pass TOTP code to DUC for Keycloak users with MFA - Add Dockerfile.local for local protospack builds - Add .dockerignore to exclude node_modules from Docker context 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .dockerignore | 12 ++++++++++++ Dockerfile.local | 14 ++++++++++++-- src/modules/auth/auth.controller.ts | 3 ++- src/modules/auth/auth.service.ts | 2 ++ 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c9fc6a8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +node_modules +dist +.git +*.log +npm-debug.log* +.DS_Store +.env +.env.* +coverage +.nyc_output +*.tgz +!protospack.tgz diff --git a/Dockerfile.local b/Dockerfile.local index 03430e4..7f56186 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -1,4 +1,4 @@ -FROM node:20-alpine AS base_image +FROM node:22-alpine AS base_image RUN npm install -g npm@latest FROM base_image AS build_base @@ -19,10 +19,20 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ # Local build with secrets +# Check if local protospack tarball exists (for local dev) FROM build_base AS build +COPY protospack*.tgz* ./ RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \ aws codeartifact login --tool npm --namespace @dadosfera --repository dadosfera-npm --domain dadosfera --domain-owner 611330257153 --region us-east-1 -RUN npm ci +RUN if [ -f "protospack.tgz" ]; then \ + echo "Installing from local protospack tarball..." && \ + npm install ./protospack.tgz --save-exact && \ + npm ci --ignore-scripts && \ + npm rebuild; \ + else \ + echo "Installing from CodeArtifact..." && \ + npm ci; \ + fi COPY . . RUN npm run build diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts index 3d86f14..3199fe3 100644 --- a/src/modules/auth/auth.controller.ts +++ b/src/modules/auth/auth.controller.ts @@ -190,13 +190,14 @@ export class AuthController { ) { this.logger.info('/auth - change-password'); - const { oldPassword, newPassword } = body; + const { oldPassword, newPassword, totpCode } = body; const { authorization: accessToken } = headers; return this.authClient.changePassword({ accessToken, oldPassword, newPassword, + totpCode, }); } diff --git a/src/modules/auth/auth.service.ts b/src/modules/auth/auth.service.ts index c1b85f6..6d67b95 100644 --- a/src/modules/auth/auth.service.ts +++ b/src/modules/auth/auth.service.ts @@ -143,6 +143,7 @@ export class AuthClientService implements OnModuleInit { accessToken, oldPassword, newPassword, + totpCode, }: AuthChangePasswordRequest) { this.logger.info('ChangePassword'); @@ -151,6 +152,7 @@ export class AuthClientService implements OnModuleInit { accessToken, oldPassword, newPassword, + totpCode, }), ); }