]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/signup.ts
Move config in its own file
[github/Chocobozzz/PeerTube.git] / server / helpers / signup.ts
1 import { UserModel } from '../models/account/user'
2 import * as ipaddr from 'ipaddr.js'
3 import { CONFIG } from '../initializers/config'
4
5 const isCidr = require('is-cidr')
6
7 async function isSignupAllowed () {
8 if (CONFIG.SIGNUP.ENABLED === false) {
9 return false
10 }
11
12 // No limit and signup is enabled
13 if (CONFIG.SIGNUP.LIMIT === -1) {
14 return true
15 }
16
17 const totalUsers = await UserModel.countTotal()
18
19 return totalUsers < CONFIG.SIGNUP.LIMIT
20 }
21
22 function isSignupAllowedForCurrentIP (ip: string) {
23 const addr = ipaddr.parse(ip)
24 let excludeList = [ 'blacklist' ]
25 let matched = ''
26
27 // if there is a valid, non-empty whitelist, we exclude all unknown adresses too
28 if (CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr(cidr)).length > 0) {
29 excludeList.push('unknown')
30 }
31
32 if (addr.kind() === 'ipv4') {
33 const addrV4 = ipaddr.IPv4.parse(ip)
34 const rangeList = {
35 whitelist: CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr.v4(cidr))
36 .map(cidr => ipaddr.IPv4.parseCIDR(cidr)),
37 blacklist: CONFIG.SIGNUP.FILTERS.CIDR.BLACKLIST.filter(cidr => isCidr.v4(cidr))
38 .map(cidr => ipaddr.IPv4.parseCIDR(cidr))
39 }
40 matched = ipaddr.subnetMatch(addrV4, rangeList, 'unknown')
41 } else if (addr.kind() === 'ipv6') {
42 const addrV6 = ipaddr.IPv6.parse(ip)
43 const rangeList = {
44 whitelist: CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr.v6(cidr))
45 .map(cidr => ipaddr.IPv6.parseCIDR(cidr)),
46 blacklist: CONFIG.SIGNUP.FILTERS.CIDR.BLACKLIST.filter(cidr => isCidr.v6(cidr))
47 .map(cidr => ipaddr.IPv6.parseCIDR(cidr))
48 }
49 matched = ipaddr.subnetMatch(addrV6, rangeList, 'unknown')
50 }
51
52 return !excludeList.includes(matched)
53 }
54
55 // ---------------------------------------------------------------------------
56
57 export {
58 isSignupAllowed,
59 isSignupAllowedForCurrentIP
60 }