From 057d41e1c24282bed4b9d4800e7cf86293cf8fb0 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 31 Aug 2026 22:51:44 -0400 Subject: [PATCH] add text input validation --- .../src/app/dashboard/admin-users/page.tsx | 4 + .../src/app/dashboard/companies/[id]/page.tsx | 57 +++---- apps/admin/src/app/forgot-password/page.tsx | 1 + apps/admin/src/app/reset-password/page.tsx | 2 + apps/api/src/lib/inputValidation.ts | 6 +- apps/api/src/lib/zodValidation.ts | 150 ++++++++++++++++-- apps/api/src/modules/admin/admin.schemas.ts | 54 ++++--- .../modules/analytics/analytics.schemas.ts | 10 +- .../src/modules/auth/auth.account.schemas.ts | 14 +- .../src/modules/auth/auth.company.schemas.ts | 25 ++- .../src/modules/auth/auth.employee.schemas.ts | 4 +- .../src/modules/auth/auth.renter.schemas.ts | 17 +- .../src/modules/billing/billing.schemas.ts | 2 +- .../api/src/modules/carplace/carplace.repo.ts | 2 + .../src/modules/carplace/carplace.schemas.ts | 21 ++- .../src/modules/carplace/carplace.service.ts | 1 + .../src/modules/companies/company.schemas.ts | 94 ++++++----- .../modules/complaints/complaint.schemas.ts | 12 +- .../src/modules/customers/customer.repo.ts | 1 + .../src/modules/customers/customer.routes.ts | 4 +- .../src/modules/customers/customer.schemas.ts | 54 +++++-- .../licenses/license.validation.schemas.ts | 3 +- apps/api/src/modules/offers/offer.schemas.ts | 8 +- .../src/modules/payments/payment.schemas.ts | 2 +- .../reservations/reservation.schemas.ts | 57 +++++-- .../api/src/modules/reviews/review.schemas.ts | 2 +- apps/api/src/modules/site/site.repo.ts | 2 + apps/api/src/modules/site/site.schemas.ts | 22 ++- apps/api/src/modules/site/site.service.ts | 1 + .../subscriptions/subscription.schemas.ts | 6 +- apps/api/src/modules/team/team.schemas.ts | 15 +- .../src/modules/vehicles/vehicle.schemas.ts | 4 +- .../src/services/additionalDriverService.ts | 2 + apps/api/src/services/teamService.ts | 3 +- .../carplace/CarplaceSearchForm.tsx | 6 +- .../carplace/ProgressiveBookingFlow.tsx | 23 ++- .../src/app/(dashboard)/billing/page.tsx | 4 +- .../src/app/(dashboard)/complaints/page.tsx | 5 + .../src/app/(dashboard)/fleet/page.tsx | 5 +- .../src/app/(dashboard)/offers/page.tsx | 6 +- .../src/app/(dashboard)/reviews/page.tsx | 1 + .../src/app/(dashboard)/settings/page.tsx | 18 ++- .../ForgotPasswordPageClient.tsx | 1 + .../ResetPasswordPageClient.tsx | 2 + .../app/sign-up/[[...sign-up]]/SignUpForm.tsx | 38 ++++- .../src/components/LocationDropdownField.tsx | 4 +- .../reservations/new/ReservationReview.tsx | 11 +- .../reservations/new/ReservationWizard.tsx | 120 +++++++++++--- .../new/reservationWizard.copy.ts | 15 ++ .../new/reservationWizard.reducer.ts | 17 +- .../new/reservationWizard.schemas.ts | 68 ++++++-- .../new/reservationWizard.submit.ts | 57 +++---- .../new/reservationWizard.types.ts | 3 + .../src/components/team/InviteModal.tsx | 37 ++++- apps/dashboard/src/hooks/useTeam.ts | 1 + .../src/components/auth/ResetPasswordForm.tsx | 2 + .../src/components/auth/SignInForm.tsx | 1 + .../src/components/forms/TextInput.tsx | 4 + input-validation-plan.md | 65 ++++++++ .../migration.sql | 50 ++++++ packages/database/prisma/schema.prisma | 44 ++--- 61 files changed, 968 insertions(+), 302 deletions(-) create mode 100644 packages/database/prisma/migrations/20260901090000_input_language_validation/migration.sql diff --git a/apps/admin/src/app/dashboard/admin-users/page.tsx b/apps/admin/src/app/dashboard/admin-users/page.tsx index 63079e4..aa03f19 100644 --- a/apps/admin/src/app/dashboard/admin-users/page.tsx +++ b/apps/admin/src/app/dashboard/admin-users/page.tsx @@ -210,6 +210,7 @@ export default function AdminUsersPage() { setForm({ ...form, firstName: e.target.value })} @@ -219,6 +220,7 @@ export default function AdminUsersPage() { setForm({ ...form, lastName: e.target.value })} @@ -230,6 +232,7 @@ export default function AdminUsersPage() { setForm({ ...form, email: e.target.value })} @@ -244,6 +247,7 @@ export default function AdminUsersPage() { type={showPassword ? 'text' : 'password'} required={!editingAdminId} minLength={editingAdminId ? undefined : 8} + maxLength={128} className="w-full px-3 py-2 pr-10 rounded-xl bg-zinc-800 border border-zinc-700 text-zinc-100 text-sm focus:outline-none focus:ring-2 focus:ring-emerald-500" value={form.password} onChange={(e) => setForm({ ...form, password: e.target.value })} diff --git a/apps/admin/src/app/dashboard/companies/[id]/page.tsx b/apps/admin/src/app/dashboard/companies/[id]/page.tsx index f766f3a..0ae1861 100644 --- a/apps/admin/src/app/dashboard/companies/[id]/page.tsx +++ b/apps/admin/src/app/dashboard/companies/[id]/page.tsx @@ -203,6 +203,7 @@ const STATUS_COLORS: Record = { } const INPUT_CLASS = 'mt-1 w-full rounded-xl border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100 outline-none focus:border-emerald-500' +const MOROCCAN_PHONE_PATTERN = '^(?:(?:\\+|00)212|0)\\s?[5-7](?:\\s?\\d){8}$' const LABEL_CLASS = 'text-xs font-medium uppercase tracking-wide text-zinc-500' const COMPANY_TABS = [ @@ -612,19 +613,19 @@ export default function AdminCompanyDetailPage() {
Company status @@ -632,7 +633,7 @@ export default function AdminCompanyDetailPage() {
@@ -720,23 +721,23 @@ export default function AdminCompanyDetailPage() {
@@ -887,15 +888,15 @@ export default function AdminCompanyDetailPage() {