@@ -10,6 +10,7 @@ import {
10
10
BLOCKED_REGIONS ,
11
11
GOVERNANCE_ONLY_REGIONS ,
12
12
PROXYCHECK_API_KEY ,
13
+ IP_ALLOWLIST ,
13
14
} from "./config/server" ;
14
15
15
16
const GEO_BLOCKED_PATH = `/${ GEO_BLOCKED_SEGMENT } ` ;
@@ -21,22 +22,31 @@ const proxyCheckClient = PROXYCHECK_API_KEY
21
22
: undefined ;
22
23
23
24
export const middleware = async ( request : NextRequest ) => {
24
- if ( await isProxyBlocked ( request ) ) {
25
- return rewrite ( request , VPN_BLOCKED_PATH ) ;
26
- } else if ( isGovernanceOnlyRegion ( request ) ) {
27
- return rewrite ( request , GOVERNANCE_ONLY_PATH ) ;
28
- } else if ( isRegionBlocked ( request ) ) {
29
- return rewrite ( request , GEO_BLOCKED_PATH ) ;
30
- } else if ( isBlockedSegment ( request ) ) {
31
- return rewrite ( request , "/not-found" ) ;
25
+ if ( isIpAllowlisted ( request ) ) {
26
+ return isBlockedSegment ( request )
27
+ ? rewrite ( request , "/not-found" )
28
+ : undefined ;
32
29
} else {
33
- return ;
30
+ if ( await isProxyBlocked ( request ) ) {
31
+ return rewrite ( request , VPN_BLOCKED_PATH ) ;
32
+ } else if ( isGovernanceOnlyRegion ( request ) ) {
33
+ return rewrite ( request , GOVERNANCE_ONLY_PATH ) ;
34
+ } else if ( isRegionBlocked ( request ) ) {
35
+ return rewrite ( request , GEO_BLOCKED_PATH ) ;
36
+ } else if ( isBlockedSegment ( request ) ) {
37
+ return rewrite ( request , "/not-found" ) ;
38
+ } else {
39
+ return ;
40
+ }
34
41
}
35
42
} ;
36
43
37
44
const rewrite = ( request : NextRequest , path : string ) =>
38
45
NextResponse . rewrite ( new URL ( path , request . url ) ) ;
39
46
47
+ const isIpAllowlisted = ( { ip } : NextRequest ) =>
48
+ ip !== undefined && IP_ALLOWLIST . includes ( ip ) ;
49
+
40
50
const isGovernanceOnlyRegion = ( { geo } : NextRequest ) =>
41
51
geo ?. country !== undefined &&
42
52
GOVERNANCE_ONLY_REGIONS . includes ( geo . country . toLowerCase ( ) ) ;
0 commit comments