diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-12 02:02:25 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2021-11-12 02:02:25 +0900 |
| commit | 0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch) | |
| tree | 40874799472fa07416f17b50a398ac33b7771905 /packages/backend/src/server/api/endpoints/app | |
| parent | update deps (diff) | |
| download | sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2 sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip | |
refactoring
Resolve #7779
Diffstat (limited to 'packages/backend/src/server/api/endpoints/app')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/app/create.ts | 63 | ||||
| -rw-r--r-- | packages/backend/src/server/api/endpoints/app/show.ts | 51 |
2 files changed, 114 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/app/create.ts b/packages/backend/src/server/api/endpoints/app/create.ts new file mode 100644 index 0000000000..c2ce943dcc --- /dev/null +++ b/packages/backend/src/server/api/endpoints/app/create.ts @@ -0,0 +1,63 @@ +import $ from 'cafy'; +import define from '../../define'; +import { Apps } from '@/models/index'; +import { genId } from '@/misc/gen-id'; +import { unique } from '@/prelude/array'; +import { secureRndstr } from '@/misc/secure-rndstr'; + +export const meta = { + tags: ['app'], + + requireCredential: false as const, + + params: { + name: { + validator: $.str, + }, + + description: { + validator: $.str, + }, + + permission: { + validator: $.arr($.str).unique(), + }, + + // TODO: Check it is valid url + callbackUrl: { + validator: $.optional.nullable.str, + default: null, + }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'App', + }, +}; + +export default define(meta, async (ps, user) => { + // Generate secret + const secret = secureRndstr(32, true); + + // for backward compatibility + const permission = unique(ps.permission.map(v => v.replace(/^(.+)(\/|-)(read|write)$/, '$3:$1'))); + + // Create account + const app = await Apps.save({ + id: genId(), + createdAt: new Date(), + userId: user ? user.id : null, + name: ps.name, + description: ps.description, + permission, + callbackUrl: ps.callbackUrl, + secret: secret + }); + + return await Apps.pack(app, null, { + detail: true, + includeSecret: true + }); +}); diff --git a/packages/backend/src/server/api/endpoints/app/show.ts b/packages/backend/src/server/api/endpoints/app/show.ts new file mode 100644 index 0000000000..27f12eb44f --- /dev/null +++ b/packages/backend/src/server/api/endpoints/app/show.ts @@ -0,0 +1,51 @@ +import $ from 'cafy'; +import { ID } from '@/misc/cafy-id'; +import define from '../../define'; +import { ApiError } from '../../error'; +import { Apps } from '@/models/index'; + +export const meta = { + tags: ['app'], + + params: { + appId: { + validator: $.type(ID), + }, + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'App', + }, + + errors: { + noSuchApp: { + message: 'No such app.', + code: 'NO_SUCH_APP', + id: 'dce83913-2dc6-4093-8a7b-71dbb11718a3' + } + }, + + res: { + type: 'object' as const, + optional: false as const, nullable: false as const, + ref: 'App' + } +}; + +export default define(meta, async (ps, user, token) => { + const isSecure = user != null && token == null; + + // Lookup app + const ap = await Apps.findOne(ps.appId); + + if (ap == null) { + throw new ApiError(meta.errors.noSuchApp); + } + + return await Apps.pack(ap, user, { + detail: true, + includeSecret: isSecure && (ap.userId === user!.id) + }); +}); |