From 641ffd4b1f472663c893be2ea6f03b1ef59ac539 Mon Sep 17 00:00:00 2001
From: wkj <278599135@.com>
Date: Thu, 26 Jun 2025 18:46:54 +0800
Subject: [PATCH] =?UTF-8?q?application=20web=E7=B1=BB=E5=9E=8B=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
es/aspects/token.js | 168 +---------------
es/components/config/application/web/index.js | 74 ++-----
.../config/application/wechatPublic/index.js | 1 -
.../config/style/platform/index.d.ts | 2 +-
es/components/extraFile/commit/index.d.ts | 2 +-
es/components/wechatLogin/qrCode/index.d.ts | 2 +-
es/entities/Application.d.ts | 6 +-
.../Application/_baseSchema.d.ts | 6 +-
es/triggers/index.d.ts | 2 +-
es/triggers/toDo.d.ts | 2 +-
es/utils/passport.d.ts | 7 +
es/utils/passport.js | 48 +++++
lib/aspects/token.js | 168 +---------------
lib/entities/Application.d.ts | 6 +-
.../Application/_baseSchema.d.ts | 6 +-
lib/triggers/index.d.ts | 2 +-
lib/utils/livestream.js | 7 +-
lib/utils/passport.d.ts | 7 +
lib/utils/passport.js | 52 +++++
src/aspects/token.ts | 184 +-----------------
.../config/application/web/index.tsx | 97 ++++-----
.../config/application/wechatPublic/index.tsx | 1 -
src/entities/Application.ts | 6 +-
src/utils/passport.ts | 63 ++++++
24 files changed, 284 insertions(+), 635 deletions(-)
create mode 100644 es/utils/passport.d.ts
create mode 100644 es/utils/passport.js
create mode 100644 lib/utils/passport.d.ts
create mode 100644 lib/utils/passport.js
create mode 100644 src/utils/passport.ts
diff --git a/es/aspects/token.js b/es/aspects/token.js
index 6571114d0..402ccf83a 100644
--- a/es/aspects/token.js
+++ b/es/aspects/token.js
@@ -11,6 +11,7 @@ import { mergeUser } from './user';
import { cloneDeep } from 'oak-domain/lib/utils/lodash';
import { sendEmail } from '../utils/email';
import { isEmail, isMobile } from 'oak-domain/lib/utils/validator';
+import { getAndCheckPassportByEmail } from '../utils/passport';
async function makeDistinguishException(userId, context, message) {
const [user] = await context.select('user', {
data: {
@@ -560,49 +561,7 @@ export async function loginByAccount(params, context) {
assert(account);
const accountType = isEmail(account) ? 'email' : (isMobile(account) ? 'mobile' : 'loginName');
if (accountType === 'email') {
- // const application = context.getApplication();
- // const { system } = application!;
- // const [applicationPassport] = await context.select('applicationPassport',
- // {
- // data: {
- // id: 1,
- // passportId: 1,
- // passport: {
- // id: 1,
- // config: 1,
- // type: 1,
- // },
- // applicationId: 1,
- // },
- // filter: {
- // applicationId: application?.id!,
- // passport: {
- // type: 'email'
- // },
- // }
- // },
- // {
- // dontCollect: true,
- // }
- // );
- // assert(applicationPassport?.passport);
- // const config = applicationPassport.passport.config as EmailConfig;
- // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- // assert(emailConfig);
- // const emailSuffixes = config.emailSuffixes;
- // // 检查邮箱后缀是否满足配置
- // if (emailSuffixes?.length! > 0) {
- // let isValid = false;
- // for (const suffix of emailSuffixes!) {
- // if (account.endsWith(suffix)) {
- // isValid = true;
- // break;
- // }
- // }
- // if (!isValid) {
- // throw new OakUserException('error::user.emailSuffixIsInvalid');
- // }
- // }
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, account);
const existEmail = await context.select('email', {
data: {
id: 1,
@@ -980,46 +939,7 @@ export async function loginByEmail(params, context) {
}
};
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求');
- }
- }
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
if (disableRegister) {
const [existEmail] = await context.select('email', {
data: {
@@ -1233,46 +1153,7 @@ export async function bindByEmail(params, context) {
}
};
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求');
- }
- }
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
const [otherUserEmail] = await context.select('email', {
data: {
id: 1,
@@ -2168,49 +2049,10 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
if (type === 'web' || type === 'native') {
visitorId = env.visitorId;
}
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求');
- }
- }
let emailOptions = {
// host: emailConfig.host,
// port: emailConfig.port,
diff --git a/es/components/config/application/web/index.js b/es/components/config/application/web/index.js
index d8b39a720..5365d6a6e 100644
--- a/es/components/config/application/web/index.js
+++ b/es/components/config/application/web/index.js
@@ -35,6 +35,24 @@ export default function Web(props) {
+
+
+ 网站-微信支付
+
+
+ <>
+ setValue(`wechatPay.appId`, e.target.value)}/>
+ >
+
+
+ <>
+ setValue(`wechatPay.appSecret`, e.target.value)}/>
+ >
+
+
+
+
location
@@ -68,61 +86,5 @@ export default function Web(props) {
-
- {/*
-
- 网站-授权方式
-
-
- <>
-
-
- */}
);
}
diff --git a/es/components/config/application/wechatPublic/index.js b/es/components/config/application/wechatPublic/index.js
index f19fee2d6..cb314970b 100644
--- a/es/components/config/application/wechatPublic/index.js
+++ b/es/components/config/application/wechatPublic/index.js
@@ -5,7 +5,6 @@ export default function WechatPublic(props) {
const [open, setModal] = useState(false);
const [messageType, setMessageType] = useState('');
const { config, setValue, cleanKey, removeItem, isService = true } = props;
- const templateMsgs = config?.templateMsgs || {};
return (
diff --git a/es/components/config/style/platform/index.d.ts b/es/components/config/style/platform/index.d.ts
index 8835a6c5f..9224d2cdc 100644
--- a/es/components/config/style/platform/index.d.ts
+++ b/es/components/config/style/platform/index.d.ts
@@ -1,7 +1,7 @@
import { Style } from '../../../../types/Style';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps) => React.ReactElement;
diff --git a/es/components/extraFile/commit/index.d.ts b/es/components/extraFile/commit/index.d.ts
index 2b5d47f16..3142f4db7 100644
--- a/es/components/extraFile/commit/index.d.ts
+++ b/es/components/extraFile/commit/index.d.ts
@@ -24,7 +24,7 @@ declare const _default: ) => unknown) | undefined;
- type?: "button" | "submit" | "reset" | undefined;
+ type?: "button" | "reset" | "submit" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode;
} & Pick & import("react").ButtonHTMLAttributes, "id" | "onMouseDown" | "onMouseUp" | "onTouchEnd" | "onTouchStart"> & {
diff --git a/es/components/wechatLogin/qrCode/index.d.ts b/es/components/wechatLogin/qrCode/index.d.ts
index db7fcdc9b..21f928111 100644
--- a/es/components/wechatLogin/qrCode/index.d.ts
+++ b/es/components/wechatLogin/qrCode/index.d.ts
@@ -1,6 +1,6 @@
import { EntityDict } from '../../../oak-app-domain';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps) => React.ReactElement;
diff --git a/es/entities/Application.d.ts b/es/entities/Application.d.ts
index 7640b7f0c..014ca473f 100644
--- a/es/entities/Application.d.ts
+++ b/es/entities/Application.d.ts
@@ -29,6 +29,10 @@ export type WebConfig = {
domain?: string;
enable?: boolean;
};
+ wechatPay?: {
+ appId: string;
+ appSecret: string;
+ };
passport?: Passport[];
location: {
protocol: 'http:' | 'https:';
@@ -36,14 +40,12 @@ export type WebConfig = {
port: string;
};
};
-export type WechatPublicTemplateMsgsConfig = Record;
export type WechatPublicConfig = {
type: 'wechatPublic';
isService: boolean;
appId: string;
appSecret: string;
originalId?: string;
- templateMsgs?: WechatPublicTemplateMsgsConfig;
server?: {
url?: string;
token: string;
diff --git a/es/oak-app-domain/Application/_baseSchema.d.ts b/es/oak-app-domain/Application/_baseSchema.d.ts
index e7322f731..7070996bc 100644
--- a/es/oak-app-domain/Application/_baseSchema.d.ts
+++ b/es/oak-app-domain/Application/_baseSchema.d.ts
@@ -29,6 +29,10 @@ export type WebConfig = {
domain?: string;
enable?: boolean;
};
+ wechatPay?: {
+ appId: string;
+ appSecret: string;
+ };
passport?: Passport[];
location: {
protocol: "http:" | "https:";
@@ -36,14 +40,12 @@ export type WebConfig = {
port: string;
};
};
-export type WechatPublicTemplateMsgsConfig = Record;
export type WechatPublicConfig = {
type: "wechatPublic";
isService: boolean;
appId: string;
appSecret: string;
originalId?: string;
- templateMsgs?: WechatPublicTemplateMsgsConfig;
server?: {
url?: string;
token: string;
diff --git a/es/triggers/index.d.ts b/es/triggers/index.d.ts
index fa5f310b6..54d1ce8ac 100644
--- a/es/triggers/index.d.ts
+++ b/es/triggers/index.d.ts
@@ -1,2 +1,2 @@
-declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[];
+declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[];
export default _default;
diff --git a/es/triggers/toDo.d.ts b/es/triggers/toDo.d.ts
index 1d9bc2ce2..e5be399e1 100644
--- a/es/triggers/toDo.d.ts
+++ b/es/triggers/toDo.d.ts
@@ -14,7 +14,7 @@ export declare function createToDo;
+}, userIds?: string[]): Promise<1 | 0>;
/**
* 完成todo例程,当在entity对象上进行action操作时(操作条件是filter),将对应的todo完成
* 必须在entity的action的后trigger中调用
diff --git a/es/utils/passport.d.ts b/es/utils/passport.d.ts
new file mode 100644
index 000000000..e0982ae8f
--- /dev/null
+++ b/es/utils/passport.d.ts
@@ -0,0 +1,7 @@
+import { EntityDict } from "../oak-app-domain";
+import { BRC } from "../types/RuntimeCxt";
+import { EmailConfig } from '../oak-app-domain/Passport/Schema';
+export declare function getAndCheckPassportByEmail(context: BRC, email: string): Promise<{
+ emailConfig: import("../types/Config").EmailConfig;
+ config: EmailConfig;
+}>;
diff --git a/es/utils/passport.js b/es/utils/passport.js
new file mode 100644
index 000000000..600f9d428
--- /dev/null
+++ b/es/utils/passport.js
@@ -0,0 +1,48 @@
+import { assert } from 'oak-domain/lib/utils/assert';
+import { OakUserException } from 'oak-domain/lib/types';
+export async function getAndCheckPassportByEmail(context, email) {
+ const application = context.getApplication();
+ const { system } = application;
+ const [applicationPassport] = await context.select('applicationPassport', {
+ data: {
+ id: 1,
+ passportId: 1,
+ passport: {
+ id: 1,
+ config: 1,
+ type: 1,
+ },
+ applicationId: 1,
+ },
+ filter: {
+ applicationId: application?.id,
+ passport: {
+ type: 'email',
+ },
+ },
+ }, {
+ dontCollect: true,
+ });
+ assert(applicationPassport?.passport);
+ const config = applicationPassport.passport.config;
+ const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
+ assert(emailConfig);
+ const emailSuffixes = config.emailSuffixes;
+ // 检查邮箱后缀是否满足配置
+ if (emailSuffixes?.length > 0) {
+ let isValid = false;
+ for (const suffix of emailSuffixes) {
+ if (email.endsWith(suffix)) {
+ isValid = true;
+ break;
+ }
+ }
+ if (!isValid) {
+ throw new OakUserException('error::user.emailSuffixIsInvalid');
+ }
+ }
+ return {
+ emailConfig,
+ config
+ };
+}
diff --git a/lib/aspects/token.js b/lib/aspects/token.js
index 8a05143e5..2c399073d 100644
--- a/lib/aspects/token.js
+++ b/lib/aspects/token.js
@@ -15,6 +15,7 @@ const user_1 = require("./user");
const lodash_1 = require("oak-domain/lib/utils/lodash");
const email_1 = require("../utils/email");
const validator_1 = require("oak-domain/lib/utils/validator");
+const passport_1 = require("../utils/passport");
async function makeDistinguishException(userId, context, message) {
const [user] = await context.select('user', {
data: {
@@ -566,49 +567,7 @@ async function loginByAccount(params, context) {
(0, assert_1.assert)(account);
const accountType = (0, validator_1.isEmail)(account) ? 'email' : ((0, validator_1.isMobile)(account) ? 'mobile' : 'loginName');
if (accountType === 'email') {
- // const application = context.getApplication();
- // const { system } = application!;
- // const [applicationPassport] = await context.select('applicationPassport',
- // {
- // data: {
- // id: 1,
- // passportId: 1,
- // passport: {
- // id: 1,
- // config: 1,
- // type: 1,
- // },
- // applicationId: 1,
- // },
- // filter: {
- // applicationId: application?.id!,
- // passport: {
- // type: 'email'
- // },
- // }
- // },
- // {
- // dontCollect: true,
- // }
- // );
- // assert(applicationPassport?.passport);
- // const config = applicationPassport.passport.config as EmailConfig;
- // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- // assert(emailConfig);
- // const emailSuffixes = config.emailSuffixes;
- // // 检查邮箱后缀是否满足配置
- // if (emailSuffixes?.length! > 0) {
- // let isValid = false;
- // for (const suffix of emailSuffixes!) {
- // if (account.endsWith(suffix)) {
- // isValid = true;
- // break;
- // }
- // }
- // if (!isValid) {
- // throw new OakUserException('error::user.emailSuffixIsInvalid');
- // }
- // }
+ const { config, emailConfig } = await (0, passport_1.getAndCheckPassportByEmail)(context, account);
const existEmail = await context.select('email', {
data: {
id: 1,
@@ -987,46 +946,7 @@ async function loginByEmail(params, context) {
}
};
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- (0, assert_1.assert)(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- (0, assert_1.assert)(emailConfig);
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new types_1.OakUserException('邮箱后缀不符合要求');
- }
- }
+ const { config, emailConfig } = await (0, passport_1.getAndCheckPassportByEmail)(context, email);
if (disableRegister) {
const [existEmail] = await context.select('email', {
data: {
@@ -1242,46 +1162,7 @@ async function bindByEmail(params, context) {
}
};
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- (0, assert_1.assert)(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- (0, assert_1.assert)(emailConfig);
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new types_1.OakUserException('邮箱后缀不符合要求');
- }
- }
+ const { config, emailConfig } = await (0, passport_1.getAndCheckPassportByEmail)(context, email);
const [otherUserEmail] = await context.select('email', {
data: {
id: 1,
@@ -2185,49 +2066,10 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
if (type === 'web' || type === 'native') {
visitorId = env.visitorId;
}
- const application = context.getApplication();
- const { system } = application;
- const [applicationPassport] = await context.select('applicationPassport', {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id,
- passport: {
- type: 'email'
- },
- }
- }, {
- dontCollect: true,
- });
- (0, assert_1.assert)(applicationPassport?.passport);
- const config = applicationPassport.passport.config;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- (0, assert_1.assert)(emailConfig);
+ const { config, emailConfig } = await (0, passport_1.getAndCheckPassportByEmail)(context, email);
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
- if (!isValid) {
- throw new types_1.OakUserException('邮箱后缀不符合要求');
- }
- }
let emailOptions = {
// host: emailConfig.host,
// port: emailConfig.port,
diff --git a/lib/entities/Application.d.ts b/lib/entities/Application.d.ts
index 7640b7f0c..014ca473f 100644
--- a/lib/entities/Application.d.ts
+++ b/lib/entities/Application.d.ts
@@ -29,6 +29,10 @@ export type WebConfig = {
domain?: string;
enable?: boolean;
};
+ wechatPay?: {
+ appId: string;
+ appSecret: string;
+ };
passport?: Passport[];
location: {
protocol: 'http:' | 'https:';
@@ -36,14 +40,12 @@ export type WebConfig = {
port: string;
};
};
-export type WechatPublicTemplateMsgsConfig = Record;
export type WechatPublicConfig = {
type: 'wechatPublic';
isService: boolean;
appId: string;
appSecret: string;
originalId?: string;
- templateMsgs?: WechatPublicTemplateMsgsConfig;
server?: {
url?: string;
token: string;
diff --git a/lib/oak-app-domain/Application/_baseSchema.d.ts b/lib/oak-app-domain/Application/_baseSchema.d.ts
index e7322f731..7070996bc 100644
--- a/lib/oak-app-domain/Application/_baseSchema.d.ts
+++ b/lib/oak-app-domain/Application/_baseSchema.d.ts
@@ -29,6 +29,10 @@ export type WebConfig = {
domain?: string;
enable?: boolean;
};
+ wechatPay?: {
+ appId: string;
+ appSecret: string;
+ };
passport?: Passport[];
location: {
protocol: "http:" | "https:";
@@ -36,14 +40,12 @@ export type WebConfig = {
port: string;
};
};
-export type WechatPublicTemplateMsgsConfig = Record;
export type WechatPublicConfig = {
type: "wechatPublic";
isService: boolean;
appId: string;
appSecret: string;
originalId?: string;
- templateMsgs?: WechatPublicTemplateMsgsConfig;
server?: {
url?: string;
token: string;
diff --git a/lib/triggers/index.d.ts b/lib/triggers/index.d.ts
index fa5f310b6..54d1ce8ac 100644
--- a/lib/triggers/index.d.ts
+++ b/lib/triggers/index.d.ts
@@ -1,2 +1,2 @@
-declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[];
+declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[];
export default _default;
diff --git a/lib/utils/livestream.js b/lib/utils/livestream.js
index 92a645d12..7b75190a9 100644
--- a/lib/utils/livestream.js
+++ b/lib/utils/livestream.js
@@ -1,8 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.getLivestream = getLivestream;
-exports.getStreamObj = getStreamObj;
-exports.getPlayBackUrl = getPlayBackUrl;
+exports.getPlayBackUrl = exports.getStreamObj = exports.getLivestream = void 0;
const assert_1 = require("oak-domain/lib/utils/assert");
const getContextConfig_1 = require("./getContextConfig");
/**
@@ -29,6 +27,7 @@ async function getLivestream(params, context) {
expireAt,
};
}
+exports.getLivestream = getLivestream;
// 获取推拉流地址
/**
* 直播流已存在的情况下,获取推拉流地址
@@ -53,6 +52,7 @@ async function getStreamObj(params, context) {
expireAt,
};
}
+exports.getStreamObj = getStreamObj;
// 生成直播回放
async function getPlayBackUrl(params, context) {
const { streamTitle, start, end, origin } = params;
@@ -61,3 +61,4 @@ async function getPlayBackUrl(params, context) {
const { hub, playBackDomain, liveHost } = config;
return instance.getPlayBackUrl(hub, playBackDomain, streamTitle, start, end, 'POST', liveHost);
}
+exports.getPlayBackUrl = getPlayBackUrl;
diff --git a/lib/utils/passport.d.ts b/lib/utils/passport.d.ts
new file mode 100644
index 000000000..e0982ae8f
--- /dev/null
+++ b/lib/utils/passport.d.ts
@@ -0,0 +1,7 @@
+import { EntityDict } from "../oak-app-domain";
+import { BRC } from "../types/RuntimeCxt";
+import { EmailConfig } from '../oak-app-domain/Passport/Schema';
+export declare function getAndCheckPassportByEmail(context: BRC, email: string): Promise<{
+ emailConfig: import("../types/Config").EmailConfig;
+ config: EmailConfig;
+}>;
diff --git a/lib/utils/passport.js b/lib/utils/passport.js
new file mode 100644
index 000000000..8c58265ac
--- /dev/null
+++ b/lib/utils/passport.js
@@ -0,0 +1,52 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getAndCheckPassportByEmail = void 0;
+const assert_1 = require("oak-domain/lib/utils/assert");
+const types_1 = require("oak-domain/lib/types");
+async function getAndCheckPassportByEmail(context, email) {
+ const application = context.getApplication();
+ const { system } = application;
+ const [applicationPassport] = await context.select('applicationPassport', {
+ data: {
+ id: 1,
+ passportId: 1,
+ passport: {
+ id: 1,
+ config: 1,
+ type: 1,
+ },
+ applicationId: 1,
+ },
+ filter: {
+ applicationId: application?.id,
+ passport: {
+ type: 'email',
+ },
+ },
+ }, {
+ dontCollect: true,
+ });
+ (0, assert_1.assert)(applicationPassport?.passport);
+ const config = applicationPassport.passport.config;
+ const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
+ (0, assert_1.assert)(emailConfig);
+ const emailSuffixes = config.emailSuffixes;
+ // 检查邮箱后缀是否满足配置
+ if (emailSuffixes?.length > 0) {
+ let isValid = false;
+ for (const suffix of emailSuffixes) {
+ if (email.endsWith(suffix)) {
+ isValid = true;
+ break;
+ }
+ }
+ if (!isValid) {
+ throw new types_1.OakUserException('error::user.emailSuffixIsInvalid');
+ }
+ }
+ return {
+ emailConfig,
+ config
+ };
+}
+exports.getAndCheckPassportByEmail = getAndCheckPassportByEmail;
diff --git a/src/aspects/token.ts b/src/aspects/token.ts
index cef139478..d723935ae 100644
--- a/src/aspects/token.ts
+++ b/src/aspects/token.ts
@@ -44,6 +44,7 @@ import { sendEmail } from '../utils/email';
import { EmailConfig } from '../oak-app-domain/Passport/Schema';
import { isEmail, isMobile } from 'oak-domain/lib/utils/validator';
import { EmailOptions } from '../types/Email';
+import { getAndCheckPassportByEmail } from '../utils/passport';
async function makeDistinguishException(userId: string, context: BRC, message?: string) {
const [user] = await context.select(
@@ -762,50 +763,9 @@ export async function loginByAccount(
assert(account);
const accountType = isEmail(account) ? 'email' : (isMobile(account) ? 'mobile' : 'loginName');
if (accountType === 'email') {
- // const application = context.getApplication();
- // const { system } = application!;
- // const [applicationPassport] = await context.select('applicationPassport',
- // {
- // data: {
- // id: 1,
- // passportId: 1,
- // passport: {
- // id: 1,
- // config: 1,
- // type: 1,
- // },
- // applicationId: 1,
- // },
- // filter: {
- // applicationId: application?.id!,
- // passport: {
- // type: 'email'
- // },
- // }
- // },
- // {
- // dontCollect: true,
- // }
- // );
- // assert(applicationPassport?.passport);
- // const config = applicationPassport.passport.config as EmailConfig;
- // const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- // assert(emailConfig);
- // const emailSuffixes = config.emailSuffixes;
-
- // // 检查邮箱后缀是否满足配置
- // if (emailSuffixes?.length! > 0) {
- // let isValid = false;
- // for (const suffix of emailSuffixes!) {
- // if (account.endsWith(suffix)) {
- // isValid = true;
- // break;
- // }
- // }
- // if (!isValid) {
- // throw new OakUserException('error::user.emailSuffixIsInvalid');
- // }
- // }
+
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, account);
+
const existEmail = await context.select(
'email',
{
@@ -1244,51 +1204,9 @@ export async function loginByEmail(
}
};
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application!;
- const [applicationPassport] = await context.select('applicationPassport',
- {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id!,
- passport: {
- type: 'email'
- },
- }
- },
- {
- dontCollect: true,
- }
- );
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config as EmailConfig;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
- const emailSuffixes = config.emailSuffixes;
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length! > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes!) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求')
- }
- }
if (disableRegister) {
const [existEmail] = await context.select(
'email',
@@ -1567,51 +1485,8 @@ export async function bindByEmail(
const closeRootMode = context.openRootMode();
- const application = context.getApplication();
- const { system } = application!;
- const [applicationPassport] = await context.select('applicationPassport',
- {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id!,
- passport: {
- type: 'email'
- },
- }
- },
- {
- dontCollect: true,
- }
- );
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config as EmailConfig;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
- const emailSuffixes = config.emailSuffixes;
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length! > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes!) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
-
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求')
- }
- }
const [otherUserEmail] = await context.select(
'email',
@@ -2872,54 +2747,11 @@ export async function sendCaptchaByEmail(
if (type === 'web' || type === 'native') {
visitorId = env.visitorId;
}
- const application = context.getApplication();
- const { system } = application!;
- const [applicationPassport] = await context.select('applicationPassport',
- {
- data: {
- id: 1,
- passportId: 1,
- passport: {
- id: 1,
- config: 1,
- type: 1,
- },
- applicationId: 1,
- },
- filter: {
- applicationId: application?.id!,
- passport: {
- type: 'email'
- },
- }
- },
- {
- dontCollect: true,
- }
- );
- assert(applicationPassport?.passport);
- const config = applicationPassport.passport.config as EmailConfig;
- const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
- assert(emailConfig);
+
+ const { config, emailConfig } = await getAndCheckPassportByEmail(context, email);
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
- const emailSuffixes = config.emailSuffixes;
-
- // 检查邮箱后缀是否满足配置
- if (emailSuffixes?.length! > 0) {
- let isValid = false;
- for (const suffix of emailSuffixes!) {
- if (email.endsWith(suffix)) {
- isValid = true;
- break;
- }
- }
-
- if (!isValid) {
- throw new OakUserException('邮箱后缀不符合要求')
- }
- }
let emailOptions: EmailOptions = {
// host: emailConfig.host,
diff --git a/src/components/config/application/web/index.tsx b/src/components/config/application/web/index.tsx
index 337fbfad7..058e08848 100644
--- a/src/components/config/application/web/index.tsx
+++ b/src/components/config/application/web/index.tsx
@@ -91,6 +91,47 @@ export default function Web(props: {
+
+
+ 网站-微信支付
+
+
+ <>
+
+ setValue(`wechatPay.appId`, e.target.value)
+ }
+ />
+ >
+
+
+ <>
+
+ setValue(`wechatPay.appSecret`, e.target.value)
+ }
+ />
+ >
+
+
+
+
location
@@ -158,62 +199,6 @@ export default function Web(props: {
-
- {/*
-
- 网站-授权方式
-
-
- <>
-
-
- */}
);
}
\ No newline at end of file
diff --git a/src/components/config/application/wechatPublic/index.tsx b/src/components/config/application/wechatPublic/index.tsx
index 91bac8db7..e859f8b2f 100644
--- a/src/components/config/application/wechatPublic/index.tsx
+++ b/src/components/config/application/wechatPublic/index.tsx
@@ -35,7 +35,6 @@ export default function WechatPublic(props: {
const [messageType, setMessageType] = useState('');
const { config, setValue, cleanKey, removeItem, isService = true } = props;
- const templateMsgs = config?.templateMsgs || {};
return (
diff --git a/src/entities/Application.ts b/src/entities/Application.ts
index 3a9e3a150..4fbdbdb32 100644
--- a/src/entities/Application.ts
+++ b/src/entities/Application.ts
@@ -33,6 +33,10 @@ export type WebConfig = {
domain?: string;
enable?: boolean; //启用扫码登录
};
+ wechatPay?: {
+ appId: string;
+ appSecret: string; //微信支付
+ };
passport?: Passport[];
location: {
protocol: 'http:' | 'https:';
@@ -41,7 +45,6 @@ export type WebConfig = {
}
};
-export type WechatPublicTemplateMsgsConfig = Record; // key值代表messageTypeId,value的值代表对应的templateId,data的转换改成message上的函数注入
export type WechatPublicConfig = {
type: 'wechatPublic';
@@ -49,7 +52,6 @@ export type WechatPublicConfig = {
appId: string;
appSecret: string;
originalId?: string; //原始id
- templateMsgs?: WechatPublicTemplateMsgsConfig;
server?: {
url?: string; //服务器地址(URL)
token: string; //令牌(Token)
diff --git a/src/utils/passport.ts b/src/utils/passport.ts
new file mode 100644
index 000000000..275946749
--- /dev/null
+++ b/src/utils/passport.ts
@@ -0,0 +1,63 @@
+import { EntityDict } from "../oak-app-domain";
+import { RuntimeCxt, BRC } from "../types/RuntimeCxt";
+import { EmailConfig } from '../oak-app-domain/Passport/Schema';
+import { assert } from 'oak-domain/lib/utils/assert';
+import { OakUserException } from 'oak-domain/lib/types';
+export async function getAndCheckPassportByEmail(
+ context: BRC,
+ email: string
+) {
+ const application = context.getApplication();
+ const { system } = application!;
+ const [applicationPassport] = await context.select(
+ 'applicationPassport',
+ {
+ data: {
+ id: 1,
+ passportId: 1,
+ passport: {
+ id: 1,
+ config: 1,
+ type: 1,
+ },
+ applicationId: 1,
+ },
+ filter: {
+ applicationId: application?.id!,
+ passport: {
+ type: 'email',
+ },
+ },
+ },
+ {
+ dontCollect: true,
+ }
+ );
+ assert(applicationPassport?.passport);
+ const config = applicationPassport.passport.config as EmailConfig;
+ const emailConfig = system?.config.Emails?.find(
+ (ele) => ele.account === config.account
+ );
+ assert(emailConfig);
+ const emailSuffixes = config.emailSuffixes;
+
+ // 检查邮箱后缀是否满足配置
+ if (emailSuffixes?.length! > 0) {
+ let isValid = false;
+ for (const suffix of emailSuffixes!) {
+ if (email.endsWith(suffix)) {
+ isValid = true;
+ break;
+ }
+ }
+
+ if (!isValid) {
+ throw new OakUserException('error::user.emailSuffixIsInvalid');
+ }
+ }
+
+ return {
+ emailConfig,
+ config
+ };
+}
\ No newline at end of file