Merge pull request 'refactor_server' (#340) from refactor_server into @hera/dev
Reviewed-on: daoyoucloud/tachycode#340
This commit is contained in:
commit
3ed284f94a
@ -1,7 +1,7 @@
|
|||||||
import { FormOutlined } from '@ant-design/icons';
|
import { FormOutlined } from '@ant-design/icons';
|
||||||
import { FormLayout } from '@formily/antd-v5';
|
import { FormLayout } from '@formily/antd-v5';
|
||||||
import { SchemaOptionsContext } from '@formily/react';
|
import { SchemaOptionsContext } from '@formily/react';
|
||||||
import { createFormBlockSchema, useAPIClient, useCollectionManager_deprecated } from '@nocobase/client';
|
import { createFormBlockSchema, useAPIClient, useCollectionManager } from '@nocobase/client';
|
||||||
import {
|
import {
|
||||||
DataBlockInitializer,
|
DataBlockInitializer,
|
||||||
FormDialog,
|
FormDialog,
|
||||||
@ -12,7 +12,7 @@ import {
|
|||||||
useSchemaInitializerItem,
|
useSchemaInitializerItem,
|
||||||
} from '@nocobase/client';
|
} from '@nocobase/client';
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from '../locale';
|
||||||
|
|
||||||
export const SettingBlockInitializer = () => {
|
export const SettingBlockInitializer = () => {
|
||||||
const { insert } = useSchemaInitializer();
|
const { insert } = useSchemaInitializer();
|
||||||
@ -20,7 +20,7 @@ export const SettingBlockInitializer = () => {
|
|||||||
const options = useContext(SchemaOptionsContext);
|
const options = useContext(SchemaOptionsContext);
|
||||||
const { theme } = useGlobalTheme();
|
const { theme } = useGlobalTheme();
|
||||||
const itemConfig = useSchemaInitializerItem();
|
const itemConfig = useSchemaInitializerItem();
|
||||||
const { getCollection } = useCollectionManager_deprecated();
|
const cm = useCollectionManager();
|
||||||
const api = useAPIClient();
|
const api = useAPIClient();
|
||||||
return (
|
return (
|
||||||
<DataBlockInitializer
|
<DataBlockInitializer
|
||||||
@ -28,11 +28,11 @@ export const SettingBlockInitializer = () => {
|
|||||||
componentType={'FormItem'}
|
componentType={'FormItem'}
|
||||||
icon={<FormOutlined />}
|
icon={<FormOutlined />}
|
||||||
onCreateBlockSchema={async ({ item }) => {
|
onCreateBlockSchema={async ({ item }) => {
|
||||||
const collection = getCollection(item.name);
|
const collection = cm.getCollection(item.name);
|
||||||
const titleField = collection.options.titleField;
|
const titleField = collection.titleField;
|
||||||
const result = await api.resource(collection.name).list();
|
const result = await api.resource(collection.name).list();
|
||||||
const values = await FormDialog(
|
const values = await FormDialog(
|
||||||
t('添加单条数据展示区块'),
|
t('Pick a data entry for viewing and editing'),
|
||||||
() => {
|
() => {
|
||||||
return (
|
return (
|
||||||
<SchemaComponentOptions scope={options.scope} components={{ ...options.components }}>
|
<SchemaComponentOptions scope={options.scope} components={{ ...options.components }}>
|
||||||
@ -41,7 +41,7 @@ export const SettingBlockInitializer = () => {
|
|||||||
schema={{
|
schema={{
|
||||||
properties: {
|
properties: {
|
||||||
id: {
|
id: {
|
||||||
title: t('选择数据'),
|
title: t('Please select'),
|
||||||
enum: result.data.data.map((item) => {
|
enum: result.data.data.map((item) => {
|
||||||
return {
|
return {
|
||||||
label: item[titleField],
|
label: item[titleField],
|
||||||
|
@ -15,5 +15,7 @@
|
|||||||
"System setting": "System setting",
|
"System setting": "System setting",
|
||||||
"classical": "classical",
|
"classical": "classical",
|
||||||
"Signature input": "Signature input",
|
"Signature input": "Signature input",
|
||||||
|
"Pick a data entry for viewing and editing": "Pick a data entry for viewing and editing",
|
||||||
|
"Please select": "Please select",
|
||||||
"HomePage Config": "HomePage Config"
|
"HomePage Config": "HomePage Config"
|
||||||
}
|
}
|
||||||
|
@ -15,5 +15,7 @@
|
|||||||
"System setting": "系统设置",
|
"System setting": "系统设置",
|
||||||
"classical": "经典版",
|
"classical": "经典版",
|
||||||
"Signature input": "手写签名",
|
"Signature input": "手写签名",
|
||||||
|
"Pick a data entry for viewing and editing": "选择一条数据用于查看与编辑",
|
||||||
|
"Please select": "请选择",
|
||||||
"HomePage Config": "主页配置"
|
"HomePage Config": "主页配置"
|
||||||
}
|
}
|
||||||
|
2
packages/plugins/@hera/plugin-oidc/.npmignore
Normal file
2
packages/plugins/@hera/plugin-oidc/.npmignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/node_modules
|
||||||
|
/src
|
1
packages/plugins/@hera/plugin-oidc/README.md
Normal file
1
packages/plugins/@hera/plugin-oidc/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# @hera/plugin-oidc
|
2
packages/plugins/@hera/plugin-oidc/client.d.ts
vendored
Normal file
2
packages/plugins/@hera/plugin-oidc/client.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from './dist/client';
|
||||||
|
export { default } from './dist/client';
|
1
packages/plugins/@hera/plugin-oidc/client.js
Normal file
1
packages/plugins/@hera/plugin-oidc/client.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require('./dist/client/index.js');
|
14
packages/plugins/@hera/plugin-oidc/package.json
Normal file
14
packages/plugins/@hera/plugin-oidc/package.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "@hera/plugin-oidc",
|
||||||
|
"version": "0.20.0-alpha.7",
|
||||||
|
"main": "dist/server/index.js",
|
||||||
|
"devDependencies": {
|
||||||
|
"@koa/router": "^12.0.1",
|
||||||
|
"@types/koa__router": "^12.0.4"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@nocobase/client": "0.x",
|
||||||
|
"@nocobase/server": "0.x",
|
||||||
|
"@nocobase/test": "0.x"
|
||||||
|
}
|
||||||
|
}
|
2
packages/plugins/@hera/plugin-oidc/server.d.ts
vendored
Normal file
2
packages/plugins/@hera/plugin-oidc/server.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from './dist/server';
|
||||||
|
export { default } from './dist/server';
|
1
packages/plugins/@hera/plugin-oidc/server.js
Normal file
1
packages/plugins/@hera/plugin-oidc/server.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require('./dist/server/index.js');
|
21
packages/plugins/@hera/plugin-oidc/src/client/index.tsx
Normal file
21
packages/plugins/@hera/plugin-oidc/src/client/index.tsx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { Plugin } from '@nocobase/client';
|
||||||
|
|
||||||
|
export class PluginOidcClient extends Plugin {
|
||||||
|
async afterAdd() {
|
||||||
|
// await this.app.pm.add()
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeLoad() {}
|
||||||
|
|
||||||
|
// You can get and modify the app instance here
|
||||||
|
async load() {
|
||||||
|
console.log(this.app);
|
||||||
|
// this.app.addComponents({})
|
||||||
|
// this.app.addScopes({})
|
||||||
|
// this.app.addProvider()
|
||||||
|
// this.app.addProviders()
|
||||||
|
// this.app.router.add()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PluginOidcClient;
|
2
packages/plugins/@hera/plugin-oidc/src/index.ts
Normal file
2
packages/plugins/@hera/plugin-oidc/src/index.ts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from './server';
|
||||||
|
export { default } from './server';
|
1
packages/plugins/@hera/plugin-oidc/src/server/index.ts
Normal file
1
packages/plugins/@hera/plugin-oidc/src/server/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { default } from './plugin';
|
218
packages/plugins/@hera/plugin-oidc/src/server/plugin.ts
Normal file
218
packages/plugins/@hera/plugin-oidc/src/server/plugin.ts
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
import { Plugin } from '@nocobase/server';
|
||||||
|
import Router from '@koa/router';
|
||||||
|
|
||||||
|
export class PluginOidcServer extends Plugin {
|
||||||
|
async afterAdd() {}
|
||||||
|
|
||||||
|
async beforeLoad() {}
|
||||||
|
|
||||||
|
async load() {
|
||||||
|
const router = new Router();
|
||||||
|
|
||||||
|
router.get('/oidc/hello', async (ctx, next) => {
|
||||||
|
ctx.body = {
|
||||||
|
message: 'hello from koa router',
|
||||||
|
};
|
||||||
|
});
|
||||||
|
// this.app.use(router.routes());
|
||||||
|
this.app.use(async (ctx, next) => {
|
||||||
|
console.log('------------------- - - - -');
|
||||||
|
});
|
||||||
|
|
||||||
|
// router.use(async (ctx, next) => {
|
||||||
|
// ctx.set('cache-control', 'no-store');
|
||||||
|
// try {
|
||||||
|
// await next();
|
||||||
|
// } catch (err) {
|
||||||
|
// console.log('------------------')
|
||||||
|
// console.error(err)
|
||||||
|
// if (err instanceof SessionNotFound) {
|
||||||
|
// ctx.status = err.status;
|
||||||
|
// const { message: error, error_description } = err;
|
||||||
|
// await defaults.renderError(ctx, { error, error_description }, err);
|
||||||
|
// } else {
|
||||||
|
// throw err;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.get('/interaction/:uid', async (ctx, next) => {
|
||||||
|
// const {
|
||||||
|
// uid, prompt, params, session,
|
||||||
|
// } = await provider.interactionDetails(ctx.req, ctx.res);
|
||||||
|
// const client = await provider.Client.find(params.client_id);
|
||||||
|
|
||||||
|
// switch (prompt.name) {
|
||||||
|
// case 'login': {
|
||||||
|
// return ctx.render('login', {
|
||||||
|
// client,
|
||||||
|
// uid,
|
||||||
|
// details: prompt.details,
|
||||||
|
// params,
|
||||||
|
// title: 'Sign-in',
|
||||||
|
// google: ctx.google,
|
||||||
|
// session: session ? debug(session) : undefined,
|
||||||
|
// dbg: {
|
||||||
|
// params: debug(params),
|
||||||
|
// prompt: debug(prompt),
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// case 'consent': {
|
||||||
|
// return ctx.render('interaction', {
|
||||||
|
// client,
|
||||||
|
// uid,
|
||||||
|
// details: prompt.details,
|
||||||
|
// params,
|
||||||
|
// title: 'Authorize',
|
||||||
|
// session: session ? debug(session) : undefined,
|
||||||
|
// dbg: {
|
||||||
|
// params: debug(params),
|
||||||
|
// prompt: debug(prompt),
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// default:
|
||||||
|
// return next();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const body = bodyParser({
|
||||||
|
// text: false, json: false, patchNode: true, patchKoa: true,
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.get('/interaction/callback/google', (ctx) => {
|
||||||
|
// const nonce = ctx.res.locals.cspNonce;
|
||||||
|
// return ctx.render('repost', { layout: false, upstream: 'google', nonce });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.post('/interaction/:uid/login', body, async (ctx) => {
|
||||||
|
// const { prompt: { name } } = await provider.interactionDetails(ctx.req, ctx.res);
|
||||||
|
// assert.equal(name, 'login');
|
||||||
|
|
||||||
|
// const account = await Account.findByLogin(ctx.request.body.login);
|
||||||
|
|
||||||
|
// const result = {
|
||||||
|
// login: {
|
||||||
|
// accountId: account.accountId,
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
|
||||||
|
// return provider.interactionFinished(ctx.req, ctx.res, result, {
|
||||||
|
// mergeWithLastSubmission: false,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.post('/interaction/:uid/federated', body, async (ctx) => {
|
||||||
|
// const { prompt: { name } } = await provider.interactionDetails(ctx.req, ctx.res);
|
||||||
|
// assert.equal(name, 'login');
|
||||||
|
|
||||||
|
// const path = `/interaction/${ctx.params.uid}/federated`;
|
||||||
|
|
||||||
|
// switch (ctx.request.body.upstream) {
|
||||||
|
// case 'google': {
|
||||||
|
// const callbackParams = ctx.google.callbackParams(ctx.req);
|
||||||
|
|
||||||
|
// // init
|
||||||
|
// if (!Object.keys(callbackParams).length) {
|
||||||
|
// const state = ctx.params.uid;
|
||||||
|
// const nonce = crypto.randomBytes(32).toString('hex');
|
||||||
|
|
||||||
|
// ctx.cookies.set('google.nonce', nonce, { path, sameSite: 'strict' });
|
||||||
|
|
||||||
|
// ctx.status = 303;
|
||||||
|
// return ctx.redirect(ctx.google.authorizationUrl({
|
||||||
|
// state, nonce, scope: 'openid email profile',
|
||||||
|
// }));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // callback
|
||||||
|
// const nonce = ctx.cookies.get('google.nonce');
|
||||||
|
// ctx.cookies.set('google.nonce', null, { path });
|
||||||
|
|
||||||
|
// const tokenset = await ctx.google.callback(undefined, callbackParams, { state: ctx.params.uid, nonce, response_type: 'id_token' });
|
||||||
|
// const account = await Account.findByFederated('google', tokenset.claims());
|
||||||
|
|
||||||
|
// const result = {
|
||||||
|
// login: {
|
||||||
|
// accountId: account.accountId,
|
||||||
|
// },
|
||||||
|
// };
|
||||||
|
// return provider.interactionFinished(ctx.req, ctx.res, result, {
|
||||||
|
// mergeWithLastSubmission: false,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// default:
|
||||||
|
// return undefined;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.post('/interaction/:uid/confirm', body, async (ctx) => {
|
||||||
|
// const interactionDetails = await provider.interactionDetails(ctx.req, ctx.res);
|
||||||
|
// const { prompt: { name, details }, params, session: { accountId } } = interactionDetails;
|
||||||
|
// assert.equal(name, 'consent');
|
||||||
|
|
||||||
|
// let { grantId } = interactionDetails;
|
||||||
|
// let grant;
|
||||||
|
|
||||||
|
// if (grantId) {
|
||||||
|
// // we'll be modifying existing grant in existing session
|
||||||
|
// grant = await provider.Grant.find(grantId);
|
||||||
|
// } else {
|
||||||
|
// // we're establishing a new grant
|
||||||
|
// grant = new provider.Grant({
|
||||||
|
// accountId,
|
||||||
|
// clientId: params.client_id,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (details.missingOIDCScope) {
|
||||||
|
// grant.addOIDCScope(details.missingOIDCScope.join(' '));
|
||||||
|
// }
|
||||||
|
// if (details.missingOIDCClaims) {
|
||||||
|
// grant.addOIDCClaims(details.missingOIDCClaims);
|
||||||
|
// }
|
||||||
|
// if (details.missingResourceScopes) {
|
||||||
|
// for (const [indicator, scope] of Object.entries(details.missingResourceScopes)) {
|
||||||
|
// grant.addResourceScope(indicator, scope.join(' '));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// grantId = await grant.save();
|
||||||
|
|
||||||
|
// const consent = {};
|
||||||
|
// if (!interactionDetails.grantId) {
|
||||||
|
// // we don't have to pass grantId to consent, we're just modifying existing one
|
||||||
|
// consent.grantId = grantId;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const result = { consent };
|
||||||
|
// return provider.interactionFinished(ctx.req, ctx.res, result, {
|
||||||
|
// mergeWithLastSubmission: true,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// router.get('/interaction/:uid/abort', async (ctx) => {
|
||||||
|
// const result = {
|
||||||
|
// error: 'access_denied',
|
||||||
|
// error_description: 'End-User aborted interaction',
|
||||||
|
// };
|
||||||
|
|
||||||
|
// return provider.interactionFinished(ctx.req, ctx.res, result, {
|
||||||
|
// mergeWithLastSubmission: false,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// return router;
|
||||||
|
}
|
||||||
|
|
||||||
|
async install() {}
|
||||||
|
|
||||||
|
async afterEnable() {}
|
||||||
|
|
||||||
|
async afterDisable() {}
|
||||||
|
|
||||||
|
async remove() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PluginOidcServer;
|
Loading…
Reference in New Issue
Block a user