邮箱后缀字段名调整
This commit is contained in:
parent
11962700ff
commit
719b225227
|
|
@ -589,11 +589,11 @@ export async function loginByAccount(params, context) {
|
||||||
// const config = applicationPassport.passport.config as EmailConfig;
|
// const config = applicationPassport.passport.config as EmailConfig;
|
||||||
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
// assert(emailConfig);
|
// assert(emailConfig);
|
||||||
// const emailSuffix = config.emailSuffix;
|
// const emailSuffixes = config.emailSuffixes;
|
||||||
// // 检查邮箱后缀是否满足配置
|
// // 检查邮箱后缀是否满足配置
|
||||||
// if (emailSuffix?.length! > 0) {
|
// if (emailSuffixes?.length! > 0) {
|
||||||
// let isValid = false;
|
// let isValid = false;
|
||||||
// for (const suffix of emailSuffix!) {
|
// for (const suffix of emailSuffixes!) {
|
||||||
// if (account.endsWith(suffix)) {
|
// if (account.endsWith(suffix)) {
|
||||||
// isValid = true;
|
// isValid = true;
|
||||||
// break;
|
// break;
|
||||||
|
|
@ -1002,11 +1002,11 @@ export async function loginByEmail(params, context) {
|
||||||
const config = applicationPassport.passport.config;
|
const config = applicationPassport.passport.config;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
assert(emailConfig);
|
assert(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1255,11 +1255,11 @@ export async function bindByEmail(params, context) {
|
||||||
const config = applicationPassport.passport.config;
|
const config = applicationPassport.passport.config;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
assert(emailConfig);
|
assert(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -2193,11 +2193,11 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
|
||||||
const duration = config.codeDuration || 5;
|
const duration = config.codeDuration || 5;
|
||||||
const digit = config.digit || 4;
|
const digit = config.digit || 4;
|
||||||
const mockSend = config.mockSend;
|
const mockSend = config.mockSend;
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Style } from '../../../../types/Style';
|
import { Style } from '../../../../types/Style';
|
||||||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, {
|
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, {
|
||||||
style: Style;
|
style: Style;
|
||||||
entity: "platform" | "system" | "application";
|
entity: "system" | "platform" | "application";
|
||||||
entityId: string;
|
entityId: string;
|
||||||
name: string;
|
name: string;
|
||||||
}>) => React.ReactElement;
|
}>) => React.ReactElement;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Config } from '../../../types/Config';
|
import { Config } from '../../../types/Config';
|
||||||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
|
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
|
||||||
config: Config;
|
config: Config;
|
||||||
entity: "platform" | "system";
|
entity: "system" | "platform";
|
||||||
name: string;
|
name: string;
|
||||||
entityId: string;
|
entityId: string;
|
||||||
}>) => React.ReactElement;
|
}>) => React.ReactElement;
|
||||||
|
|
|
||||||
|
|
@ -15,19 +15,19 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
|
||||||
type?: ButtonProps['type'] | AmButtonProps['type'];
|
type?: ButtonProps['type'] | AmButtonProps['type'];
|
||||||
executeText?: string | undefined;
|
executeText?: string | undefined;
|
||||||
buttonProps?: (ButtonProps & {
|
buttonProps?: (ButtonProps & {
|
||||||
color?: "default" | "primary" | "success" | "warning" | "danger" | undefined;
|
color?: "default" | "success" | "warning" | "primary" | "danger" | undefined;
|
||||||
fill?: "none" | "solid" | "outline" | undefined;
|
fill?: "none" | "solid" | "outline" | undefined;
|
||||||
size?: "small" | "large" | "middle" | "mini" | undefined;
|
size?: "small" | "middle" | "large" | "mini" | undefined;
|
||||||
block?: boolean | undefined;
|
block?: boolean | undefined;
|
||||||
loading?: boolean | "auto" | undefined;
|
loading?: boolean | "auto" | undefined;
|
||||||
loadingText?: string | undefined;
|
loadingText?: string | undefined;
|
||||||
loadingIcon?: import("react").ReactNode;
|
loadingIcon?: import("react").ReactNode;
|
||||||
disabled?: boolean | undefined;
|
disabled?: boolean | undefined;
|
||||||
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
|
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
|
||||||
type?: "reset" | "submit" | "button" | undefined;
|
type?: "button" | "reset" | "submit" | undefined;
|
||||||
shape?: "default" | "rounded" | "rectangular" | undefined;
|
shape?: "default" | "rounded" | "rectangular" | undefined;
|
||||||
children?: import("react").ReactNode;
|
children?: import("react").ReactNode;
|
||||||
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & {
|
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseDown" | "onMouseUp" | "onTouchEnd" | "onTouchStart"> & {
|
||||||
className?: string | undefined;
|
className?: string | undefined;
|
||||||
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
|
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
|
||||||
tabIndex?: number | undefined;
|
tabIndex?: number | undefined;
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ import { Editor, Toolbar } from "@wangeditor/editor-for-react";
|
||||||
import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
|
import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
function RenderEmailSuffix(props) {
|
function RenderEmailSuffixes(props) {
|
||||||
const { emailSuffix, onChange, t } = props;
|
const { emailSuffixes, onChange, t } = props;
|
||||||
const [inputVisible, setInputVisible] = useState(false);
|
const [inputVisible, setInputVisible] = useState(false);
|
||||||
const [inputValue, setInputValue] = useState('');
|
const [inputValue, setInputValue] = useState('');
|
||||||
const inputRef = useRef(null);
|
const inputRef = useRef(null);
|
||||||
|
|
@ -25,21 +25,21 @@ function RenderEmailSuffix(props) {
|
||||||
setInputValue(e.target.value);
|
setInputValue(e.target.value);
|
||||||
};
|
};
|
||||||
const handleInputConfirm = () => {
|
const handleInputConfirm = () => {
|
||||||
if (inputValue && !emailSuffix?.includes(inputValue)) {
|
if (inputValue && !emailSuffixes?.includes(inputValue)) {
|
||||||
onChange([...emailSuffix || [], inputValue]);
|
onChange([...emailSuffixes || [], inputValue]);
|
||||||
}
|
}
|
||||||
setInputVisible(false);
|
setInputVisible(false);
|
||||||
setInputValue('');
|
setInputValue('');
|
||||||
};
|
};
|
||||||
const handleClose = (removedTag) => {
|
const handleClose = (removedTag) => {
|
||||||
const emailSuffix2 = emailSuffix.filter((tag) => tag !== removedTag);
|
const emailSuffixes2 = emailSuffixes.filter((tag) => tag !== removedTag);
|
||||||
onChange(emailSuffix2);
|
onChange(emailSuffixes2);
|
||||||
};
|
};
|
||||||
const showInput = () => {
|
const showInput = () => {
|
||||||
setInputVisible(true);
|
setInputVisible(true);
|
||||||
};
|
};
|
||||||
return (<Flex gap="4px 0" wrap="wrap">
|
return (<Flex gap="4px 0" wrap="wrap">
|
||||||
{(emailSuffix || []).map((tag, index) => {
|
{(emailSuffixes || []).map((tag, index) => {
|
||||||
const isLongTag = tag.length > 20;
|
const isLongTag = tag.length > 20;
|
||||||
const tagElem = (<Tag closeIcon={<CloseOutlined />} key={tag} onClose={() => handleClose(tag)}>
|
const tagElem = (<Tag closeIcon={<CloseOutlined />} key={tag} onClose={() => handleClose(tag)}>
|
||||||
<span>
|
<span>
|
||||||
|
|
@ -66,7 +66,7 @@ export default function Email(props) {
|
||||||
const [html, setHtml] = useState(config?.html || '');
|
const [html, setHtml] = useState(config?.html || '');
|
||||||
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
|
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
|
||||||
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
|
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
|
||||||
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []);
|
const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
|
||||||
// editor 实例
|
// editor 实例
|
||||||
const [editor, setEditor] = useState(null); // TS 语法
|
const [editor, setEditor] = useState(null); // TS 语法
|
||||||
// 工具栏配置
|
// 工具栏配置
|
||||||
|
|
@ -91,7 +91,7 @@ export default function Email(props) {
|
||||||
setHtml(config?.html || '');
|
setHtml(config?.html || '');
|
||||||
setEmailCodeDuration(config?.codeDuration || '');
|
setEmailCodeDuration(config?.codeDuration || '');
|
||||||
setEmailDigit(config?.digit || '');
|
setEmailDigit(config?.digit || '');
|
||||||
setEmailSuffix(config?.emailSuffix || []);
|
setEmailSuffixes(config?.emailSuffixes || []);
|
||||||
if (config?.html) {
|
if (config?.html) {
|
||||||
setEContentType('html');
|
setEContentType('html');
|
||||||
}
|
}
|
||||||
|
|
@ -205,9 +205,9 @@ export default function Email(props) {
|
||||||
}}/>
|
}}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item label="邮箱后缀" tooltip="允许的邮箱后缀(如: qq.com),不填则不校验">
|
<Form.Item label="邮箱后缀" tooltip="允许的邮箱后缀(如: qq.com),不填则不校验">
|
||||||
<RenderEmailSuffix t={t} emailSuffix={emailSuffix} onChange={(v) => {
|
<RenderEmailSuffixes t={t} emailSuffixes={emailSuffixes} onChange={(v) => {
|
||||||
if (v !== config?.emailSuffix) {
|
if (v !== config?.emailSuffixes) {
|
||||||
updateConfig(id, config, 'emailSuffix', v, 'email');
|
updateConfig(id, config, 'emailSuffixes', v, 'email');
|
||||||
}
|
}
|
||||||
}}/>
|
}}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { EntityDict } from '../../../oak-app-domain';
|
import { EntityDict } from '../../../oak-app-domain';
|
||||||
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, false, {
|
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, false, {
|
||||||
type: "login" | "bind";
|
type: "bind" | "login";
|
||||||
url: string;
|
url: string;
|
||||||
size: undefined;
|
size: undefined;
|
||||||
}>) => React.ReactElement;
|
}>) => React.ReactElement;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ export type EmailConfig = {
|
||||||
html?: string;
|
html?: string;
|
||||||
codeDuration?: number;
|
codeDuration?: number;
|
||||||
digit?: number;
|
digit?: number;
|
||||||
emailSuffix?: string[];
|
emailSuffixes?: string[];
|
||||||
};
|
};
|
||||||
export type PfwConfig = {
|
export type PfwConfig = {
|
||||||
appId: string;
|
appId: string;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export type EmailConfig = {
|
||||||
html?: string;
|
html?: string;
|
||||||
codeDuration?: number;
|
codeDuration?: number;
|
||||||
digit?: number;
|
digit?: number;
|
||||||
emailSuffix?: string[];
|
emailSuffixes?: string[];
|
||||||
};
|
};
|
||||||
export type PfwConfig = {
|
export type PfwConfig = {
|
||||||
appId: string;
|
appId: string;
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||||
export default _default;
|
export default _default;
|
||||||
|
|
|
||||||
|
|
@ -595,11 +595,11 @@ async function loginByAccount(params, context) {
|
||||||
// const config = applicationPassport.passport.config as EmailConfig;
|
// const config = applicationPassport.passport.config as EmailConfig;
|
||||||
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
// assert(emailConfig);
|
// assert(emailConfig);
|
||||||
// const emailSuffix = config.emailSuffix;
|
// const emailSuffixes = config.emailSuffixes;
|
||||||
// // 检查邮箱后缀是否满足配置
|
// // 检查邮箱后缀是否满足配置
|
||||||
// if (emailSuffix?.length! > 0) {
|
// if (emailSuffixes?.length! > 0) {
|
||||||
// let isValid = false;
|
// let isValid = false;
|
||||||
// for (const suffix of emailSuffix!) {
|
// for (const suffix of emailSuffixes!) {
|
||||||
// if (account.endsWith(suffix)) {
|
// if (account.endsWith(suffix)) {
|
||||||
// isValid = true;
|
// isValid = true;
|
||||||
// break;
|
// break;
|
||||||
|
|
@ -1009,11 +1009,11 @@ async function loginByEmail(params, context) {
|
||||||
const config = applicationPassport.passport.config;
|
const config = applicationPassport.passport.config;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
(0, assert_1.assert)(emailConfig);
|
(0, assert_1.assert)(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1264,11 +1264,11 @@ async function bindByEmail(params, context) {
|
||||||
const config = applicationPassport.passport.config;
|
const config = applicationPassport.passport.config;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
(0, assert_1.assert)(emailConfig);
|
(0, assert_1.assert)(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -2210,11 +2210,11 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
|
||||||
const duration = config.codeDuration || 5;
|
const duration = config.codeDuration || 5;
|
||||||
const digit = config.digit || 4;
|
const digit = config.digit || 4;
|
||||||
const mockSend = config.mockSend;
|
const mockSend = config.mockSend;
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length > 0) {
|
if (emailSuffixes?.length > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix) {
|
for (const suffix of emailSuffixes) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ export type EmailConfig = {
|
||||||
html?: string;
|
html?: string;
|
||||||
codeDuration?: number;
|
codeDuration?: number;
|
||||||
digit?: number;
|
digit?: number;
|
||||||
emailSuffix?: string[];
|
emailSuffixes?: string[];
|
||||||
};
|
};
|
||||||
export type PfwConfig = {
|
export type PfwConfig = {
|
||||||
appId: string;
|
appId: string;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export type EmailConfig = {
|
||||||
html?: string;
|
html?: string;
|
||||||
codeDuration?: number;
|
codeDuration?: number;
|
||||||
digit?: number;
|
digit?: number;
|
||||||
emailSuffix?: string[];
|
emailSuffixes?: string[];
|
||||||
};
|
};
|
||||||
export type PfwConfig = {
|
export type PfwConfig = {
|
||||||
appId: string;
|
appId: string;
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||||
export default _default;
|
export default _default;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
|
||||||
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
|
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
|
||||||
entity: any;
|
entity: any;
|
||||||
entityId: string;
|
entityId: string;
|
||||||
}, userIds?: string[]): Promise<0 | 1>;
|
}, userIds?: string[]): Promise<1 | 0>;
|
||||||
/**
|
/**
|
||||||
* 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成
|
* 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成
|
||||||
* 必须在entity的action的后trigger中调用
|
* 必须在entity的action的后trigger中调用
|
||||||
|
|
|
||||||
|
|
@ -791,12 +791,12 @@ export async function loginByAccount<ED extends EntityDict>(
|
||||||
// const config = applicationPassport.passport.config as EmailConfig;
|
// const config = applicationPassport.passport.config as EmailConfig;
|
||||||
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
// assert(emailConfig);
|
// assert(emailConfig);
|
||||||
// const emailSuffix = config.emailSuffix;
|
// const emailSuffixes = config.emailSuffixes;
|
||||||
|
|
||||||
// // 检查邮箱后缀是否满足配置
|
// // 检查邮箱后缀是否满足配置
|
||||||
// if (emailSuffix?.length! > 0) {
|
// if (emailSuffixes?.length! > 0) {
|
||||||
// let isValid = false;
|
// let isValid = false;
|
||||||
// for (const suffix of emailSuffix!) {
|
// for (const suffix of emailSuffixes!) {
|
||||||
// if (account.endsWith(suffix)) {
|
// if (account.endsWith(suffix)) {
|
||||||
// isValid = true;
|
// isValid = true;
|
||||||
// break;
|
// break;
|
||||||
|
|
@ -1269,12 +1269,12 @@ export async function loginByEmail<ED extends EntityDict>(
|
||||||
const config = applicationPassport.passport.config as EmailConfig;
|
const config = applicationPassport.passport.config as EmailConfig;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
assert(emailConfig);
|
assert(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
|
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length! > 0) {
|
if (emailSuffixes?.length! > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix!) {
|
for (const suffix of emailSuffixes!) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -1592,12 +1592,12 @@ export async function bindByEmail<ED extends EntityDict>(
|
||||||
const config = applicationPassport.passport.config as EmailConfig;
|
const config = applicationPassport.passport.config as EmailConfig;
|
||||||
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
|
||||||
assert(emailConfig);
|
assert(emailConfig);
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
|
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length! > 0) {
|
if (emailSuffixes?.length! > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix!) {
|
for (const suffix of emailSuffixes!) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -2900,12 +2900,12 @@ export async function sendCaptchaByEmail<ED extends EntityDict>(
|
||||||
const duration = config.codeDuration || 5;
|
const duration = config.codeDuration || 5;
|
||||||
const digit = config.digit || 4;
|
const digit = config.digit || 4;
|
||||||
const mockSend = config.mockSend;
|
const mockSend = config.mockSend;
|
||||||
const emailSuffix = config.emailSuffix;
|
const emailSuffixes = config.emailSuffixes;
|
||||||
|
|
||||||
// 检查邮箱后缀是否满足配置
|
// 检查邮箱后缀是否满足配置
|
||||||
if (emailSuffix?.length! > 0) {
|
if (emailSuffixes?.length! > 0) {
|
||||||
let isValid = false;
|
let isValid = false;
|
||||||
for (const suffix of emailSuffix!) {
|
for (const suffix of emailSuffixes!) {
|
||||||
if (email.endsWith(suffix)) {
|
if (email.endsWith(suffix)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,12 @@ import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
const { Text } = Typography;
|
const { Text } = Typography;
|
||||||
|
|
||||||
function RenderEmailSuffix(props: {
|
function RenderEmailSuffixes(props: {
|
||||||
emailSuffix?: string[];
|
emailSuffixes?: string[];
|
||||||
onChange: (v: string[]) => void;
|
onChange: (v: string[]) => void;
|
||||||
t: (k: string) => string;
|
t: (k: string) => string;
|
||||||
}) {
|
}) {
|
||||||
const { emailSuffix, onChange, t } = props;
|
const { emailSuffixes, onChange, t } = props;
|
||||||
const [inputVisible, setInputVisible] = useState(false);
|
const [inputVisible, setInputVisible] = useState(false);
|
||||||
const [inputValue, setInputValue] = useState('');
|
const [inputValue, setInputValue] = useState('');
|
||||||
const inputRef = useRef<InputRef>(null);
|
const inputRef = useRef<InputRef>(null);
|
||||||
|
|
@ -38,16 +38,16 @@ function RenderEmailSuffix(props: {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleInputConfirm = () => {
|
const handleInputConfirm = () => {
|
||||||
if (inputValue && !emailSuffix?.includes(inputValue)) {
|
if (inputValue && !emailSuffixes?.includes(inputValue)) {
|
||||||
onChange([...emailSuffix || [], inputValue]);
|
onChange([...emailSuffixes || [], inputValue]);
|
||||||
}
|
}
|
||||||
setInputVisible(false);
|
setInputVisible(false);
|
||||||
setInputValue('');
|
setInputValue('');
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleClose = (removedTag: string) => {
|
const handleClose = (removedTag: string) => {
|
||||||
const emailSuffix2 = emailSuffix!.filter((tag) => tag !== removedTag);
|
const emailSuffixes2 = emailSuffixes!.filter((tag) => tag !== removedTag);
|
||||||
onChange(emailSuffix2);
|
onChange(emailSuffixes2);
|
||||||
};
|
};
|
||||||
const showInput = () => {
|
const showInput = () => {
|
||||||
setInputVisible(true);
|
setInputVisible(true);
|
||||||
|
|
@ -55,7 +55,7 @@ function RenderEmailSuffix(props: {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex gap="4px 0" wrap="wrap">
|
<Flex gap="4px 0" wrap="wrap">
|
||||||
{(emailSuffix || []).map<React.ReactNode>((tag, index) => {
|
{(emailSuffixes || []).map<React.ReactNode>((tag, index) => {
|
||||||
const isLongTag = tag.length > 20;
|
const isLongTag = tag.length > 20;
|
||||||
const tagElem = (
|
const tagElem = (
|
||||||
<Tag
|
<Tag
|
||||||
|
|
@ -112,7 +112,7 @@ export default function Email(props: {
|
||||||
const [html, setHtml] = useState(config?.html || '');
|
const [html, setHtml] = useState(config?.html || '');
|
||||||
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
|
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
|
||||||
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
|
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
|
||||||
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []);
|
const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
|
||||||
|
|
||||||
// editor 实例
|
// editor 实例
|
||||||
const [editor, setEditor] = useState<IDomEditor | null>(null) // TS 语法
|
const [editor, setEditor] = useState<IDomEditor | null>(null) // TS 语法
|
||||||
|
|
@ -141,7 +141,7 @@ export default function Email(props: {
|
||||||
setHtml(config?.html || '');
|
setHtml(config?.html || '');
|
||||||
setEmailCodeDuration(config?.codeDuration || '');
|
setEmailCodeDuration(config?.codeDuration || '');
|
||||||
setEmailDigit(config?.digit || '');
|
setEmailDigit(config?.digit || '');
|
||||||
setEmailSuffix(config?.emailSuffix || []);
|
setEmailSuffixes(config?.emailSuffixes || []);
|
||||||
if (config?.html) {
|
if (config?.html) {
|
||||||
setEContentType('html');
|
setEContentType('html');
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -347,12 +347,12 @@ export default function Email(props: {
|
||||||
label="邮箱后缀"
|
label="邮箱后缀"
|
||||||
tooltip="允许的邮箱后缀(如: qq.com),不填则不校验"
|
tooltip="允许的邮箱后缀(如: qq.com),不填则不校验"
|
||||||
>
|
>
|
||||||
<RenderEmailSuffix
|
<RenderEmailSuffixes
|
||||||
t={t}
|
t={t}
|
||||||
emailSuffix={emailSuffix}
|
emailSuffixes={emailSuffixes}
|
||||||
onChange={(v) => {
|
onChange={(v) => {
|
||||||
if (v !== (config as EmailConfig)?.emailSuffix) {
|
if (v !== (config as EmailConfig)?.emailSuffixes) {
|
||||||
updateConfig(id, config!, 'emailSuffix', v, 'email');
|
updateConfig(id, config!, 'emailSuffixes', v, 'email');
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ export type EmailConfig = {
|
||||||
html?: string;
|
html?: string;
|
||||||
codeDuration?: number; //验证码有效时间 单位分钟, 不填5分钟
|
codeDuration?: number; //验证码有效时间 单位分钟, 不填5分钟
|
||||||
digit?: number; //验证码位数 4~8,默认为4位
|
digit?: number; //验证码位数 4~8,默认为4位
|
||||||
emailSuffix?: string[] //邮箱后缀,不填则不校验
|
emailSuffixes?: string[] //邮箱后缀,不填则不校验
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PfwConfig = {
|
export type PfwConfig = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue