+function isSignupAllowedForCurrentIP (ip: string) {
+ const addr = ipaddr.parse(ip)
+ let excludeList = [ 'blacklist' ]
+ let matched = ''
+
+ // if there is a valid, non-empty whitelist, we exclude all unknown adresses too
+ if (CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr(cidr)).length > 0) {
+ excludeList.push('unknown')
+ }
+
+ if (addr.kind() === 'ipv4') {
+ const addrV4 = ipaddr.IPv4.parse(ip)
+ const rangeList = {
+ whitelist: CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr.v4(cidr))
+ .map(cidr => ipaddr.IPv4.parseCIDR(cidr)),
+ blacklist: CONFIG.SIGNUP.FILTERS.CIDR.BLACKLIST.filter(cidr => isCidr.v4(cidr))
+ .map(cidr => ipaddr.IPv4.parseCIDR(cidr))
+ }
+ matched = ipaddr.subnetMatch(addrV4, rangeList, 'unknown')
+ } else if (addr.kind() === 'ipv6') {
+ const addrV6 = ipaddr.IPv6.parse(ip)
+ const rangeList = {
+ whitelist: CONFIG.SIGNUP.FILTERS.CIDR.WHITELIST.filter(cidr => isCidr.v6(cidr))
+ .map(cidr => ipaddr.IPv6.parseCIDR(cidr)),
+ blacklist: CONFIG.SIGNUP.FILTERS.CIDR.BLACKLIST.filter(cidr => isCidr.v6(cidr))
+ .map(cidr => ipaddr.IPv6.parseCIDR(cidr))
+ }
+ matched = ipaddr.subnetMatch(addrV6, rangeList, 'unknown')
+ }
+
+ return !excludeList.includes(matched)
+}
+
+function computeResolutionsToTranscode (videoFileHeight: number) {
+ const resolutionsEnabled: number[] = []
+ const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS
+
+ // Put in the order we want to proceed jobs
+ const resolutions = [
+ VideoResolution.H_480P,
+ VideoResolution.H_360P,
+ VideoResolution.H_720P,
+ VideoResolution.H_240P,
+ VideoResolution.H_1080P
+ ]
+
+ for (const resolution of resolutions) {
+ if (configResolutions[ resolution + 'p' ] === true && videoFileHeight > resolution) {
+ resolutionsEnabled.push(resolution)
+ }
+ }
+
+ return resolutionsEnabled
+}
+
+const timeTable = {
+ ms: 1,
+ second: 1000,
+ minute: 60000,
+ hour: 3600000,
+ day: 3600000 * 24,
+ week: 3600000 * 24 * 7,
+ month: 3600000 * 24 * 30