diff options
Diffstat (limited to 'server/helpers')
-rw-r--r-- | server/helpers/custom-jsonld-signature.ts | 68 | ||||
-rw-r--r-- | server/helpers/custom-validators/users.ts | 8 |
2 files changed, 73 insertions, 3 deletions
diff --git a/server/helpers/custom-jsonld-signature.ts b/server/helpers/custom-jsonld-signature.ts index 27a187db1..a3bceb047 100644 --- a/server/helpers/custom-jsonld-signature.ts +++ b/server/helpers/custom-jsonld-signature.ts | |||
@@ -1,13 +1,77 @@ | |||
1 | import * as AsyncLRU from 'async-lru' | 1 | import * as AsyncLRU from 'async-lru' |
2 | import * as jsonld from 'jsonld' | 2 | import * as jsonld from 'jsonld' |
3 | import * as jsig from 'jsonld-signatures' | 3 | import * as jsig from 'jsonld-signatures' |
4 | import { logger } from './logger' | ||
5 | |||
6 | const CACHE = { | ||
7 | 'https://w3id.org/security/v1': { | ||
8 | '@context': { | ||
9 | 'id': '@id', | ||
10 | 'type': '@type', | ||
11 | |||
12 | 'dc': 'http://purl.org/dc/terms/', | ||
13 | 'sec': 'https://w3id.org/security#', | ||
14 | 'xsd': 'http://www.w3.org/2001/XMLSchema#', | ||
15 | |||
16 | 'EcdsaKoblitzSignature2016': 'sec:EcdsaKoblitzSignature2016', | ||
17 | 'Ed25519Signature2018': 'sec:Ed25519Signature2018', | ||
18 | 'EncryptedMessage': 'sec:EncryptedMessage', | ||
19 | 'GraphSignature2012': 'sec:GraphSignature2012', | ||
20 | 'LinkedDataSignature2015': 'sec:LinkedDataSignature2015', | ||
21 | 'LinkedDataSignature2016': 'sec:LinkedDataSignature2016', | ||
22 | 'CryptographicKey': 'sec:Key', | ||
23 | |||
24 | 'authenticationTag': 'sec:authenticationTag', | ||
25 | 'canonicalizationAlgorithm': 'sec:canonicalizationAlgorithm', | ||
26 | 'cipherAlgorithm': 'sec:cipherAlgorithm', | ||
27 | 'cipherData': 'sec:cipherData', | ||
28 | 'cipherKey': 'sec:cipherKey', | ||
29 | 'created': { '@id': 'dc:created', '@type': 'xsd:dateTime' }, | ||
30 | 'creator': { '@id': 'dc:creator', '@type': '@id' }, | ||
31 | 'digestAlgorithm': 'sec:digestAlgorithm', | ||
32 | 'digestValue': 'sec:digestValue', | ||
33 | 'domain': 'sec:domain', | ||
34 | 'encryptionKey': 'sec:encryptionKey', | ||
35 | 'expiration': { '@id': 'sec:expiration', '@type': 'xsd:dateTime' }, | ||
36 | 'expires': { '@id': 'sec:expiration', '@type': 'xsd:dateTime' }, | ||
37 | 'initializationVector': 'sec:initializationVector', | ||
38 | 'iterationCount': 'sec:iterationCount', | ||
39 | 'nonce': 'sec:nonce', | ||
40 | 'normalizationAlgorithm': 'sec:normalizationAlgorithm', | ||
41 | 'owner': { '@id': 'sec:owner', '@type': '@id' }, | ||
42 | 'password': 'sec:password', | ||
43 | 'privateKey': { '@id': 'sec:privateKey', '@type': '@id' }, | ||
44 | 'privateKeyPem': 'sec:privateKeyPem', | ||
45 | 'publicKey': { '@id': 'sec:publicKey', '@type': '@id' }, | ||
46 | 'publicKeyBase58': 'sec:publicKeyBase58', | ||
47 | 'publicKeyPem': 'sec:publicKeyPem', | ||
48 | 'publicKeyWif': 'sec:publicKeyWif', | ||
49 | 'publicKeyService': { '@id': 'sec:publicKeyService', '@type': '@id' }, | ||
50 | 'revoked': { '@id': 'sec:revoked', '@type': 'xsd:dateTime' }, | ||
51 | 'salt': 'sec:salt', | ||
52 | 'signature': 'sec:signature', | ||
53 | 'signatureAlgorithm': 'sec:signingAlgorithm', | ||
54 | 'signatureValue': 'sec:signatureValue' | ||
55 | } | ||
56 | } | ||
57 | } | ||
4 | 58 | ||
5 | const nodeDocumentLoader = jsonld.documentLoaders.node() | 59 | const nodeDocumentLoader = jsonld.documentLoaders.node() |
6 | 60 | ||
7 | const lru = new AsyncLRU({ | 61 | const lru = new AsyncLRU({ |
8 | max: 10, | 62 | max: 10, |
9 | load: (key, cb) => { | 63 | load: (url, cb) => { |
10 | nodeDocumentLoader(key, cb) | 64 | if (CACHE[ url ] !== undefined) { |
65 | logger.debug('Using cache for JSON-LD %s.', url) | ||
66 | |||
67 | return cb(null, { | ||
68 | contextUrl: null, | ||
69 | document: CACHE[ url ], | ||
70 | documentUrl: url | ||
71 | }) | ||
72 | } | ||
73 | |||
74 | nodeDocumentLoader(url, cb) | ||
11 | } | 75 | } |
12 | }) | 76 | }) |
13 | 77 | ||
diff --git a/server/helpers/custom-validators/users.ts b/server/helpers/custom-validators/users.ts index 70af5f1f0..e3ad9102a 100644 --- a/server/helpers/custom-validators/users.ts +++ b/server/helpers/custom-validators/users.ts | |||
@@ -1,9 +1,10 @@ | |||
1 | import 'express-validator' | 1 | import 'express-validator' |
2 | import * as validator from 'validator' | 2 | import * as validator from 'validator' |
3 | import { UserRole } from '../../../shared' | 3 | import { UserNotificationSettingValue, UserRole } from '../../../shared' |
4 | import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants' | 4 | import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers/constants' |
5 | import { exists, isFileValid, isBooleanValid } from './misc' | 5 | import { exists, isFileValid, isBooleanValid } from './misc' |
6 | import { values } from 'lodash' | 6 | import { values } from 'lodash' |
7 | import { UserAdminFlag } from '../../../shared/models/users/user-flag.model' | ||
7 | 8 | ||
8 | const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS | 9 | const USERS_CONSTRAINTS_FIELDS = CONSTRAINTS_FIELDS.USERS |
9 | 10 | ||
@@ -54,6 +55,10 @@ function isUserAutoPlayVideoValid (value: any) { | |||
54 | return isBooleanValid(value) | 55 | return isBooleanValid(value) |
55 | } | 56 | } |
56 | 57 | ||
58 | function isUserAdminFlagsValid (value: any) { | ||
59 | return exists(value) && validator.isInt('' + value) | ||
60 | } | ||
61 | |||
57 | function isUserBlockedValid (value: any) { | 62 | function isUserBlockedValid (value: any) { |
58 | return isBooleanValid(value) | 63 | return isBooleanValid(value) |
59 | } | 64 | } |
@@ -85,6 +90,7 @@ export { | |||
85 | isUserVideoQuotaValid, | 90 | isUserVideoQuotaValid, |
86 | isUserVideoQuotaDailyValid, | 91 | isUserVideoQuotaDailyValid, |
87 | isUserUsernameValid, | 92 | isUserUsernameValid, |
93 | isUserAdminFlagsValid, | ||
88 | isUserEmailVerifiedValid, | 94 | isUserEmailVerifiedValid, |
89 | isUserNSFWPolicyValid, | 95 | isUserNSFWPolicyValid, |
90 | isUserWebTorrentEnabledValid, | 96 | isUserWebTorrentEnabledValid, |