fix: allow special characters in email (#5327)

Co-authored-by: crazywoola <427733928@qq.com>
This commit is contained in:
Mitsuki Ogasahara 2024-06-17 22:32:59 +09:00 committed by GitHub
parent edffa5666d
commit 7305713b97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 29 additions and 5 deletions

View File

@ -25,7 +25,7 @@ class TimestampField(fields.Raw):
def email(email): def email(email):
# Define a regex pattern for email addresses # Define a regex pattern for email addresses
pattern = r"^[\w\.-]+@([\w-]+\.)+[\w-]{2,}$" pattern = r"^[\w\.!#$%&'*+\-/=?^_`{|}~]+@([\w-]+\.)+[\w-]{2,}$"
# Check if the email matches the pattern # Check if the email matches the pattern
if re.match(pattern, email) is not None: if re.match(pattern, email) is not None:
return email return email

View File

@ -0,0 +1,25 @@
from libs.helper import email
def test_email_with_valid_email():
assert email("test@example.com") == "test@example.com"
assert email("TEST12345@example.com") == "TEST12345@example.com"
assert email("test+test@example.com") == "test+test@example.com"
assert email("!#$%&'*+-/=?^_{|}~`@example.com") == "!#$%&'*+-/=?^_{|}~`@example.com"
def test_email_with_invalid_email():
try:
email("invalid_email")
except ValueError as e:
assert str(e) == "invalid_email is not a valid email."
try:
email("@example.com")
except ValueError as e:
assert str(e) == "@example.com is not a valid email."
try:
email("()@example.com")
except ValueError as e:
assert str(e) == "()@example.com is not a valid email."

View File

@ -7,11 +7,10 @@ import useSWR from 'swr'
import Link from 'next/link' import Link from 'next/link'
import Toast from '../components/base/toast' import Toast from '../components/base/toast'
import style from './page.module.css' import style from './page.module.css'
import { IS_CE_EDITION, SUPPORT_MAIL_LOGIN, apiPrefix } from '@/config' import { IS_CE_EDITION, SUPPORT_MAIL_LOGIN, apiPrefix, emailRegex } from '@/config'
import Button from '@/app/components/base/button' import Button from '@/app/components/base/button'
import { login, oauth } from '@/service/common' import { login, oauth } from '@/service/common'
import { getPurifyHref } from '@/utils' import { getPurifyHref } from '@/utils'
const validEmailReg = /^[\w\.-]+@([\w-]+\.)+[\w-]{2,}$/
type IState = { type IState = {
formValid: boolean formValid: boolean
@ -78,7 +77,7 @@ const NormalForm = () => {
const [isLoading, setIsLoading] = useState(false) const [isLoading, setIsLoading] = useState(false)
const handleEmailPasswordLogin = async () => { const handleEmailPasswordLogin = async () => {
if (!validEmailReg.test(email)) { if (!emailRegex.test(email)) {
Toast.notify({ Toast.notify({
type: 'error', type: 'error',
message: t('login.error.emailInValid'), message: t('login.error.emailInValid'),

View File

@ -102,7 +102,7 @@ export const DEFAULT_PARAGRAPH_VALUE_MAX_LEN = 1000
export const zhRegex = /^[\u4E00-\u9FA5]$/m export const zhRegex = /^[\u4E00-\u9FA5]$/m
export const emojiRegex = /^[\uD800-\uDBFF][\uDC00-\uDFFF]$/m export const emojiRegex = /^[\uD800-\uDBFF][\uDC00-\uDFFF]$/m
export const emailRegex = /^[\w\.-]+@([\w-]+\.)+[\w-]{2,}$/m export const emailRegex = /^[\w.!#$%&'*+\-/=?^{|}~]+@([\w-]+\.)+[\w-]{2,}$/m
const MAX_ZN_VAR_NAME_LENGHT = 8 const MAX_ZN_VAR_NAME_LENGHT = 8
const MAX_EN_VAR_VALUE_LENGHT = 30 const MAX_EN_VAR_VALUE_LENGHT = 30
export const getMaxVarNameLength = (value: string) => { export const getMaxVarNameLength = (value: string) => {