From 69757e6bec103b586ea909dd03629ef7f53b5673 Mon Sep 17 00:00:00 2001 From: Colby Gutierrez-Kraybill Date: Fri, 1 Dec 2017 09:24:17 -0500 Subject: [PATCH] Revert "[Master] Project page caching" --- bin/configure-fastly.js | 45 ++++++----------------- bin/lib/fastly-config-methods.js | 49 +++++++++++++++++++++---- test/unit/test_fastly_config_methods.js | 49 +++++++++++++++++++------ 3 files changed, 92 insertions(+), 51 deletions(-) diff --git a/bin/configure-fastly.js b/bin/configure-fastly.js index f0ffee088..1065ba8e1 100644 --- a/bin/configure-fastly.js +++ b/bin/configure-fastly.js @@ -1,7 +1,6 @@ var async = require('async'); var defaults = require('lodash.defaults'); var fastlyConfig = require('./lib/fastly-config-methods'); -const languages = require('../languages.json'); var route_json = require('../src/routes.json'); @@ -42,43 +41,23 @@ async.auto({ // on any of those route conditions. var notPassStatement = fastlyConfig.getAppRouteCondition('../build/*', routes, extraAppRoutes, __dirname); + // For all the routes in routes.json, construct a varnish-style regex that matches + // only if NONE of those routes are matched. + var passStatement = fastlyConfig.negateConditionStatement(notPassStatement); + // For a non-pass condition, point backend at s3 - var recvCondition = '' + - 'if (' + notPassStatement + ') {\n' + - ' set req.backend = F_s3;\n' + - ' set req.http.host = \"' + S3_BUCKET_NAME + '\";\n' + - '} else {\n' + - ' if (!req.http.Fastly-FF) {\n' + - ' if (req.http.X-Forwarded-For) {\n' + - ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For \", \" client.ip;\n' + - ' } else {\n' + - ' set req.http.Fastly-Temp-XFF = client.ip;\n' + - ' }\n' + - ' } else {\n' + - ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' + - ' }\n' + - ' set req.grace = 60s;\n' + - ' if (req.http.Cookie:scratchlanguage) {\n' + - ' set req.http.Accept-Language = req.http.Cookie:scratchlanguage;\n' + - ' } else {\n' + - ' set req.http.Accept-Language = accept.language_lookup("' + - Object.keys(languages).join(':') + '", ' + - '"en", ' + - 'std.tolower(req.http.Accept-Language)' + - ');\n' + - ' }\n' + - ' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' + - ' set req.http.Cookie = req.http.Cookie:scratchlanguage;\n' + - ' } else {\n' + - ' return(pass);\n' + - ' }\n' + - '}\n'; - + var backendCondition = fastlyConfig.setBackend( + 'F_s3', + S3_BUCKET_NAME, + notPassStatement + ); + // For a pass condition, set forwarding headers + var forwardCondition = fastlyConfig.setForwardHeaders(passStatement); fastly.setCustomVCL( results.version, 'recv-condition', - recvCondition, + backendCondition + forwardCondition, cb ); }], diff --git a/bin/lib/fastly-config-methods.js b/bin/lib/fastly-config-methods.js index 8ef064715..d84756262 100644 --- a/bin/lib/fastly-config-methods.js +++ b/bin/lib/fastly-config-methods.js @@ -84,6 +84,45 @@ var FastlyConfigMethods = { return 'redirects/' + route.pattern; }, + /** + * Returns custom vcl configuration as a string for setting the backend + * of a request to the given backend/host. + * + * @param {string} backend name of the backend declared in fastly + * @param {string} host name of the s3 bucket to be set as the host + * @param {string} condition condition under which backend should be set + */ + setBackend: function (backend, host, condition) { + return '' + + 'if (' + condition + ') {\n' + + ' set req.backend = ' + backend + ';\n' + + ' set req.http.host = \"' + host + '\";\n' + + '}\n'; + }, + + /** + * Returns custom vcl configuration as a string for headers that + * should be added for the condition in which a request is forwarded. + * + * @param {string} condition condition under which to set pass headers + */ + setForwardHeaders: function (condition) { + return '' + + 'if (' + condition + ') {\n' + + ' if (!req.http.Fastly-FF) {\n' + + ' if (req.http.X-Forwarded-For) {\n' + + ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For \", \" client.ip;\n' + + ' } else {\n' + + ' set req.http.Fastly-Temp-XFF = client.ip;\n' + + ' }\n' + + ' } else {\n' + + ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' + + ' }\n' + + ' set req.grace = 60s;\n' + + ' return(pass);\n' + + '}\n'; + }, + /** * Returns custom vcl configuration as a string that sets the varnish * Time to Live (TTL) for responses that come from s3. @@ -93,13 +132,9 @@ var FastlyConfigMethods = { setResponseTTL: function (condition) { return '' + 'if (' + condition + ') {\n' + - ' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' + - ' set beresp.http.Vary = "Accept-Encoding, Accept-Language";\n' + - ' } else {\n' + - ' set beresp.ttl = 0s;\n' + - ' set beresp.grace = 0s;\n' + - ' return(pass);\n' + - ' }\n' + + ' set beresp.ttl = 0s;\n' + + ' set beresp.grace = 0s;\n' + + ' return(pass);\n' + '}\n'; } }; diff --git a/test/unit/test_fastly_config_methods.js b/test/unit/test_fastly_config_methods.js index a2880006f..229d07043 100644 --- a/test/unit/test_fastly_config_methods.js +++ b/test/unit/test_fastly_config_methods.js @@ -59,17 +59,44 @@ tap.test('getAppRouteCondition', function (t) { t.end(); }); -tap.test('testSetTTL', function (t) { - var ttl = fastlyConfig.setResponseTTL('itsactuallyttyl'); - t.equal(ttl, '' + - 'if (itsactuallyttyl) {\n' + - ' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' + - ' set beresp.http.Vary = "Accept-Encoding, Accept-Language";\n' + - ' } else {\n' + - ' set beresp.ttl = 0s;\n' + - ' set beresp.grace = 0s;\n' + - ' return(pass);\n' + - ' }\n' + +tap.test('testSetBackend', function (t) { + var backend = fastlyConfig.setBackend('wemust', 'goback', 'marty'); + t.equal(backend, '' + + 'if (marty) {\n' + + ' set req.backend = wemust;\n' + + ' set req.http.host = \"goback\";\n' + + '}\n' + ); + t.end(); +}); + +tap.test('testSetForward', function (t) { + var forward = fastlyConfig.setForwardHeaders('alwaysforward'); + t.equal(forward, '' + + 'if (alwaysforward) {\n' + + ' if (!req.http.Fastly-FF) {\n' + + ' if (req.http.X-Forwarded-For) {\n' + + ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For ", " client.ip;\n' + + ' } else {\n' + + ' set req.http.Fastly-Temp-XFF = client.ip;\n' + + ' }\n' + + ' } else {\n' + + ' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' + + ' }\n' + + ' set req.grace = 60s;\n' + + ' return(pass);\n' + + '}\n' + ); + t.end(); +}); + +tap.test('testSetTTL', function (t) { + var ttl = fastlyConfig.setResponseTTL('itsactuallyttyl'); + t.equal(ttl, '' + + 'if (itsactuallyttyl) {\n' + + ' set beresp.ttl = 0s;\n' + + ' set beresp.grace = 0s;\n' + + ' return(pass);\n' + '}\n' ); t.end();