This commit is contained in:
syuilo 2019-04-15 12:20:48 +09:00
parent be5b9e4ab2
commit 3c2c9fc44b
5 changed files with 39 additions and 83 deletions

View file

@ -30,6 +30,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import i18n from '../../i18n'; import i18n from '../../i18n';
import { kinds } from '../../../../server/api/kinds';
export default Vue.extend({ export default Vue.extend({
i18n: i18n('dev/views/new-app.vue'), i18n: i18n('dev/views/new-app.vue'),
@ -40,14 +41,9 @@ export default Vue.extend({
cb: '', cb: '',
nidState: null, nidState: null,
permission: [], permission: [],
permissionsList: [] permissionsList: kinds
}; };
}, },
created() {
this.$root.api('permissions').then(permissions => {
this.permissionsList = permissions
});
},
methods: { methods: {
onSubmit() { onSubmit() {
this.$root.api('app/create', { this.$root.api('app/create', {

View file

@ -1,29 +0,0 @@
import define from '../define';
import { kindsList } from '../kinds';
export const meta = {
stability: 'stable',
desc: {
'ja-JP': 'パーミッションの一覧を返します。',
'en-US': 'Get the list of permissons.'
},
tags: ['meta'],
requireCredential: false,
params: {
},
res: {
type: 'array',
items: {
type: 'string',
}
},
};
export default define(meta, async () => {
return kindsList;
});

View file

@ -1,8 +1,4 @@
import endpoints from './endpoints'; export const kinds = [
import * as locale from '../../../locales/';
import { fromEntries } from '../../prelude/array';
export const kindsList = [
'read:account', 'read:account',
'write:account', 'write:account',
'read:blocks', 'read:blocks',
@ -24,35 +20,3 @@ export const kindsList = [
'write:reactions', 'write:reactions',
'write:votes' 'write:votes'
]; ];
export interface IKindInfo {
endpoints: string[];
descs: { [x: string]: string; };
}
export function kinds() {
const kinds = fromEntries(
kindsList
.map(k => [k, {
endpoints: [],
descs: fromEntries(
Object.keys(locale)
.map(l => [l, locale[l].common.permissions[k] as string] as [string, string])
) as { [x: string]: string; }
}] as [ string, IKindInfo ])
) as { [x: string]: IKindInfo; };
const errors = [] as string[][];
for (const endpoint of endpoints.filter(ep => !ep.meta.secure)) {
if (endpoint.meta.kind) {
const kind = endpoint.meta.kind;
if (kind in kinds) kinds[kind].endpoints.push(endpoint.name);
else errors.push([kind, endpoint.name]);
}
}
if (errors.length > 0) throw Error('\n ' + errors.map((e) => `Unknown kind (permission) "${e[0]}" found at ${e[1]}.`).join('\n '));
return kinds;
}

View file

@ -1,5 +1,40 @@
import config from '../../../config'; import config from '../../../config';
import { IKindInfo, kinds } from '../kinds'; import endpoints from '../endpoints';
import * as locale from '../../../../locales/';
import { fromEntries } from '../../../prelude/array';
import { kinds as kindsList } from '../kinds';
export interface IKindInfo {
endpoints: string[];
descs: { [x: string]: string; };
}
export function kinds() {
const kinds = fromEntries(
kindsList
.map(k => [k, {
endpoints: [],
descs: fromEntries(
Object.keys(locale)
.map(l => [l, locale[l].common.permissions[k] as string] as [string, string])
) as { [x: string]: string; }
}] as [ string, IKindInfo ])
) as { [x: string]: IKindInfo; };
const errors = [] as string[][];
for (const endpoint of endpoints.filter(ep => !ep.meta.secure)) {
if (endpoint.meta.kind) {
const kind = endpoint.meta.kind;
if (kind in kinds) kinds[kind].endpoints.push(endpoint.name);
else errors.push([kind, endpoint.name]);
}
}
if (errors.length > 0) throw Error('\n ' + errors.map((e) => `Unknown kind (permission) "${e[0]}" found at ${e[1]}.`).join('\n '));
return kinds;
}
export function getDescription(lang = 'ja-JP'): string { export function getDescription(lang = 'ja-JP'): string {
const permissionTable = (Object.entries(kinds()) as [string, IKindInfo][]) const permissionTable = (Object.entries(kinds()) as [string, IKindInfo][])

View file

@ -18,8 +18,6 @@ import * as assert from 'assert';
import * as childProcess from 'child_process'; import * as childProcess from 'child_process';
import { async, signup, request, post, react, uploadFile } from './utils'; import { async, signup, request, post, react, uploadFile } from './utils';
import { kinds } from '../src/server/api/kinds';
describe('API', () => { describe('API', () => {
let p: childProcess.ChildProcess; let p: childProcess.ChildProcess;
@ -967,13 +965,5 @@ describe('API', () => {
assert.strictEqual(res.body[0].id, alicePost.id); assert.strictEqual(res.body[0].id, alicePost.id);
})); }));
}); });
describe('kinds', () => {
it('登録されていないパーミッションを利用しているAPIがない', () => {
const res = kinds();
assert.strictEqual(typeof res === 'object', true);
});
});
}); });
*/ */