Merge branch 'f0ckdev' into 'master'
"download-any-videos"-fix See merge request !55
This commit is contained in:
		
							
								
								
									
										102
									
								
								src/websrv.js
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								src/websrv.js
									
									
									
									
									
								
							@@ -173,65 +173,57 @@ function Websrv(tlib) {
 | 
			
		||||
        }
 | 
			
		||||
        else if(filePath.match(/^\.\/(b|s|t)\/.*/)) { // file
 | 
			
		||||
          contentType = mimeTypes[extname];
 | 
			
		||||
          switch(contentType) {
 | 
			
		||||
            case "video/webm":
 | 
			
		||||
            case "video/mp4":
 | 
			
		||||
            case "video/quicktime":
 | 
			
		||||
            case "audio/mpeg":
 | 
			
		||||
            case "audio/ogg":
 | 
			
		||||
              var start = 0;
 | 
			
		||||
              var end = 0;
 | 
			
		||||
              var range = req.headers['range'];
 | 
			
		||||
              var stat = fs.statSync(filePath);
 | 
			
		||||
              if(range != null) {
 | 
			
		||||
                start = parseInt(range.slice(range.indexOf('bytes=')+6, range.indexOf('-')));
 | 
			
		||||
                end = parseInt(range.slice(range.indexOf('-')+1, range.length));
 | 
			
		||||
              }
 | 
			
		||||
              if(isNaN(end) || end == 0) end = stat.size-1;
 | 
			
		||||
              if(start > end) return;
 | 
			
		||||
              res.writeHead(206, {
 | 
			
		||||
                'Connection':'close',
 | 
			
		||||
                'Content-Type':contentType,
 | 
			
		||||
                'Content-Length':end - start,
 | 
			
		||||
                'Content-Range':'bytes '+start+'-'+end+'/'+stat.size,
 | 
			
		||||
                'Transfer-Encoding':'chunked'
 | 
			
		||||
              });
 | 
			
		||||
              var stream = fs.createReadStream(filePath, { flags: 'r', start: start, end: end});
 | 
			
		||||
              stream.pipe(res);
 | 
			
		||||
            break;
 | 
			
		||||
            default:
 | 
			
		||||
              fs.readFile(filePath, (error, content) => {
 | 
			
		||||
                if(error) {
 | 
			
		||||
                  if(error.code == 'ENOENT') {
 | 
			
		||||
                    res.writeHead(200, { 'Content-Type': contentType });
 | 
			
		||||
                    res.end('404 - f0ck you', 'utf-8');
 | 
			
		||||
                  }
 | 
			
		||||
                  else {
 | 
			
		||||
                    res.writeHead(500);
 | 
			
		||||
                    res.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
 | 
			
		||||
                    res.end();
 | 
			
		||||
                  }
 | 
			
		||||
          if(( contentType === "video/webm"
 | 
			
		||||
            || contentType === "video/mp4"
 | 
			
		||||
            || contentType === "video/quicktime"
 | 
			
		||||
            || contentType === "audio/mpeg"
 | 
			
		||||
            || contentType === "audio/ogg") && req.headers['range']) {
 | 
			
		||||
            var start = 0;
 | 
			
		||||
            var end = 0;
 | 
			
		||||
            var range = req.headers['range'];
 | 
			
		||||
            fs.stat(filePath, (err, stat) => {
 | 
			
		||||
              if(!err) {
 | 
			
		||||
                if(range != null) {
 | 
			
		||||
                  start = parseInt(range.slice(range.indexOf('bytes=')+6, range.indexOf('-')));
 | 
			
		||||
                  end = parseInt(range.slice(range.indexOf('-')+1, range.length));
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                  res.writeHead(200, { 'Content-Type': contentType, 'Content-Length': content.length, 'Cache-Control': 'max-age=2592000, public' });
 | 
			
		||||
                  res.end(content, 'utf-8');
 | 
			
		||||
                }
 | 
			
		||||
              });
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          fs.readFile(filePath, (error, content) => {
 | 
			
		||||
            if(error) {
 | 
			
		||||
              if(error.code == 'ENOENT') {
 | 
			
		||||
                res.writeHead(200, { 'Content-Type': contentType });
 | 
			
		||||
                res.end('404 - f0ck you', 'utf-8');
 | 
			
		||||
                if(isNaN(end) || end == 0) end = stat.size-1;
 | 
			
		||||
                if(start > end) return;
 | 
			
		||||
                res.writeHead(206, {
 | 
			
		||||
                  'Connection':'close',
 | 
			
		||||
                  'Content-Type':contentType,
 | 
			
		||||
                  'Content-Length':end - start,
 | 
			
		||||
                  'Content-Range':'bytes '+start+'-'+end+'/'+stat.size,
 | 
			
		||||
                  'Transfer-Encoding':'chunked'
 | 
			
		||||
                });
 | 
			
		||||
                var stream = fs.createReadStream(filePath, { flags: 'r', start: start, end: end});
 | 
			
		||||
                stream.pipe(res);
 | 
			
		||||
              }
 | 
			
		||||
              else {
 | 
			
		||||
                res.writeHead(500);
 | 
			
		||||
                res.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
 | 
			
		||||
                res.end();
 | 
			
		||||
                res.writeHead(404);
 | 
			
		||||
                res.end('404 - f0ck you', 'utf-8');
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
          else {
 | 
			
		||||
            fs.readFile(filePath, (error, content) => {
 | 
			
		||||
              if(error) {
 | 
			
		||||
                if(error.code == 'ENOENT') {
 | 
			
		||||
                  res.writeHead(200, { 'Content-Type': contentType });
 | 
			
		||||
                  res.end('404 - f0ck you', 'utf-8');
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                  res.writeHead(500);
 | 
			
		||||
                  res.end('Sorry, check with the site admin for error: '+error.code+' ..\n');
 | 
			
		||||
                  res.end();
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
              else {
 | 
			
		||||
                res.writeHead(200, { 'Content-Type': contentType, 'Content-Length': content.length, 'Cache-Control': 'max-age=2592000, public' });
 | 
			
		||||
                res.end(content, 'utf-8');
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(filePath.match(/^\.\/api/i)) { // api
 | 
			
		||||
          var url = filePath.split('/');
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user