This commit is contained in:
2025-10-18 18:30:02 -03:00
parent 865cb12fbc
commit d45aa1d70e
4 changed files with 18 additions and 16 deletions

View File

@@ -2,7 +2,7 @@ import { LockIcon } from 'lucide-react'
import type { Route } from './+types' import type { Route } from './+types'
export function meta({}: Route.MetaArgs) { export function meta({}: Route.MetaArgs) {
return [{ title: 'Acesso negado' }] return [{ title: 'Acesso negado · EDUSEG®' }]
} }
export default function Deny({}: Route.ComponentProps) { export default function Deny({}: Route.ComponentProps) {

View File

@@ -21,13 +21,14 @@ import { z } from 'zod'
const schema = z.object({ const schema = z.object({
username: z username: z
.string() .string()
.trim()
.nonempty('Digite seu Email ou CPF') .nonempty('Digite seu Email ou CPF')
.refine((val) => { .refine((val) => {
const onlyDigits = val.replace(/\D/g, '') const onlyDigits = val.replace(/\D/g, '')
return onlyDigits.length === 11 return onlyDigits.length === 11
? isValidCPF(val) ? isValidCPF(val)
: z.string().email().safeParse(val).success : z.email().safeParse(val).success
}, 'Deve ser um Email ou CPF válido') }, 'Deve ser um Email ou CPF válido')
}) })

View File

@@ -13,7 +13,7 @@ import { zodResolver } from '@hookform/resolvers/zod'
import { Loader2Icon } from 'lucide-react' import { Loader2Icon } from 'lucide-react'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { useForm } from 'react-hook-form' import { useForm } from 'react-hook-form'
import { Link, redirect, useFetcher } from 'react-router' import { Link, useFetcher } from 'react-router'
import { z } from 'zod' import { z } from 'zod'
import logo from '@/components/logo.svg' import logo from '@/components/logo.svg'
@@ -26,15 +26,19 @@ import * as httpStatus from '@/lib/http-status'
const schema = z.object({ const schema = z.object({
username: z username: z
.string() .string()
.trim()
.nonempty('Digite seu Email ou CPF') .nonempty('Digite seu Email ou CPF')
.refine((val) => { .refine((val) => {
const onlyDigits = val.replace(/\D/g, '') const onlyDigits = val.replace(/\D/g, '')
return onlyDigits.length === 11 return onlyDigits.length === 11
? isValidCPF(val) ? isValidCPF(val)
: z.string().email().safeParse(val).success : z.email().safeParse(val).success
}, 'Deve ser um Email ou CPF válido'), }, 'Deve ser um Email ou CPF válido'),
password: z.string().nonempty('Digite sua senha') password: z
.string()
.nonempty('Digite sua senha')
.min(6, 'Deve ter no mínimo 6 caracteres')
}) })
type Schema = z.infer<typeof schema> type Schema = z.infer<typeof schema>
@@ -43,13 +47,6 @@ export function meta({}: Route.MetaArgs) {
return [{ title: 'EDUSEG®' }] return [{ title: 'EDUSEG®' }]
} }
export async function loader({ request }: Route.ActionArgs) {
const url = new URL(request.url)
if (!url.searchParams.has('client_id')) {
return redirect('//scorm.eduseg.workers.dev/')
}
}
export async function action({ request, context }: Route.ActionArgs) { export async function action({ request, context }: Route.ActionArgs) {
const issuerUrl = new URL('/session', context.cloudflare.env.ISSUER_URL) const issuerUrl = new URL('/session', context.cloudflare.env.ISSUER_URL)
const formData = Object.fromEntries(await request.formData()) const formData = Object.fromEntries(await request.formData())
@@ -105,12 +102,13 @@ export default function Index({}: Route.ComponentProps) {
switch (message) { switch (message) {
case 'User not found': case 'User not found':
return setError('username', { return setError('username', {
message: 'Usuário não encontrado', message:
'Conta não encontrada. Certifique-se de que está usando o Email ou CPF correto.',
type: 'manual' type: 'manual'
}) })
case 'Invalid credentials': case 'Invalid credentials':
return setError('password', { return setError('password', {
message: 'A senha está incorreta', message: 'A senha está incorreta.',
type: 'manual' type: 'manual'
}) })
} }

View File

@@ -22,9 +22,12 @@ import { useForm } from 'react-hook-form'
import { z } from 'zod' import { z } from 'zod'
const schema = z.object({ const schema = z.object({
name: z.string().nonempty('Digite seu nome'), name: z.string().trim().nonempty('Digite seu nome'),
email: z.email('Digite seu email'), email: z.email('Digite seu email'),
password: z.string().nonempty('Digite sua senha'), password: z
.string()
.nonempty('Digite sua senha')
.min(6, 'Deve ter no mínimo 6 caracteres'),
cpf: z cpf: z
.string() .string()
.nonempty('Digite seu CPF') .nonempty('Digite seu CPF')