]>
Commit | Line | Data |
---|---|---|
136d7efd C |
1 | import { extname } from 'path' |
2 | import { v4 as uuidv4 } from 'uuid' | |
3 | import { isActivityPubUrlValid } from '@server/helpers/custom-validators/activitypub/misc' | |
4 | import { MIMETYPES } from '@server/initializers/constants' | |
5 | import { ActorModel } from '@server/models/actor/actor' | |
6 | import { FilteredModelAttributes } from '@server/types' | |
7 | import { ActivityPubActor, ActorImageType } from '@shared/models' | |
8 | ||
9 | function getActorAttributesFromObject ( | |
10 | actorObject: ActivityPubActor, | |
11 | followersCount: number, | |
12 | followingCount: number | |
13 | ): FilteredModelAttributes<ActorModel> { | |
14 | return { | |
15 | type: actorObject.type, | |
16 | preferredUsername: actorObject.preferredUsername, | |
17 | url: actorObject.id, | |
18 | publicKey: actorObject.publicKey.publicKeyPem, | |
19 | privateKey: null, | |
20 | followersCount, | |
21 | followingCount, | |
22 | inboxUrl: actorObject.inbox, | |
23 | outboxUrl: actorObject.outbox, | |
24 | followersUrl: actorObject.followers, | |
25 | followingUrl: actorObject.following, | |
26 | ||
27 | sharedInboxUrl: actorObject.endpoints?.sharedInbox | |
28 | ? actorObject.endpoints.sharedInbox | |
29 | : null | |
30 | } | |
31 | } | |
32 | ||
33 | function getImageInfoFromObject (actorObject: ActivityPubActor, type: ActorImageType) { | |
34 | const mimetypes = MIMETYPES.IMAGE | |
35 | const icon = type === ActorImageType.AVATAR | |
36 | ? actorObject.icon | |
37 | : actorObject.image | |
38 | ||
39 | if (!icon || icon.type !== 'Image' || !isActivityPubUrlValid(icon.url)) return undefined | |
40 | ||
41 | let extension: string | |
42 | ||
43 | if (icon.mediaType) { | |
44 | extension = mimetypes.MIMETYPE_EXT[icon.mediaType] | |
45 | } else { | |
46 | const tmp = extname(icon.url) | |
47 | ||
48 | if (mimetypes.EXT_MIMETYPE[tmp] !== undefined) extension = tmp | |
49 | } | |
50 | ||
51 | if (!extension) return undefined | |
52 | ||
53 | return { | |
54 | name: uuidv4() + extension, | |
55 | fileUrl: icon.url, | |
56 | height: icon.height, | |
57 | width: icon.width, | |
58 | type | |
59 | } | |
60 | } | |
61 | ||
62 | function getActorDisplayNameFromObject (actorObject: ActivityPubActor) { | |
63 | return actorObject.name || actorObject.preferredUsername | |
64 | } | |
65 | ||
66 | export { | |
67 | getActorAttributesFromObject, | |
68 | getImageInfoFromObject, | |
69 | getActorDisplayNameFromObject | |
70 | } |