This repository was archived by the owner on Feb 12, 2024. It is now read-only.
File tree 2 files changed +18
-1
lines changed
src/http/gateway/resources
2 files changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -92,6 +92,11 @@ module.exports = {
92
92
// add trailing slash for directories with implicit index.html
93
93
return h . redirect ( `${ path } /` ) . permanent ( true )
94
94
}
95
+ if ( request . headers [ 'service-worker' ] === 'script' ) {
96
+ // Disallow Service Worker registration on /ipfs scope
97
+ // https://github.com/ipfs/go-ipfs/issues/4025
98
+ if ( path . match ( / ^ \/ i p [ n f ] s \/ [ ^ / ] + $ / ) ) throw Boom . badRequest ( 'navigator.serviceWorker: registration is not allowed for this scope' )
99
+ }
95
100
96
101
// Support If-None-Match & Etag (Conditional Requests from RFC7232)
97
102
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
Original file line number Diff line number Diff line change @@ -104,7 +104,7 @@ describe('HTTP Gateway', function () {
104
104
expect ( res . headers . suborigin ) . to . equal ( undefined )
105
105
} )
106
106
107
- it ( '400 for request with invalid argument' , async ( ) => {
107
+ it ( 'returns 400 for request with invalid argument' , async ( ) => {
108
108
const res = await gateway . inject ( {
109
109
method : 'GET' ,
110
110
url : '/ipfs/invalid'
@@ -117,6 +117,18 @@ describe('HTTP Gateway', function () {
117
117
expect ( res . headers . suborigin ) . to . equal ( undefined )
118
118
} )
119
119
120
+ it ( 'returns 400 for service worker registration outside of an IPFS content root' , async ( ) => {
121
+ const res = await gateway . inject ( {
122
+ method : 'GET' ,
123
+ url : '/ipfs/QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o?filename=sw.js' ,
124
+ headers : { 'Service-Worker' : 'script' }
125
+ } )
126
+
127
+ // Expect 400 Bad Request
128
+ // https://github.com/ipfs/go-ipfs/issues/4025#issuecomment-342250616
129
+ expect ( res . statusCode ) . to . equal ( 400 )
130
+ } )
131
+
120
132
it ( 'valid CIDv0' , async ( ) => {
121
133
const res = await gateway . inject ( {
122
134
method : 'GET' ,
You can’t perform that action at this time.
0 commit comments