1 import * as validator from 'validator'
3 import { exists, isUUIDValid } from '../misc'
4 import { isActivityPubUrlValid } from './misc'
5 import { isUserUsernameValid } from '../users'
7 function isAccountEndpointsObjectValid (endpointObject: any) {
8 return isAccountSharedInboxValid(endpointObject.sharedInbox)
11 function isAccountSharedInboxValid (sharedInbox: string) {
12 return isActivityPubUrlValid(sharedInbox)
15 function isAccountPublicKeyObjectValid (publicKeyObject: any) {
16 return isAccountPublicKeyIdValid(publicKeyObject.id) &&
17 isAccountPublicKeyOwnerValid(publicKeyObject.owner) &&
18 isAccountPublicKeyValid(publicKeyObject.publicKeyPem)
21 function isAccountPublicKeyIdValid (id: string) {
22 return isActivityPubUrlValid(id)
25 function isAccountTypeValid (type: string) {
26 return type === 'Person' || type === 'Application'
29 function isAccountPublicKeyOwnerValid (owner: string) {
30 return isActivityPubUrlValid(owner)
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-----')
40 function isAccountIdValid (id: string) {
41 return isActivityPubUrlValid(id)
44 function isAccountFollowingValid (id: string) {
45 return isActivityPubUrlValid(id)
48 function isAccountFollowersValid (id: string) {
49 return isActivityPubUrlValid(id)
52 function isAccountInboxValid (inbox: string) {
53 return isActivityPubUrlValid(inbox)
56 function isAccountOutboxValid (outbox: string) {
57 return isActivityPubUrlValid(outbox)
60 function isAccountNameValid (name: string) {
61 return isUserUsernameValid(name)
64 function isAccountPreferredUsernameValid (preferredUsername: string) {
65 return isAccountNameValid(preferredUsername)
68 function isAccountUrlValid (url: string) {
69 return isActivityPubUrlValid(url)
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-----')
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)
93 function isAccountFollowingCountValid (value: string) {
94 return exists(value) && validator.isInt('' + value, { min: 0 })
97 function isAccountFollowersCountValid (value: string) {
98 return exists(value) && validator.isInt('' + value, { min: 0 })
101 // ---------------------------------------------------------------------------
104 isAccountEndpointsObjectValid,
105 isAccountSharedInboxValid,
106 isAccountPublicKeyObjectValid,
107 isAccountPublicKeyIdValid,
109 isAccountPublicKeyOwnerValid,
110 isAccountPublicKeyValid,
112 isAccountFollowingValid,
113 isAccountFollowersValid,
115 isAccountOutboxValid,
116 isAccountPreferredUsernameValid,
118 isAccountPrivateKeyValid,
119 isRemoteAccountValid,
120 isAccountFollowingCountValid,
121 isAccountFollowersCountValid,