diff options
Diffstat (limited to 'packages/backend/src/server/api/endpoints/app/create.ts')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/app/create.ts | 63 |
1 files changed, 63 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 + }); +}); |