Merge branch 'master' of ssh://git.infini.ltd:64221/infini/search-center

This commit is contained in:
chenhua 2020-11-19 00:06:31 +08:00
commit f9a88619ae
6 changed files with 261 additions and 131 deletions

View File

@ -265,16 +265,12 @@ export default [
path: '/settings/security',
name: 'security',
component: './Settings/Security/General',
}, {
path: '/settings/security/general',
name: 'general',
component: './Forms/BasicForm',
},
]
}, {
path: '/settings/audit',
name: 'audit',
component: './List/TableList',
component: './Settings/Security/Audit',
},
]
},

View File

@ -215,6 +215,10 @@ export default {
'app.settings.global.data_path':"Data Path",
'app.settings.global.log_path':"Log Path",
'app.settings.security.auth2factor_enabled':"Enable 2FA(two-factor) Authentication",
'app.settings.security.audit_enabled':"Enable Audit Logging",
'app.settings.menuMap.basic': 'Basic Settings',
'app.settings.menuMap.security': 'Security Settings',
'app.settings.menuMap.binding': 'Account Binding',

View File

@ -219,10 +219,14 @@ export default {
'app.settings.global.site_name':"站点名称",
'app.settings.global.domain':"站点域名",
'app.settings.global.listen_addr':"监听地址",
'app.settings.global.is_tls':"是否开启 TLS",
'app.settings.global.is_tls':"开启 TLS",
'app.settings.global.data_path':"数据目录",
'app.settings.global.log_path':"日志目录",
'app.settings.security.auth2factor_enabled':"开启双因子身份认证",
'app.settings.security.audit_enabled':"开启审计日志",
'app.settings.menuMap.basic': '基本设置',
'app.settings.menuMap.security': '安全设置',
'app.settings.menuMap.binding': '账号绑定',

View File

@ -96,7 +96,7 @@ class Global extends Component {
rules: [
{
required: true,
message: "勾选状态",
message: formatMessage({id: 'app.settings.global.is_tls-message'}, {}),
},
],
})(

View File

@ -0,0 +1,79 @@
import React, {Component, Fragment} from 'react';
import {Col, Divider,Card, Form, Icon, Input, Row, Select, Table} from 'antd';
import {formatMessage} from 'umi/locale';
const {Option} = Select;
const FormItem = Form.Item;
const {TextArea} = Input;
@Form.create()
class Audit extends Component {
componentDidMount() {
}
auditTable() {
const columns = [
{
title: 'ID',
dataIndex: 'key',
key: 'key',
render: text => <a>{text}</a>,
},
{
title: '用户名',
dataIndex: 'username',
key: 'username',
},
{
title: '消息日志',
dataIndex: 'message',
key: 'message',
}, {
title: '时间',
key: 'time',
dataIndex: 'time',
},
{
title: '操作',
key: 'action',
render: (text, record) => (
<span>
<a>详情</a>
</span>
),
},
];
const data = [
{
key: '1',
username: 'admin',
enabled: true,
message: "User Login Success",
time: "Oct 19, 2019",
}, {
key: '2',
username: 'user',
enabled: true,
message: "User Login Failed",
time: "Oct 19, 2019",
},
];
return (<Table columns={columns} dataSource={data} />);
}
render() {
return (
< Fragment >
< Card>{ this.auditTable() }</Card>
</Fragment>
);
}
}
export default Audit;

View File

@ -1,6 +1,8 @@
import React, {Component, Fragment} from 'react';
import {connect} from 'dva';
import {Card, Form, Input, Select, Button, message, Divider, Drawer, Descriptions} from 'antd';
import {Card, Form, Input, Select,Switch, Button, message, Divider, Drawer, Descriptions} from 'antd';
import { Table, Tag } from 'antd';
import { Icon } from 'antd';
const {Option} = Select;
import {formatMessage, FormattedMessage} from 'umi/locale';
@ -60,6 +62,151 @@ class General extends Component {
this.setState({operationkey: key});
};
ssoSettings() {
const columns = [
{
title: 'ID',
dataIndex: 'key',
key: 'key',
render: text => <a>{text}</a>,
},
{
title: '名称',
dataIndex: 'name',
key: 'name',
},
{
title: '类型',
dataIndex: 'type',
key: 'type',
},
{
title: '启用',
key: 'enabled',
dataIndex: 'enabled',
render: text => <Icon type="check-square" />,
}, {
title: '最后更新时间',
key: 'modify_time',
dataIndex: 'modify_time',
}, {
title: '创建时间',
key: 'create_time',
dataIndex: 'create_time',
},
{
title: '操作',
key: 'action',
render: (text, record) => (
<span>
<a>修改</a>
<Divider type="vertical" />
<a>删除</a>
</span>
),
},
];
const data = [
{
key: '1',
name: 'github',
type: "OAuth2",
enabled: true,
modify_time: "Mar 01, 2020",
create_time: "Oct 19, 2019",
},{
key: '2',
name: 'okta',
type: "OAuth2",
enabled: true,
modify_time: "Mar 02, 2020",
create_time: "Oct 29, 2019",
},
];
return (<Table columns={columns} dataSource={data} />);
}
userSettings() {
const columns = [
{
title: 'ID',
dataIndex: 'key',
key: 'key',
render: text => <a>{text}</a>,
},
{
title: '用户名',
dataIndex: 'user_name',
key: 'user_name',
},
{
title: '电子邮件地址',
dataIndex: 'email',
key: 'email',
},
{
title: '已激活',
key: 'enabled',
dataIndex: 'enabled',
render: text => <Icon type="check-square" />,
}, {
title: '管理员',
key: 'is_admin',
dataIndex: 'is_admin',
render: (text, record) => {
if (record.is_admin){
return <Icon type="check-square" />
}else{
return <Icon type="border" />
}
},
}, {
title: '创建时间',
key: 'create_time',
dataIndex: 'create_time',
},{
title: '上次登录',
key: 'last_login_time',
dataIndex: 'last_login_time',
},
{
title: '操作',
key: 'action',
render: (text, record) => (
<span>
<a>修改</a>
<Divider type="vertical" />
<a>删除</a>
</span>
),
},
];
const data = [
{
key: '1',
user_name: 'admin',
email: "admin@infini.ltd",
enabled: true,
is_admin: true,
create_time: "Oct 19, 2019",
last_login_time: "Mar 01, 2020",
}, {
key: '2',
user_name: 'user',
email: "user@infini.ltd",
enabled: true,
is_admin: false,
create_time: "Oct 19, 2019",
last_login_time: "Mar 01, 2020",
},
];
return (<Table columns={columns} dataSource={data} />);
}
generalSettings = () => {
const {
form: {getFieldDecorator},
@ -75,140 +222,40 @@ class General extends Component {
layout = "vertical"
hideRequiredMark >
<Form.Item label = {formatMessage({id: 'app.settings.security.auth2factor_enabled'})}>
{getFieldDecorator('auth2factor_enabled', {
initialValue: true,
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.security.auth2factor_enabled-message'}, {}),
},
],
})(
<Switch defaultChecked onChange={()=>{}} />
)}
</Form.Item>
< FormItem
label = {formatMessage({id: 'app.settings.security.auth2factor_enabled'})} >
{getFieldDecorator('profile',
label = {formatMessage({id: 'app.settings.security.audit_enabled'})} >
{getFieldDecorator('audit_enabled',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.profile-message'}, {}),
message: formatMessage({id: 'app.settings.security.audit_enabled-message'}, {}),
},
],
}
)
( < Input /> )
(
<Switch defaultChecked onChange={()=>{}} />
)
}
</FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.email'})} >
{getFieldDecorator('email',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.email-message'}, {}),
},
],
}
)
( < Input / >
)
}
<
/FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.nickname'})} >
{getFieldDecorator('name',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.nickname-message'}, {}),
},
],
}
)
( < Input / >
)
}
<
/FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.profile'})} >
{getFieldDecorator('profile',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.profile-message'}, {}),
},
],
}
)
(
< Input.TextArea
placeholder = {formatMessage({id: 'app.settings.basic.profile-placeholder'})}
rows = {4}
/>
)
}
<
/FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.country'})} >
{getFieldDecorator('country',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.country-message'}, {}),
},
],
}
)
(
< Select
style = {
{
maxWidth: 220
}
}>
<
Option
value = "China" > 中国 < /Option>
< /Select>
)
}
<
/FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.address'})} >
{getFieldDecorator('address',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.address-message'}, {}),
},
],
}
)
( < Input / >
)
}
<
/FormItem>
< FormItem
label = {formatMessage({id: 'app.settings.basic.phone'})} >
{getFieldDecorator('phone',
{
rules: [
{
required: true,
message: formatMessage({id: 'app.settings.basic.phone-message'}, {}),
},
// { validator: validatorPhone },
],
}
)
( < PhoneView / >
)
}
<
/FormItem>
< Button
type = "primary" >
< FormattedMessage
@ -233,9 +280,9 @@ class General extends Component {
const {operationkey} = this.state;
const contentList = {
tab1: ( < div > {this.generalSettings()} < /div>),
tab2: ( < div > SSO 集成 < /div>),
tab2: ( < div > {this.ssoSettings()}< /div>),
tab3: ( < div > 角色管理 < /div>),
tab4: ( < div > 用户管理 < /div>),
tab4: ( < div > {this.userSettings()} < /div>),
tab5: ( < div > 证书管理 < /div>),
}
;