]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/signup.ts
Upgrade server dep
[github/Chocobozzz/PeerTube.git] / server / helpers / signup.ts
CommitLineData
06215f15
C
1import { UserModel } from '../models/account/user'
2import * as ipaddr from 'ipaddr.js'
6dd9de95
C
3import { CONFIG } from '../initializers/config'
4
06215f15
C
5const isCidr = require('is-cidr')
6
4ce7eb71 7async function isSignupAllowed (): Promise<{ allowed: boolean, errorMessage?: string }> {
06215f15 8 if (CONFIG.SIGNUP.ENABLED === false) {
4ce7eb71 9 return { allowed: false }
06215f15
C
10 }
11
12 // No limit and signup is enabled
13 if (CONFIG.SIGNUP.LIMIT === -1) {
4ce7eb71 14 return { allowed: true }
06215f15
C
15 }
16
17 const totalUsers = await UserModel.countTotal()
18
4ce7eb71 19 return { allowed: totalUsers < CONFIG.SIGNUP.LIMIT }
06215f15
C
20}
21
22function 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
57export {
58 isSignupAllowed,
59 isSignupAllowedForCurrentIP
60}