]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/account.ts
Server shares user videos
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / account.ts
CommitLineData
e4f97bab 1import * as validator from 'validator'
e34c85e5 2import { CONSTRAINTS_FIELDS } from '../../../initializers/constants'
350e31d6
C
3import { isAccountNameValid } from '../accounts'
4import { exists, isUUIDValid } from '../misc'
5import { isActivityPubUrlValid, isBaseActivityValid } from './misc'
e4f97bab
C
6
7function isAccountEndpointsObjectValid (endpointObject: any) {
8 return isAccountSharedInboxValid(endpointObject.sharedInbox)
9}
10
11function isAccountSharedInboxValid (sharedInbox: string) {
12 return isActivityPubUrlValid(sharedInbox)
13}
14
15function isAccountPublicKeyObjectValid (publicKeyObject: any) {
16 return isAccountPublicKeyIdValid(publicKeyObject.id) &&
17 isAccountPublicKeyOwnerValid(publicKeyObject.owner) &&
18 isAccountPublicKeyValid(publicKeyObject.publicKeyPem)
19}
20
21function isAccountPublicKeyIdValid (id: string) {
22 return isActivityPubUrlValid(id)
23}
24
25function isAccountTypeValid (type: string) {
26 return type === 'Person' || type === 'Application'
27}
28
29function isAccountPublicKeyOwnerValid (owner: string) {
30 return isActivityPubUrlValid(owner)
31}
32
33function isAccountPublicKeyValid (publicKey: string) {
34 return exists(publicKey) &&
35 typeof publicKey === 'string' &&
36 publicKey.startsWith('-----BEGIN PUBLIC KEY-----') &&
e34c85e5
C
37 publicKey.endsWith('-----END PUBLIC KEY-----') &&
38 validator.isLength(publicKey, CONSTRAINTS_FIELDS.ACCOUNTS.PUBLIC_KEY)
e4f97bab
C
39}
40
41function isAccountIdValid (id: string) {
42 return isActivityPubUrlValid(id)
43}
44
45function isAccountFollowingValid (id: string) {
46 return isActivityPubUrlValid(id)
47}
48
49function isAccountFollowersValid (id: string) {
50 return isActivityPubUrlValid(id)
51}
52
53function isAccountInboxValid (inbox: string) {
54 return isActivityPubUrlValid(inbox)
55}
56
57function isAccountOutboxValid (outbox: string) {
58 return isActivityPubUrlValid(outbox)
59}
60
e4f97bab
C
61function isAccountPreferredUsernameValid (preferredUsername: string) {
62 return isAccountNameValid(preferredUsername)
63}
64
65function isAccountUrlValid (url: string) {
66 return isActivityPubUrlValid(url)
67}
68
69function isAccountPrivateKeyValid (privateKey: string) {
70 return exists(privateKey) &&
71 typeof privateKey === 'string' &&
72 privateKey.startsWith('-----BEGIN RSA PRIVATE KEY-----') &&
e34c85e5
C
73 privateKey.endsWith('-----END RSA PRIVATE KEY-----') &&
74 validator.isLength(privateKey, CONSTRAINTS_FIELDS.ACCOUNTS.PRIVATE_KEY)
e4f97bab
C
75}
76
77function isRemoteAccountValid (remoteAccount: any) {
78 return isAccountIdValid(remoteAccount.id) &&
79 isUUIDValid(remoteAccount.uuid) &&
80 isAccountTypeValid(remoteAccount.type) &&
81 isAccountFollowingValid(remoteAccount.following) &&
82 isAccountFollowersValid(remoteAccount.followers) &&
83 isAccountInboxValid(remoteAccount.inbox) &&
84 isAccountOutboxValid(remoteAccount.outbox) &&
85 isAccountPreferredUsernameValid(remoteAccount.preferredUsername) &&
86 isAccountUrlValid(remoteAccount.url) &&
87 isAccountPublicKeyObjectValid(remoteAccount.publicKey) &&
350e31d6 88 isAccountEndpointsObjectValid(remoteAccount.endpoints)
e4f97bab
C
89}
90
91function isAccountFollowingCountValid (value: string) {
92 return exists(value) && validator.isInt('' + value, { min: 0 })
93}
94
95function isAccountFollowersCountValid (value: string) {
96 return exists(value) && validator.isInt('' + value, { min: 0 })
97}
98
350e31d6
C
99function isAccountDeleteActivityValid (activity: any) {
100 return isBaseActivityValid(activity, 'Delete')
101}
102
103function isAccountFollowActivityValid (activity: any) {
104 return isBaseActivityValid(activity, 'Follow') &&
105 isActivityPubUrlValid(activity.object)
106}
107
108function isAccountAcceptActivityValid (activity: any) {
109 return isBaseActivityValid(activity, 'Accept')
110}
111
e4f97bab
C
112// ---------------------------------------------------------------------------
113
114export {
115 isAccountEndpointsObjectValid,
116 isAccountSharedInboxValid,
117 isAccountPublicKeyObjectValid,
118 isAccountPublicKeyIdValid,
119 isAccountTypeValid,
120 isAccountPublicKeyOwnerValid,
121 isAccountPublicKeyValid,
122 isAccountIdValid,
123 isAccountFollowingValid,
124 isAccountFollowersValid,
125 isAccountInboxValid,
126 isAccountOutboxValid,
127 isAccountPreferredUsernameValid,
128 isAccountUrlValid,
129 isAccountPrivateKeyValid,
130 isRemoteAccountValid,
131 isAccountFollowingCountValid,
132 isAccountFollowersCountValid,
350e31d6
C
133 isAccountNameValid,
134 isAccountFollowActivityValid,
135 isAccountAcceptActivityValid,
136 isAccountDeleteActivityValid
e4f97bab 137}