mirror of
https://github.com/sim1222/misskey.git
synced 2025-08-03 23:16:28 +09:00
63
packages/backend/src/server/api/endpoints/app/create.ts
Normal file
63
packages/backend/src/server/api/endpoints/app/create.ts
Normal file
@ -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
|
||||
});
|
||||
});
|
51
packages/backend/src/server/api/endpoints/app/show.ts
Normal file
51
packages/backend/src/server/api/endpoints/app/show.ts
Normal file
@ -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)
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user