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