]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/custom-validators/activitypub/account.ts
Move models to typescript-sequelize
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / activitypub / account.ts
CommitLineData
e4f97bab 1import * as validator from 'validator'
3fd3ab2d 2import { CONSTRAINTS_FIELDS } from '../../../initializers'
350e31d6
C
3import { isAccountNameValid } from '../accounts'
4import { exists, isUUIDValid } from '../misc'
5import { isActivityPubUrlValid, isBaseActivityValid } from './misc'
e4f97bab
C
6
7function isAccountEndpointsObjectValid (endpointObject: any) {
a2431b7d 8 return isActivityPubUrlValid(endpointObject.sharedInbox)
e4f97bab
C
9}
10
11function isAccountPublicKeyObjectValid (publicKeyObject: any) {
a2431b7d
C
12 return isActivityPubUrlValid(publicKeyObject.id) &&
13 isActivityPubUrlValid(publicKeyObject.owner) &&
e4f97bab
C
14 isAccountPublicKeyValid(publicKeyObject.publicKeyPem)
15}
16
e4f97bab
C
17function isAccountTypeValid (type: string) {
18 return type === 'Person' || type === 'Application'
19}
20
e4f97bab
C
21function isAccountPublicKeyValid (publicKey: string) {
22 return exists(publicKey) &&
23 typeof publicKey === 'string' &&
24 publicKey.startsWith('-----BEGIN PUBLIC KEY-----') &&
e34c85e5
C
25 publicKey.endsWith('-----END PUBLIC KEY-----') &&
26 validator.isLength(publicKey, CONSTRAINTS_FIELDS.ACCOUNTS.PUBLIC_KEY)
e4f97bab
C
27}
28
e4f97bab
C
29function isAccountPreferredUsernameValid (preferredUsername: string) {
30 return isAccountNameValid(preferredUsername)
31}
32
e4f97bab
C
33function isAccountPrivateKeyValid (privateKey: string) {
34 return exists(privateKey) &&
35 typeof privateKey === 'string' &&
36 privateKey.startsWith('-----BEGIN RSA PRIVATE KEY-----') &&
e34c85e5
C
37 privateKey.endsWith('-----END RSA PRIVATE KEY-----') &&
38 validator.isLength(privateKey, CONSTRAINTS_FIELDS.ACCOUNTS.PRIVATE_KEY)
e4f97bab
C
39}
40
41function isRemoteAccountValid (remoteAccount: any) {
a2431b7d 42 return isActivityPubUrlValid(remoteAccount.id) &&
e4f97bab
C
43 isUUIDValid(remoteAccount.uuid) &&
44 isAccountTypeValid(remoteAccount.type) &&
a2431b7d
C
45 isActivityPubUrlValid(remoteAccount.following) &&
46 isActivityPubUrlValid(remoteAccount.followers) &&
47 isActivityPubUrlValid(remoteAccount.inbox) &&
48 isActivityPubUrlValid(remoteAccount.outbox) &&
e4f97bab 49 isAccountPreferredUsernameValid(remoteAccount.preferredUsername) &&
a2431b7d 50 isActivityPubUrlValid(remoteAccount.url) &&
e4f97bab 51 isAccountPublicKeyObjectValid(remoteAccount.publicKey) &&
350e31d6 52 isAccountEndpointsObjectValid(remoteAccount.endpoints)
e4f97bab
C
53}
54
55function isAccountFollowingCountValid (value: string) {
56 return exists(value) && validator.isInt('' + value, { min: 0 })
57}
58
59function isAccountFollowersCountValid (value: string) {
60 return exists(value) && validator.isInt('' + value, { min: 0 })
61}
62
350e31d6
C
63function isAccountDeleteActivityValid (activity: any) {
64 return isBaseActivityValid(activity, 'Delete')
65}
66
67function isAccountFollowActivityValid (activity: any) {
68 return isBaseActivityValid(activity, 'Follow') &&
69 isActivityPubUrlValid(activity.object)
70}
71
72function isAccountAcceptActivityValid (activity: any) {
73 return isBaseActivityValid(activity, 'Accept')
74}
75
e4f97bab
C
76// ---------------------------------------------------------------------------
77
78export {
79 isAccountEndpointsObjectValid,
e4f97bab 80 isAccountPublicKeyObjectValid,
e4f97bab 81 isAccountTypeValid,
e4f97bab 82 isAccountPublicKeyValid,
e4f97bab 83 isAccountPreferredUsernameValid,
e4f97bab
C
84 isAccountPrivateKeyValid,
85 isRemoteAccountValid,
86 isAccountFollowingCountValid,
87 isAccountFollowersCountValid,
350e31d6
C
88 isAccountNameValid,
89 isAccountFollowActivityValid,
90 isAccountAcceptActivityValid,
91 isAccountDeleteActivityValid
e4f97bab 92}