CIDR netmask support for ! and | operators
Massimo Melina committed
May 8, 2023 at 12:53 UTC
326902c2e09f7b5936dfea330c7e2c8516bdf4f9
1 file changed
+10
-3
src/misc.ts
+10
-3
@@ -178,9 +178,16 @@ export function isLocalHost(c: Connection | Koa.Context) {
178
}
179
180
export function makeNetMatcher(mask: string, emptyMaskReturns=false) {
181
- return !mask ? () => emptyMaskReturns
182
- : mask.includes('/') ? (ip: string) => cidr.contains(mask, ip)
183
- : makeMatcher(mask)
181
+ if (!mask)
182
+ return () => emptyMaskReturns
183
+ if (!mask.includes('/'))
184
+ return makeMatcher(mask)
185
+ const all = mask.split('|')
186
+ const neg = all[0]?.[0] === '!'
187
+ if (neg)
188
+ all[0] = all[0]!.slice(1)
189
+ return (ip: string) =>
190
+ neg !== all.some(x => cidr.contains(x, ip))
191
}
192
193
export function makeMatcher(mask: string, emptyMaskReturns=false) {