From 4f38b4a6d0fdc7597b8371499a36e60566c8212f Mon Sep 17 00:00:00 2001 From: rykuno Date: Sun, 1 Sep 2024 16:32:50 -0500 Subject: [PATCH] moved dtos within api folder --- Dockerfile.minio | 3 + minio-console.conf.template | 41 +++++++++++ render.yaml | 68 +++++++++++++++++++ .../server/api/controllers/iam.controller.ts | 8 +-- .../api}/dtos/register-email.dto.ts | 0 .../{ => server/api}/dtos/signin-email.dto.ts | 0 .../{ => server/api}/dtos/update-email.dto.ts | 0 .../{ => server/api}/dtos/verify-email.dto.ts | 1 + src/lib/server/api/queues.ts | 0 src/lib/server/api/services/iam.service.ts | 4 +- .../(app)/settings/account/+page.server.ts | 11 ++- src/routes/(app)/settings/account/schemas.ts | 9 +++ .../settings/account/update-email-card.svelte | 4 +- src/routes/(auth)/register/+page.server.ts | 11 ++- src/routes/(auth)/register/+page.svelte | 7 +- src/routes/(auth)/register/schemas.ts | 12 ++++ 16 files changed, 155 insertions(+), 24 deletions(-) create mode 100644 Dockerfile.minio create mode 100644 minio-console.conf.template rename src/lib/{ => server/api}/dtos/register-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/signin-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/update-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/verify-email.dto.ts (99%) delete mode 100644 src/lib/server/api/queues.ts create mode 100644 src/routes/(app)/settings/account/schemas.ts create mode 100644 src/routes/(auth)/register/schemas.ts diff --git a/Dockerfile.minio b/Dockerfile.minio new file mode 100644 index 0000000..78a36b0 --- /dev/null +++ b/Dockerfile.minio @@ -0,0 +1,3 @@ +FROM nginx:stable-alpine-slim +COPY minio-console.conf.template /etc/nginx/templates/ +RUN rm /etc/nginx/conf.d/default.conf /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh \ No newline at end of file diff --git a/minio-console.conf.template b/minio-console.conf.template new file mode 100644 index 0000000..34d022f --- /dev/null +++ b/minio-console.conf.template @@ -0,0 +1,41 @@ +upstream minio_console { + server ${MINIO_HOST}:${MINIO_CONSOLE_PORT}; +} + +server { + listen ${PORT}; + + # Allow special characters in headers + ignore_invalid_headers off; + # Allow any size file to be uploaded. + # Set to a value such as 1000m; to restrict file size to a specific value + client_max_body_size 0; + # Disable buffering + proxy_buffering off; + proxy_request_buffering off; + + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-NginX-Proxy true; + + # This is necessary to pass the correct IP to be hashed + real_ip_header X-Real-IP; + + proxy_connect_timeout 300; + + # To support websockets in MinIO versions released after January 2023 + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress) + # Uncomment the following line to set the Origin request to an empty string + # proxy_set_header Origin ''; + + chunked_transfer_encoding off; + + proxy_pass http://minio_console; # This uses the upstream directive definition to load balance + } +} \ No newline at end of file diff --git a/render.yaml b/render.yaml index fea7eb4..5dcf25f 100644 --- a/render.yaml +++ b/render.yaml @@ -1,4 +1,5 @@ services: + # Web - type: web name: web runtime: node @@ -9,6 +10,21 @@ services: startCommand: npm run db:migrate && node build/index.js healthCheckPath: / envVars: + - key: STORAGE_API_SECRET_KEY + fromService: + name: minio-server + type: web + property: MINIO_ROOT_PASSWORD + - key: STORAGE_ACCESS_KEY + fromService: + name: minio-server + type: web + property: MINIO_ROOT_USER + - key: STORAGE_API_URL + fromService: + name: minio-server + type: web + property: connectionString - key: DATABASE_URL fromDatabase: name: tofustack @@ -23,10 +39,62 @@ services: name: web type: web property: host + # Redis - type: redis name: redis ipAllowList: [] # Only allow internal connections + # MinIO Server + - type: web + name: minio-server + healthCheckPath: /minio/health/liveweb + runtime: image + image: + url: docker.io/minio/minio:latest + dockerCommand: minio server /data --address $HOST:$PORT --console-address $HOST:$CONSOLE_PORT + # Use the following 'dockerCommand' if removing the 'minio-console' + # web service + # dockerCommand: minio server /data --address $HOST:$PORT + autoDeploy: false + disk: + name: data + mountPath: /data + envVars: + - key: MINIO_ROOT_USER + generateValue: true + - key: MINIO_ROOT_PASSWORD + generateValue: true + - key: HOST + value: "0.0.0.0" + - key: PORT + value: 9000 + - key: CONSOLE_PORT + value: 9090 + # Uncomment the following key/value pair if you are removing the + # 'minio-console' web service + # - key: MINIO_BROWSER + # value: "off" + # MinIO Console + - type: web + name: minio-console + runtime: docker + dockerContext: / + dockerfilePath: ./Dockerfile.minio + autoDeploy: false + envVars: + - key: PORT + value: 10000 + - key: MINIO_HOST + fromService: + name: minio-server + type: web + property: host + - key: MINIO_CONSOLE_PORT + fromService: + name: minio-server + type: web + envVarKey: CONSOLE_PORT + databases: - name: db databaseName: tofustack diff --git a/src/lib/server/api/controllers/iam.controller.ts b/src/lib/server/api/controllers/iam.controller.ts index 9fd2b2d..41ec692 100644 --- a/src/lib/server/api/controllers/iam.controller.ts +++ b/src/lib/server/api/controllers/iam.controller.ts @@ -7,10 +7,10 @@ import { LuciaProvider } from '../providers/lucia.provider'; import { limiter } from '../middlewares/rate-limiter.middlware'; import { requireAuth } from '../middlewares/auth.middleware'; import { Controler } from '../common/classes/controller.class'; -import { registerEmailDto } from '$lib/dtos/register-email.dto'; -import { signInEmailDto } from '$lib/dtos/signin-email.dto'; -import { updateEmailDto } from '$lib/dtos/update-email.dto'; -import { verifyEmailDto } from '$lib/dtos/verify-email.dto'; +import { registerEmailDto } from '$lib/server/api/dtos/register-email.dto'; +import { signInEmailDto } from '$lib/server/api/dtos/signin-email.dto'; +import { updateEmailDto } from '$lib/server/api/dtos/update-email.dto'; +import { verifyEmailDto } from '$lib/server/api/dtos/verify-email.dto'; @injectable() export class IamController extends Controler { diff --git a/src/lib/dtos/register-email.dto.ts b/src/lib/server/api/dtos/register-email.dto.ts similarity index 100% rename from src/lib/dtos/register-email.dto.ts rename to src/lib/server/api/dtos/register-email.dto.ts diff --git a/src/lib/dtos/signin-email.dto.ts b/src/lib/server/api/dtos/signin-email.dto.ts similarity index 100% rename from src/lib/dtos/signin-email.dto.ts rename to src/lib/server/api/dtos/signin-email.dto.ts diff --git a/src/lib/dtos/update-email.dto.ts b/src/lib/server/api/dtos/update-email.dto.ts similarity index 100% rename from src/lib/dtos/update-email.dto.ts rename to src/lib/server/api/dtos/update-email.dto.ts diff --git a/src/lib/dtos/verify-email.dto.ts b/src/lib/server/api/dtos/verify-email.dto.ts similarity index 99% rename from src/lib/dtos/verify-email.dto.ts rename to src/lib/server/api/dtos/verify-email.dto.ts index 0366a20..bd1a395 100644 --- a/src/lib/dtos/verify-email.dto.ts +++ b/src/lib/server/api/dtos/verify-email.dto.ts @@ -3,4 +3,5 @@ import { z } from 'zod'; export const verifyEmailDto = z.object({ token: z.string() }); + export type VerifyEmailDto = z.infer; diff --git a/src/lib/server/api/queues.ts b/src/lib/server/api/queues.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/server/api/services/iam.service.ts b/src/lib/server/api/services/iam.service.ts index 9786f4e..35bce7d 100644 --- a/src/lib/server/api/services/iam.service.ts +++ b/src/lib/server/api/services/iam.service.ts @@ -3,8 +3,8 @@ import { MailerService } from './mailer.service'; import { TokensService } from './tokens.service'; import { LuciaProvider } from '../providers/lucia.provider'; import { UsersRepository } from '../repositories/users.repository'; -import type { SignInEmailDto } from '../../../dtos/signin-email.dto'; -import type { RegisterEmailDto } from '../../../dtos/register-email.dto'; +import type { SignInEmailDto } from '../dtos/signin-email.dto'; +import type { RegisterEmailDto } from '../dtos/register-email.dto'; import { LoginRequestsRepository } from '../repositories/login-requests.repository'; import { LoginVerificationEmail } from '../emails/login-verification.email'; import { DatabaseProvider } from '../providers/database.provider'; diff --git a/src/routes/(app)/settings/account/+page.server.ts b/src/routes/(app)/settings/account/+page.server.ts index f5e115a..31f55f1 100644 --- a/src/routes/(app)/settings/account/+page.server.ts +++ b/src/routes/(app)/settings/account/+page.server.ts @@ -1,29 +1,28 @@ import { zod } from "sveltekit-superforms/adapters"; -import { updateEmailDto } from "$lib/dtos/update-email.dto.js"; -import { verifyEmailDto } from "$lib/dtos/verify-email.dto.js"; import { fail, setError, superValidate } from "sveltekit-superforms"; import { StatusCodes } from "$lib/constants/status-codes.js"; +import { updateEmailFormSchema, verifyEmailFormSchema } from "./schemas.js"; export let load = async (event) => { const authedUser = await event.locals.getAuthedUserOrThrow() return { authedUser, - updateEmailForm: await superValidate(authedUser, zod(updateEmailDto)), - verifyEmailForm: await superValidate(zod(verifyEmailDto)) + updateEmailForm: await superValidate(authedUser, zod(updateEmailFormSchema)), + verifyEmailForm: await superValidate(zod(verifyEmailFormSchema)) }; }; export const actions = { updateEmail: async ({ request, locals }) => { - const updateEmailForm = await superValidate(request, zod(updateEmailDto)); + const updateEmailForm = await superValidate(request, zod(updateEmailFormSchema)); if (!updateEmailForm.valid) return fail(StatusCodes.BAD_REQUEST, { updateEmailForm }) const { error } = await locals.api.iam.email.$patch({ json: updateEmailForm.data }).then(locals.parseApiResponse); if (error) return setError(updateEmailForm, 'email', error); return { updateEmailForm } }, verifyEmail: async ({ request, locals }) => { - const verifyEmailForm = await superValidate(request, zod(verifyEmailDto)); + const verifyEmailForm = await superValidate(request, zod(verifyEmailFormSchema)); console.log(verifyEmailForm) if (!verifyEmailForm.valid) return fail(StatusCodes.BAD_REQUEST, { verifyEmailForm }) const { error } = await locals.api.iam.email.verification.$post({ json: verifyEmailForm.data }).then(locals.parseApiResponse); diff --git a/src/routes/(app)/settings/account/schemas.ts b/src/routes/(app)/settings/account/schemas.ts new file mode 100644 index 0000000..793dabd --- /dev/null +++ b/src/routes/(app)/settings/account/schemas.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const verifyEmailFormSchema = z.object({ + token: z.string() +}); + +export const updateEmailFormSchema = z.object({ + email: z.string().email() +}); \ No newline at end of file diff --git a/src/routes/(app)/settings/account/update-email-card.svelte b/src/routes/(app)/settings/account/update-email-card.svelte index a62ca27..2b4c44a 100644 --- a/src/routes/(app)/settings/account/update-email-card.svelte +++ b/src/routes/(app)/settings/account/update-email-card.svelte @@ -1,7 +1,5 @@