diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..c264cd3 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,28 @@ +{ + "env": { + "node": true + }, + "rules": { + "array-bracket-spacing": [2, "never"], + "block-scoped-var": 2, + "brace-style": [2, "1tbs", {"allowSingleLine": true}], + "comma-dangle": [2, "always-multiline"], + "computed-property-spacing": [2, "never"], + "curly": 2, + "eol-last": 2, + "eqeqeq": [2, "smart"], + "max-len": [1, 125], + "new-cap": 1, + "no-extend-native": 2, + "no-mixed-spaces-and-tabs": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-unused-vars": 1, + "no-use-before-define": [2, "nofunc"], + "object-curly-spacing": [2, "never"], + "quotes": [2, "single", "avoid-escape"], + "semi": [2, "always"], + "keyword-spacing": 2, + "space-unary-ops": 2 + } +} diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 9238949..0000000 --- a/.jshintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "node": true, - "eqnull": true, - "undef": true, - "unused": "vars", - "mocha": true -} diff --git a/lib/cors-anywhere.js b/lib/cors-anywhere.js index 01c2388..5b535c7 100644 --- a/lib/cors-anywhere.js +++ b/lib/cors-anywhere.js @@ -104,11 +104,11 @@ function proxyRequest(req, res, proxy) { /** * "Allow observer to modify headers or abort response" * https://github.com/nodejitsu/node-http-proxy/blob/v1.11.1/lib/http-proxy/passes/web-incoming.js#L147 - * + * * This method modifies the response headers of the proxied response. * If a redirect is detected, the response is not sent to the client, * and a new request is initiated. - * + * * @param response {ClientRequest} The response of the proxied request * @param req {IncomingMessage} Incoming HTTP request, augmented with property corsAnywhereRequestState * @param req.corsAnywhereRequestState {object} @@ -122,7 +122,6 @@ function proxyRequest(req, res, proxy) { * @this {HttpProxy} */ function onProxyResponse(response, req, res) { - /* jshint validthis:true */ var proxy = this; var requestState = req.corsAnywhereRequestState; @@ -145,7 +144,7 @@ function onProxyResponse(response, req, res) { // cancel redirects. // Set header for debugging purposes. Do not try to parse it! res.setHeader('X-CORS-Redirect-' + requestState.redirectCount_, statusCode + ' ' + locationHeader); - + req.method = 'GET'; req.headers['content-length'] = '0'; delete req.headers['content-type']; @@ -160,15 +159,15 @@ function onProxyResponse(response, req, res) { res.setHeader = res.writeHead = function noop() {}; response.on = function noop2() {}; response.pipe = function(res) { - res.setHeader = setHeader; - res.writeHead = writeHead; - // Trigger proxyReq.abort() (this is not of any imporance, it's just used to stop wasting resources.) - // https://github.com/nodejitsu/node-http-proxy/blob/v1.11.1/lib/http-proxy/passes/web-incoming.js#L125-L128 - req.emit('aborted'); - // Remove all listeners (=reset events to initial state) - req.removeAllListeners(); - // Initiate a new proxy request. - proxyRequest(req, res, proxy); + res.setHeader = setHeader; + res.writeHead = writeHead; + // Trigger proxyReq.abort() (this is not of any imporance, it's just used to stop wasting resources.) + // https://github.com/nodejitsu/node-http-proxy/blob/v1.11.1/lib/http-proxy/passes/web-incoming.js#L125-L128 + req.emit('aborted'); + // Remove all listeners (=reset events to initial state) + req.removeAllListeners(); + // Initiate a new proxy request. + proxyRequest(req, res, proxy); }; return; } @@ -200,12 +199,12 @@ function parseURL(req_url) { return null; } if (!match[1]) { - // scheme is omitted. + // Scheme is omitted. if (req_url.lastIndexOf('//', 0) === -1) { // "//" is omitted. req_url = '//' + req_url; } - req_url = (match[4] == '443' ? 'https:' : 'http:') + req_url; + req_url = (match[4] === '443' ? 'https:' : 'http:') + req_url; } return url.parse(req_url); } @@ -219,7 +218,7 @@ var getHandler = exports.getHandler = function(options, proxy) { originWhitelist: [], // If non-empty, requests not from an origin in this list will be blocked. requireHeader: null, // Require a header to be set? removeHeaders: [], // Strip these request headers. - setHeaders: {} // Set these request headers. + setHeaders: {}, // Set these request headers. }; if (options) { Object.keys(corsAnywhere).forEach(function(option) { @@ -248,7 +247,7 @@ var getHandler = exports.getHandler = function(options, proxy) { return function(req, res) { var cors_headers = withCORS({}, req); - if (req.method == 'OPTIONS') { + if (req.method === 'OPTIONS') { // Pre-flight request. Reply successfully: res.writeHead(200, cors_headers); res.end(); @@ -320,7 +319,7 @@ var getHandler = exports.getHandler = function(options, proxy) { location: location, getProxyForUrl: corsAnywhere.getProxyForUrl, maxRedirects: corsAnywhere.maxRedirects, - proxyBaseUrl: proxyBaseUrl + proxyBaseUrl: proxyBaseUrl, }; proxyRequest(req, res, proxy); @@ -330,7 +329,7 @@ var getHandler = exports.getHandler = function(options, proxy) { // Create server with default and given values // Creator still needs to call .listen() exports.createServer = function createServer(options) { - if (!options) options = {}; + options = options || {}; // Default options: var httpProxyOptions = { diff --git a/lib/regexp-top-level-domain.js b/lib/regexp-top-level-domain.js index 0063e4c..9e5460b 100644 --- a/lib/regexp-top-level-domain.js +++ b/lib/regexp-top-level-domain.js @@ -1,6 +1,8 @@ // Based on http://data.iana.org/TLD/tlds-alpha-by-domain.txt // '/\\.(?:' + document.body.firstChild.textContent.trim().split('\n').slice(1).join('|') + ')$/i'; +/* eslint max-len:0 */ + // # Version 2016021800, Last Updated Thu Feb 18 07:07:01 2016 UTC var regexp = /\.(?:AAA|AARP|ABB|ABBOTT|ABOGADO|AC|ACADEMY|ACCENTURE|ACCOUNTANT|ACCOUNTANTS|ACO|ACTIVE|ACTOR|AD|ADAC|ADS|ADULT|AE|AEG|AERO|AF|AFL|AG|AGENCY|AI|AIG|AIRFORCE|AIRTEL|AL|ALIBABA|ALIPAY|ALLFINANZ|ALSACE|AM|AMICA|AMSTERDAM|ANALYTICS|ANDROID|AO|APARTMENTS|APP|APPLE|AQ|AQUARELLE|AR|ARAMCO|ARCHI|ARMY|ARPA|ARTE|AS|ASIA|ASSOCIATES|AT|ATTORNEY|AU|AUCTION|AUDI|AUDIO|AUTHOR|AUTO|AUTOS|AW|AX|AXA|AZ|AZURE|BA|BAIDU|BAND|BANK|BAR|BARCELONA|BARCLAYCARD|BARCLAYS|BARGAINS|BAUHAUS|BAYERN|BB|BBC|BBVA|BCN|BD|BE|BEATS|BEER|BENTLEY|BERLIN|BEST|BET|BF|BG|BH|BHARTI|BI|BIBLE|BID|BIKE|BING|BINGO|BIO|BIZ|BJ|BLACK|BLACKFRIDAY|BLOOMBERG|BLUE|BM|BMS|BMW|BN|BNL|BNPPARIBAS|BO|BOATS|BOEHRINGER|BOM|BOND|BOO|BOOK|BOOTS|BOSCH|BOSTIK|BOT|BOUTIQUE|BR|BRADESCO|BRIDGESTONE|BROADWAY|BROKER|BROTHER|BRUSSELS|BS|BT|BUDAPEST|BUGATTI|BUILD|BUILDERS|BUSINESS|BUY|BUZZ|BV|BW|BY|BZ|BZH|CA|CAB|CAFE|CAL|CALL|CAMERA|CAMP|CANCERRESEARCH|CANON|CAPETOWN|CAPITAL|CAR|CARAVAN|CARDS|CARE|CAREER|CAREERS|CARS|CARTIER|CASA|CASH|CASINO|CAT|CATERING|CBA|CBN|CC|CD|CEB|CENTER|CEO|CERN|CF|CFA|CFD|CG|CH|CHANEL|CHANNEL|CHAT|CHEAP|CHLOE|CHRISTMAS|CHROME|CHURCH|CI|CIPRIANI|CIRCLE|CISCO|CITIC|CITY|CITYEATS|CK|CL|CLAIMS|CLEANING|CLICK|CLINIC|CLINIQUE|CLOTHING|CLOUD|CLUB|CLUBMED|CM|CN|CO|COACH|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMMBANK|COMMUNITY|COMPANY|COMPARE|COMPUTER|COMSEC|CONDOS|CONSTRUCTION|CONSULTING|CONTACT|CONTRACTORS|COOKING|COOL|COOP|CORSICA|COUNTRY|COUPONS|COURSES|CR|CREDIT|CREDITCARD|CREDITUNION|CRICKET|CROWN|CRS|CRUISES|CSC|CU|CUISINELLA|CV|CW|CX|CY|CYMRU|CYOU|CZ|DABUR|DAD|DANCE|DATE|DATING|DATSUN|DAY|DCLK|DE|DEALER|DEALS|DEGREE|DELIVERY|DELL|DELOITTE|DELTA|DEMOCRAT|DENTAL|DENTIST|DESI|DESIGN|DEV|DIAMONDS|DIET|DIGITAL|DIRECT|DIRECTORY|DISCOUNT|DJ|DK|DM|DNP|DO|DOCS|DOG|DOHA|DOMAINS|DOOSAN|DOWNLOAD|DRIVE|DUBAI|DURBAN|DVAG|DZ|EARTH|EAT|EC|EDEKA|EDU|EDUCATION|EE|EG|EMAIL|EMERCK|ENERGY|ENGINEER|ENGINEERING|ENTERPRISES|EPSON|EQUIPMENT|ER|ERNI|ES|ESQ|ESTATE|ET|EU|EUROVISION|EUS|EVENTS|EVERBANK|EXCHANGE|EXPERT|EXPOSED|EXPRESS|FAGE|FAIL|FAIRWINDS|FAITH|FAMILY|FAN|FANS|FARM|FASHION|FAST|FEEDBACK|FERRERO|FI|FILM|FINAL|FINANCE|FINANCIAL|FIRESTONE|FIRMDALE|FISH|FISHING|FIT|FITNESS|FJ|FK|FLICKR|FLIGHTS|FLORIST|FLOWERS|FLSMIDTH|FLY|FM|FO|FOO|FOOTBALL|FORD|FOREX|FORSALE|FORUM|FOUNDATION|FOX|FR|FRESENIUS|FRL|FROGANS|FRONTIER|FUND|FURNITURE|FUTBOL|FYI|GA|GAL|GALLERY|GALLUP|GAME|GARDEN|GB|GBIZ|GD|GDN|GE|GEA|GENT|GENTING|GF|GG|GGEE|GH|GI|GIFT|GIFTS|GIVES|GIVING|GL|GLASS|GLE|GLOBAL|GLOBO|GM|GMAIL|GMO|GMX|GN|GOLD|GOLDPOINT|GOLF|GOO|GOOG|GOOGLE|GOP|GOT|GOV|GP|GQ|GR|GRAINGER|GRAPHICS|GRATIS|GREEN|GRIPE|GROUP|GS|GT|GU|GUCCI|GUGE|GUIDE|GUITARS|GURU|GW|GY|HAMBURG|HANGOUT|HAUS|HDFCBANK|HEALTH|HEALTHCARE|HELP|HELSINKI|HERE|HERMES|HIPHOP|HITACHI|HIV|HK|HM|HN|HOCKEY|HOLDINGS|HOLIDAY|HOMEDEPOT|HOMES|HONDA|HORSE|HOST|HOSTING|HOTELES|HOTMAIL|HOUSE|HOW|HR|HSBC|HT|HU|HYUNDAI|IBM|ICBC|ICE|ICU|ID|IE|IFM|IINET|IL|IM|IMMO|IMMOBILIEN|IN|INDUSTRIES|INFINITI|INFO|ING|INK|INSTITUTE|INSURANCE|INSURE|INT|INTERNATIONAL|INVESTMENTS|IO|IPIRANGA|IQ|IR|IRISH|IS|ISELECT|IST|ISTANBUL|IT|ITAU|IWC|JAGUAR|JAVA|JCB|JE|JETZT|JEWELRY|JLC|JLL|JM|JMP|JO|JOBS|JOBURG|JOT|JOY|JP|JPRS|JUEGOS|KAUFEN|KDDI|KE|KFH|KG|KH|KI|KIA|KIM|KINDER|KITCHEN|KIWI|KM|KN|KOELN|KOMATSU|KP|KPN|KR|KRD|KRED|KW|KY|KYOTO|KZ|LA|LACAIXA|LAMBORGHINI|LAMER|LANCASTER|LAND|LANDROVER|LANXESS|LASALLE|LAT|LATROBE|LAW|LAWYER|LB|LC|LDS|LEASE|LECLERC|LEGAL|LEXUS|LGBT|LI|LIAISON|LIDL|LIFE|LIFEINSURANCE|LIFESTYLE|LIGHTING|LIKE|LIMITED|LIMO|LINCOLN|LINDE|LINK|LIVE|LIVING|LIXIL|LK|LOAN|LOANS|LOL|LONDON|LOTTE|LOTTO|LOVE|LR|LS|LT|LTD|LTDA|LU|LUPIN|LUXE|LUXURY|LV|LY|MA|MADRID|MAIF|MAISON|MAKEUP|MAN|MANAGEMENT|MANGO|MARKET|MARKETING|MARKETS|MARRIOTT|MBA|MC|MD|ME|MED|MEDIA|MEET|MELBOURNE|MEME|MEMORIAL|MEN|MENU|MEO|MG|MH|MIAMI|MICROSOFT|MIL|MINI|MK|ML|MM|MMA|MN|MO|MOBI|MOBILY|MODA|MOE|MOI|MOM|MONASH|MONEY|MONTBLANC|MORMON|MORTGAGE|MOSCOW|MOTORCYCLES|MOV|MOVIE|MOVISTAR|MP|MQ|MR|MS|MT|MTN|MTPC|MTR|MU|MUSEUM|MUTUELLE|MV|MW|MX|MY|MZ|NA|NADEX|NAGOYA|NAME|NATURA|NAVY|NC|NE|NEC|NET|NETBANK|NETWORK|NEUSTAR|NEW|NEWS|NEXUS|NF|NG|NGO|NHK|NI|NICO|NIKON|NINJA|NISSAN|NL|NO|NOKIA|NORTON|NOWRUZ|NP|NR|NRA|NRW|NTT|NU|NYC|NZ|OBI|OFFICE|OKINAWA|OM|OMEGA|ONE|ONG|ONL|ONLINE|OOO|ORACLE|ORANGE|ORG|ORGANIC|ORIGINS|OSAKA|OTSUKA|OVH|PA|PAGE|PAMPEREDCHEF|PANERAI|PARIS|PARS|PARTNERS|PARTS|PARTY|PE|PET|PF|PG|PH|PHARMACY|PHILIPS|PHOTO|PHOTOGRAPHY|PHOTOS|PHYSIO|PIAGET|PICS|PICTET|PICTURES|PID|PIN|PING|PINK|PIZZA|PK|PL|PLACE|PLAY|PLAYSTATION|PLUMBING|PLUS|PM|PN|POHL|POKER|PORN|POST|PR|PRAXI|PRESS|PRO|PROD|PRODUCTIONS|PROF|PROMO|PROPERTIES|PROPERTY|PROTECTION|PS|PT|PUB|PW|PWC|PY|QA|QPON|QUEBEC|QUEST|RACING|RE|READ|REALTOR|REALTY|RECIPES|RED|REDSTONE|REDUMBRELLA|REHAB|REISE|REISEN|REIT|REN|RENT|RENTALS|REPAIR|REPORT|REPUBLICAN|REST|RESTAURANT|REVIEW|REVIEWS|REXROTH|RICH|RICOH|RIO|RIP|RO|ROCHER|ROCKS|RODEO|ROOM|RS|RSVP|RU|RUHR|RUN|RW|RWE|RYUKYU|SA|SAARLAND|SAFE|SAFETY|SAKURA|SALE|SALON|SAMSUNG|SANDVIK|SANDVIKCOROMANT|SANOFI|SAP|SAPO|SARL|SAS|SAXO|SB|SBS|SC|SCA|SCB|SCHAEFFLER|SCHMIDT|SCHOLARSHIPS|SCHOOL|SCHULE|SCHWARZ|SCIENCE|SCOR|SCOT|SD|SE|SEAT|SECURITY|SEEK|SELECT|SENER|SERVICES|SEVEN|SEW|SEX|SEXY|SFR|SG|SH|SHARP|SHELL|SHIA|SHIKSHA|SHOES|SHOW|SHRIRAM|SI|SINGLES|SITE|SJ|SK|SKI|SKIN|SKY|SKYPE|SL|SM|SMILE|SN|SNCF|SO|SOCCER|SOCIAL|SOFTBANK|SOFTWARE|SOHU|SOLAR|SOLUTIONS|SONY|SOY|SPACE|SPIEGEL|SPREADBETTING|SR|SRL|ST|STADA|STAR|STARHUB|STATEFARM|STATOIL|STC|STCGROUP|STOCKHOLM|STORAGE|STUDIO|STUDY|STYLE|SU|SUCKS|SUPPLIES|SUPPLY|SUPPORT|SURF|SURGERY|SUZUKI|SV|SWATCH|SWISS|SX|SY|SYDNEY|SYMANTEC|SYSTEMS|SZ|TAB|TAIPEI|TAOBAO|TATAMOTORS|TATAR|TATTOO|TAX|TAXI|TC|TCI|TD|TEAM|TECH|TECHNOLOGY|TEL|TELEFONICA|TEMASEK|TENNIS|TF|TG|TH|THD|THEATER|THEATRE|TICKETS|TIENDA|TIFFANY|TIPS|TIRES|TIROL|TJ|TK|TL|TM|TMALL|TN|TO|TODAY|TOKYO|TOOLS|TOP|TORAY|TOSHIBA|TOURS|TOWN|TOYOTA|TOYS|TR|TRADE|TRADING|TRAINING|TRAVEL|TRAVELERS|TRAVELERSINSURANCE|TRUST|TRV|TT|TUBE|TUI|TUSHU|TV|TVS|TW|TZ|UA|UBS|UG|UK|UNICOM|UNIVERSITY|UNO|UOL|US|UY|UZ|VA|VACATIONS|VANA|VC|VE|VEGAS|VENTURES|VERISIGN|VERSICHERUNG|VET|VG|VI|VIAJES|VIDEO|VILLAS|VIN|VIP|VIRGIN|VISION|VISTA|VISTAPRINT|VIVA|VLAANDEREN|VN|VODKA|VOLKSWAGEN|VOTE|VOTING|VOTO|VOYAGE|VU|WALES|WALTER|WANG|WANGGOU|WATCH|WATCHES|WEATHER|WEATHERCHANNEL|WEBCAM|WEBER|WEBSITE|WED|WEDDING|WEIR|WF|WHOSWHO|WIEN|WIKI|WILLIAMHILL|WIN|WINDOWS|WINE|WME|WOLTERSKLUWER|WORK|WORKS|WORLD|WS|WTC|WTF|XBOX|XEROX|XIN|XN--11B4C3D|XN--1QQW23A|XN--30RR7Y|XN--3BST00M|XN--3DS443G|XN--3E0B707E|XN--3PXU8K|XN--42C2D9A|XN--45BRJ9C|XN--45Q11C|XN--4GBRIM|XN--55QW42G|XN--55QX5D|XN--6FRZ82G|XN--6QQ986B3XL|XN--80ADXHKS|XN--80AO21A|XN--80ASEHDB|XN--80ASWG|XN--8Y0A063A|XN--90A3AC|XN--90AIS|XN--9DBQ2A|XN--9ET52U|XN--B4W605FERD|XN--C1AVG|XN--C2BR7G|XN--CG4BKI|XN--CLCHC0EA0B2G2A9GCD|XN--CZR694B|XN--CZRS0T|XN--CZRU2D|XN--D1ACJ3B|XN--D1ALF|XN--E1A4C|XN--ECKVDTC9D|XN--EFVY88H|XN--ESTV75G|XN--FHBEI|XN--FIQ228C5HS|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--FJQ720A|XN--FLW351E|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--G2XX48C|XN--GECRJ9C|XN--H2BRJ9C|XN--HXT814E|XN--I1B6B1A6A2E|XN--IMR513N|XN--IO0A7I|XN--J1AEF|XN--J1AMH|XN--J6W193G|XN--JLQ61U9W7B|XN--KCRX77D1X4A|XN--KPRW13D|XN--KPRY57D|XN--KPU716F|XN--KPUT3I|XN--L1ACC|XN--LGBBAT1AD8J|XN--MGB9AWBF|XN--MGBA3A3EJT|XN--MGBA3A4F16A|XN--MGBAAM7A8H|XN--MGBAB2BD|XN--MGBAYH7GPA|XN--MGBB9FBPOB|XN--MGBBH1A71E|XN--MGBC0A9AZCG|XN--MGBERP4A5D4AR|XN--MGBPL2FH|XN--MGBT3DHD|XN--MGBTX2B|XN--MGBX4CD0AB|XN--MIX891F|XN--MK1BU44C|XN--MXTQ1M|XN--NGBC5AZD|XN--NGBE9E0A|XN--NODE|XN--NQV7F|XN--NQV7FS00EMA|XN--NYQY26A|XN--O3CW4H|XN--OGBPF8FL|XN--P1ACF|XN--P1AI|XN--PBT977C|XN--PGBS0DH|XN--PSSY2U|XN--Q9JYB4C|XN--QCKA1PMC|XN--QXAM|XN--RHQV96G|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--TCKWE|XN--UNUP4Y|XN--VERMGENSBERATER-CTB|XN--VERMGENSBERATUNG-PWB|XN--VHQUV|XN--VUQ861B|XN--WGBH1C|XN--WGBL6A|XN--XHQ521B|XN--XKC2AL3HYE2A|XN--XKC2DL3A5EE0H|XN--Y9A3AQ|XN--YFRO4I67O|XN--YGBI2AMMX|XN--ZFR164B|XPERIA|XXX|XYZ|YACHTS|YAHOO|YAMAXUN|YANDEX|YE|YODOBASHI|YOGA|YOKOHAMA|YOUTUBE|YT|ZA|ZARA|ZERO|ZIP|ZM|ZONE|ZUERICH|ZW)$/i; module.exports = regexp; diff --git a/package.json b/package.json index 8d21e2d..3070b87 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,23 @@ { "name": "cors-anywhere", "version": "0.3.0", - "description": "CORS Anywhere is a reverse proxy which adds CORS headers to the proxied request. Request URL is taken from the path", + "description": "CORS Anywhere is a reverse proxy which adds CORS headers to the proxied request. Request URL is taken from the path", "license": "MIT", "author": "Rob Wu ", "repository": { - "type": "git", - "url": "https://github.com/Rob--W/cors-anywhere.git" + "type": "git", + "url": "https://github.com/Rob--W/cors-anywhere.git" }, "bugs": { - "url": "https://github.com/Rob--W/cors-anywhere/issues/", - "email": "rob@robwu.nl" + "url": "https://github.com/Rob--W/cors-anywhere/issues/", + "email": "rob@robwu.nl" }, "keywords": [ - "cors", - "cross-domain", - "http-proxy", - "proxy", - "heroku" + "cors", + "cross-domain", + "http-proxy", + "proxy", + "heroku" ], "main": "./lib/cors-anywhere.js", "dependencies": { @@ -26,11 +26,13 @@ "requires-port": "1.0.0" }, "devDependencies": { + "eslint": "^2.2.0", "mocha": "~2.2.4", "nock": "~1.9.0", "supertest": "~0.15.0" }, "scripts": { + "lint": "eslint .", "test": "./node_modules/.bin/mocha ./test/test*.js --reporter spec" }, "engines": { diff --git a/server.js b/server.js index 2df8fb8..ad970ff 100644 --- a/server.js +++ b/server.js @@ -10,21 +10,21 @@ var originBlacklist = (process.env.CORSANYWHERE_BLACKLIST || '').split(','); var cors_proxy = require('./lib/cors-anywhere'); cors_proxy.createServer({ - originBlacklist: originBlacklist, - requireHeader: ['origin', 'x-requested-with'], - removeHeaders: [ - 'cookie', - 'cookie2', - // Strip Heroku-specific headers - 'x-heroku-queue-wait-time', - 'x-heroku-queue-depth', - 'x-heroku-dynos-in-use', - 'x-request-start' - ], - httpProxyOptions: { - // Do not add X-Forwarded-For, etc. headers, because Heroku already adds it. - xfwd: false - } + originBlacklist: originBlacklist, + requireHeader: ['origin', 'x-requested-with'], + removeHeaders: [ + 'cookie', + 'cookie2', + // Strip Heroku-specific headers + 'x-heroku-queue-wait-time', + 'x-heroku-queue-depth', + 'x-heroku-dynos-in-use', + 'x-request-start', + ], + httpProxyOptions: { + // Do not add X-Forwarded-For, etc. headers, because Heroku already adds it. + xfwd: false, + }, }).listen(port, host, function() { - console.log('Running CORS Anywhere on ' + host + ':' + port); + console.log('Running CORS Anywhere on ' + host + ':' + port); }); diff --git a/test/setup.js b/test/setup.js index ba5c70a..e958502 100644 --- a/test/setup.js +++ b/test/setup.js @@ -6,7 +6,7 @@ function echoheaders(origin) { nock(origin) .persist() .get('/echoheaders') - .reply(function(uri) { + .reply(function() { var headers = this.req.headers; var excluded_headers = [ 'accept-encoding', @@ -49,18 +49,18 @@ nock('http://example.com') .get('/redirecttarget') .reply(200, 'redirect target', { - 'Some-header': 'value' + 'Some-header': 'value', }) .head('/redirect') .reply(302, '', { - 'Location': '/redirecttarget' + Location: '/redirecttarget', }) .get('/redirect') .reply(302, 'redirecting...', { 'header at redirect': 'should not be here', - 'Location': '/redirecttarget' + Location: '/redirecttarget', }) .get('/redirectposttarget') @@ -71,22 +71,22 @@ nock('http://example.com') .post('/redirectpost') .reply(302, 'redirecting...', { - 'Location': '/redirectposttarget' + Location: '/redirectposttarget', }) .post('/redirect307') .reply(307, 'redirecting...', { - 'Location': '/redirectposttarget' + Location: '/redirectposttarget', }) .get('/redirect2redirect') .reply(302, 'redirecting to redirect...', { - 'Location': '/redirect' + Location: '/redirect', }) .get('/redirectloop') .reply(302, 'redirecting ad infinitum...', { - 'Location': '/redirectloop' + Location: '/redirectloop', }) .get('/proxyerror') diff --git a/test/test-memory.js b/test/test-memory.js index 440db1c..6155796 100644 --- a/test/test-memory.js +++ b/test/test-memory.js @@ -1,3 +1,4 @@ +/* eslint-env mocha */ // Run this specific test using: // npm test -- -f memory var http = require('http'); diff --git a/test/test.js b/test/test.js index 8085227..43b9e56 100644 --- a/test/test.js +++ b/test/test.js @@ -1,3 +1,4 @@ +/* eslint-env mocha */ require('./setup'); var createServer = require('../').createServer; @@ -8,7 +9,7 @@ var fs = require('fs'); var assert = require('assert'); var helpTextPath = path.join(__dirname, '../lib/help.txt'); -var helpText = fs.readFileSync(helpTextPath, { encoding: 'utf8' }); +var helpText = fs.readFileSync(helpTextPath, {encoding: 'utf8'}); request.Test.prototype.expectJSON = function(json, done) { this.expect(function(res) { @@ -132,7 +133,7 @@ describe('Basic functionality', function() { .post('/example.com/echopost') .attach('file', path.join(__dirname, 'dummy.txt')) .expect('Access-Control-Allow-Origin', '*') - .expect(/\r\nContent-Disposition: form-data; name="file"; filename="dummy.txt"\r\nContent-Type: text\/plain\r\n\r\ndummy content\n\r\n/, done); + .expect(/\r\nContent-Disposition: form-data; name="file"; filename="dummy.txt"\r\nContent-Type: text\/plain\r\n\r\ndummy content\n\r\n/, done); // eslint-disable-line max-len }); it('HEAD with redirect should be followed', function(done) { @@ -494,7 +495,7 @@ describe('setHeaders', function() { .expect('Access-Control-Allow-Origin', '*') .expectJSON({ host: 'example.com', - 'x-powered-by': 'CORS Anywhere' + 'x-powered-by': 'CORS Anywhere', }, done); }); @@ -505,7 +506,7 @@ describe('setHeaders', function() { .expect('Access-Control-Allow-Origin', '*') .expectJSON({ host: 'example.com', - 'x-powered-by': 'CORS Anywhere' + 'x-powered-by': 'CORS Anywhere', }, done); }); }); @@ -527,7 +528,7 @@ describe('setHeaders + removeHeaders', function() { .expect('Access-Control-Allow-Origin', '*') .expectJSON({ host: 'example.com', - 'x-powered-by': 'CORS Anywhere' + 'x-powered-by': 'CORS Anywhere', }, done); }); @@ -538,7 +539,7 @@ describe('setHeaders + removeHeaders', function() { .expect('Access-Control-Allow-Origin', '*') .expectJSON({ host: 'example.com', - 'x-powered-by': 'CORS Anywhere' + 'x-powered-by': 'CORS Anywhere', }, done); }); }); @@ -547,8 +548,8 @@ describe('httpProxyOptions.xfwd=false', function() { before(function() { cors_anywhere = createServer({ httpProxyOptions: { - xfwd: false - } + xfwd: false, + }, }); cors_anywhere_port = cors_anywhere.listen(0).address().port; }); @@ -577,8 +578,8 @@ describe('httpProxyOptions.getProxyForUrl', function() { cors_anywhere = createServer({ httpProxyOptions: { - xfwd: false - } + xfwd: false, + }, }); cors_anywhere_port = cors_anywhere.listen(0).address().port; });