feat(admin): clients page
This commit is contained in:
parent
54e7659d9f
commit
7777628c8d
6 changed files with 121 additions and 9 deletions
|
@ -28,7 +28,7 @@ return [
|
||||||
(new Extend\Routes('forum'))
|
(new Extend\Routes('forum'))
|
||||||
->post('/oauth/authorize', 'oauth.authorize.post', Controllers\AuthorizeController::class),
|
->post('/oauth/authorize', 'oauth.authorize.post', Controllers\AuthorizeController::class),
|
||||||
(new Extend\Routes('api'))
|
(new Extend\Routes('api'))
|
||||||
->get('/oauth/clients', 'oauth.clients.list', Api\Controller\ListClientController::class),
|
->get('/oauth-clients', 'oauth.clients.list', Api\Controller\ListClientController::class),
|
||||||
|
|
||||||
(new Extend\Middleware('api'))->add(ResourceScopeMiddleware::class),
|
(new Extend\Middleware('api'))->add(ResourceScopeMiddleware::class),
|
||||||
];
|
];
|
||||||
|
|
BIN
js/dist/admin.js
generated
vendored
BIN
js/dist/admin.js
generated
vendored
Binary file not shown.
BIN
js/dist/admin.js.map
generated
vendored
BIN
js/dist/admin.js.map
generated
vendored
Binary file not shown.
|
@ -1,22 +1,104 @@
|
||||||
import app from 'flarum/admin/app';
|
import app from 'flarum/admin/app';
|
||||||
import Page from 'flarum/common/components/Page';
|
import Page from 'flarum/common/components/Page';
|
||||||
|
import AdminPage from 'flarum/admin/components/AdminPage';
|
||||||
|
import Button from 'flarum/common/components/Button';
|
||||||
|
import Client from "../../common/models/Client";
|
||||||
export default class ClientsPage extends Page {
|
export default class ClientsPage extends Page {
|
||||||
settingName = 'collapsible-posts.reasons';
|
settingName = 'collapsible-posts.reasons';
|
||||||
translationPrefix = 'foskym-oauth-center.admin.clients.';
|
translationPrefix = 'foskym-oauth-center.admin.clients.';
|
||||||
|
clients = [];
|
||||||
oninit(vnode) {
|
oninit(vnode) {
|
||||||
super.oninit(vnode);
|
super.oninit(vnode);
|
||||||
|
|
||||||
app.store.find('oauth/clients').then(() => {
|
this.fields = [
|
||||||
|
'client_id',
|
||||||
|
'client_secret',
|
||||||
|
'redirect_uri',
|
||||||
|
'grant_types',
|
||||||
|
'scope',
|
||||||
|
'client_name',
|
||||||
|
'client_desc',
|
||||||
|
'client_icon',
|
||||||
|
'client_home'
|
||||||
|
];
|
||||||
|
|
||||||
|
app.store.find('oauth-clients').then(r => {
|
||||||
|
this.clients = r;
|
||||||
|
this.fields.map(key => console.log(this.clients[0][key]))
|
||||||
m.redraw();
|
m.redraw();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
view() {
|
view() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div class={"OAuthCenter-clientsPage"}>
|
||||||
<h2>Clients Page</h2>
|
{
|
||||||
|
m('.Form-group', [
|
||||||
|
m('table', [
|
||||||
|
m('thead', m('tr', [
|
||||||
|
this.fields.map(key => m('th', app.translator.trans(this.translationPrefix + key))),
|
||||||
|
m('th'),
|
||||||
|
])),
|
||||||
|
m('tbody', [
|
||||||
|
this.clients.map((client, index) => m('tr', [
|
||||||
|
this.fields.map(key =>
|
||||||
|
m('td', m('input.FormControl', {
|
||||||
|
type: 'text',
|
||||||
|
value: client[key]() || '',
|
||||||
|
onchange: (event) => {
|
||||||
|
this.saveClientInfo(client.id(), key, event.target.value);
|
||||||
|
},
|
||||||
|
}))
|
||||||
|
),
|
||||||
|
m('td', Button.component({
|
||||||
|
className: 'Button Button--icon',
|
||||||
|
icon: 'fas fa-times',
|
||||||
|
onclick: () => {
|
||||||
|
this.clients.splice(index, 1);
|
||||||
|
|
||||||
|
// this.setting(settingName)(JSON.stringify(reasons));
|
||||||
|
},
|
||||||
|
})),
|
||||||
|
])),
|
||||||
|
m('tr', m('td', {
|
||||||
|
colspan: 9,
|
||||||
|
}, Button.component({
|
||||||
|
className: 'Button Button--block',
|
||||||
|
onclick: () => {
|
||||||
|
const client = app.store.createRecord('oauth-clients');
|
||||||
|
client.save({
|
||||||
|
client_id: this.randomString(32),
|
||||||
|
client_secret: this.randomString(32),
|
||||||
|
}).then(console.log);
|
||||||
|
|
||||||
|
// this.clients.push(Client.build({
|
||||||
|
//
|
||||||
|
// }));
|
||||||
|
|
||||||
|
// this.setting(settingName)(JSON.stringify(reasons));
|
||||||
|
},
|
||||||
|
}, app.translator.trans(this.translationPrefix + 'add_button')))),
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
])
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
randomString(len) {
|
||||||
|
len = len || 32;
|
||||||
|
let $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
let maxPos = $chars.length;
|
||||||
|
let pwd = '';
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
//0~32的整数
|
||||||
|
pwd += $chars.charAt(Math.floor(Math.random() * (maxPos + 1)));
|
||||||
|
}
|
||||||
|
return pwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveClientInfo(id, key, value) {
|
||||||
|
console.log(id, key, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,35 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.OAuthCenterPage-container {
|
||||||
|
max-width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.OAuthCenter-clientsPage {
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
padding: 3px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.FormControl {
|
||||||
|
background: @body-bg;
|
||||||
|
border-color: @control-bg;
|
||||||
|
|
||||||
|
// We set the same as Flarum default, but with more specificity
|
||||||
|
&:focus,
|
||||||
|
&.focus {
|
||||||
|
border-color: @primary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 992px) {
|
@media (min-width: 992px) {
|
||||||
.OAuthCenter {
|
.OAuthCenter {
|
||||||
|
|
|
@ -15,10 +15,11 @@ foskym-oauth-center:
|
||||||
redirect_uri: 回调地址(多地址请用空格分割)
|
redirect_uri: 回调地址(多地址请用空格分割)
|
||||||
grant_types: 授权类型(可空)
|
grant_types: 授权类型(可空)
|
||||||
scope: 权限(可空)
|
scope: 权限(可空)
|
||||||
name: 应用名称(可空)
|
client_name: 应用名称(可空)
|
||||||
description: 应用描述(可空)
|
client_desc: 应用描述(可空)
|
||||||
icon: 应用图标地址(可空 可使用fontawesome图标)
|
client_icon: 应用图标地址(可空 可使用fontawesome图标)
|
||||||
home: 主页地址(可空)
|
client_home: 主页地址(可空)
|
||||||
|
add_button: 添加应用
|
||||||
|
|
||||||
forum:
|
forum:
|
||||||
page:
|
page:
|
||||||
|
|
Loading…
Reference in a new issue