79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
import { clsx, type ClassValue } from "clsx"
|
|
import { twMerge } from "tailwind-merge"
|
|
import { verifySolution } from "altcha-lib"
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs))
|
|
}
|
|
|
|
export async function validateToken(token: string) {
|
|
try {
|
|
if (!token) {
|
|
console.error("Altcha error: No token provided")
|
|
return { success: false, error: "No token provided" }
|
|
}
|
|
|
|
if (!process.env.ALTCHA_SECRETKEY) {
|
|
console.error("Altcha error: Missing ALTCHA_SECRETKEY environment variable")
|
|
return { success: false, error: "Server configuration error" }
|
|
}
|
|
|
|
const ok = await verifySolution(token, process.env.ALTCHA_SECRETKEY)
|
|
if (ok) {
|
|
return { success: true }
|
|
} else {
|
|
console.error("Altcha error: Invalid token")
|
|
return { success: false, error: "Invalid token" }
|
|
}
|
|
} catch (error) {
|
|
console.error("Altcha error:", error)
|
|
return { success: false, error: "An error occurred with Altcha" }
|
|
}
|
|
}
|
|
|
|
// Email validation
|
|
export function validateEmail(username: string, domain: string) {
|
|
if (!username || !domain) {
|
|
return { valid: false, message: "Email is required" }
|
|
}
|
|
|
|
const email = `${username}@${domain}`
|
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
|
|
if (!emailRegex.test(email)) {
|
|
return { valid: false, message: "Invalid email format" }
|
|
}
|
|
|
|
return { valid: true, message: "" }
|
|
}
|
|
|
|
// Password validation
|
|
export function validatePassword(password: string) {
|
|
if (!password) {
|
|
return { valid: false, message: "Password is required" }
|
|
}
|
|
|
|
if (password.length < 8) {
|
|
return { valid: false, message: "Password must be at least 8 characters" }
|
|
}
|
|
|
|
if (password.length > 128) {
|
|
return { valid: false, message: "Password must be less than 128 characters" }
|
|
}
|
|
|
|
if (!/[A-Za-z]/.test(password)) {
|
|
return { valid: false, message: "Password must contain letters" }
|
|
}
|
|
|
|
if (!/\d/.test(password)) {
|
|
return { valid: false, message: "Password must contain digits" }
|
|
}
|
|
|
|
if (/\s/.test(password)) {
|
|
return { valid: false, message: "Password cannot contain spaces" }
|
|
}
|
|
|
|
return { valid: true, message: "" }
|
|
}
|
|
|