summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2020-01-30 06:06:50 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2020-01-30 06:06:50 +0900
commitc44e8e6bf1086759239166f57af95977259e43be (patch)
tree6f923e5dafa0f6837af95e56815d7ced28d89592 /src/server/api/endpoints
parentAdd moderator switch (diff)
downloadsharkey-c44e8e6bf1086759239166f57af95977259e43be.tar.gz
sharkey-c44e8e6bf1086759239166f57af95977259e43be.tar.bz2
sharkey-c44e8e6bf1086759239166f57af95977259e43be.zip
Emoji copy
Diffstat (limited to 'src/server/api/endpoints')
-rw-r--r--src/server/api/endpoints/admin/emoji/copy.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/server/api/endpoints/admin/emoji/copy.ts b/src/server/api/endpoints/admin/emoji/copy.ts
new file mode 100644
index 0000000000..4b4319ca81
--- /dev/null
+++ b/src/server/api/endpoints/admin/emoji/copy.ts
@@ -0,0 +1,64 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { Emojis } from '../../../../../models';
+import { genId } from '../../../../../misc/gen-id';
+import { getConnection } from 'typeorm';
+import { ApiError } from '../../../error';
+import { DriveFile } from '../../../../../models/entities/drive-file';
+import { ID } from '../../../../../misc/cafy-id';
+import uploadFromUrl from '../../../../../services/drive/upload-from-url';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ emojiId: {
+ validator: $.type(ID)
+ },
+ },
+
+ errors: {
+ noSuchEmoji: {
+ message: 'No such emoji.',
+ code: 'NO_SUCH_EMOJI',
+ id: 'e2785b66-dca3-4087-9cac-b93c541cc425'
+ }
+ }
+};
+
+export default define(meta, async (ps, me) => {
+ const emoji = await Emojis.findOne(ps.emojiId);
+
+ if (emoji == null) {
+ throw new ApiError(meta.errors.noSuchEmoji);
+ }
+
+ let driveFile: DriveFile;
+
+ try {
+ // Create file
+ driveFile = await uploadFromUrl(emoji.url, null, null, null, false, true);
+ } catch (e) {
+ throw new ApiError();
+ }
+
+ const copied = await Emojis.save({
+ id: genId(),
+ updatedAt: new Date(),
+ name: emoji.name,
+ host: null,
+ aliases: [],
+ url: driveFile.url,
+ type: driveFile.type,
+ fileId: driveFile.id,
+ });
+
+ await getConnection().queryResultCache!.remove(['meta_emojis']);
+
+ return {
+ id: copied.id
+ };
+});