diff --git a/bin/configure-fastly.js b/bin/configure-fastly.js index af1ba50c5..76e4fdd89 100644 --- a/bin/configure-fastly.js +++ b/bin/configure-fastly.js @@ -217,6 +217,52 @@ async.auto({ if (err) return cb(err); cb(null, redirectResults); }); + }], + embedRedirectHeaders: ['version', function (cb, results) { + async.auto({ + requestCondition: function (cb2) { + var condition = { + name: 'routes/projects/embed (request)', + statement: 'req.url ~ "^/projects/embed/(\\d+)"', + type: 'REQUEST', + priority: 10 + }; + fastly.setCondition(results.version, condition, cb2); + }, + responseCondition: function (cb2) { + var condition = { + name: 'routes/projects/embed (response)', + statement: 'req.url ~ "^/projects/embed/(\\d+)"', + type: 'RESPONSE', + priority: 10 + }; + fastly.setCondition(results.version, condition, cb2); + }, + responseObject: ['requestCondition', function (cb2, redirectResults) { + var responseObject = { + name: 'redirects/projects/embed', + status: 301, + response: 'Moved Permanently', + request_condition: redirectResults.requestCondition.name + }; + fastly.setResponseObject(results.version, responseObject, cb2); + }], + redirectHeader: ['responseCondition', function (cb2, redirectResults) { + var header = { + name: 'redirects/projects/embed', + action: 'set', + ignore_if_set: 0, + type: 'RESPONSE', + dst: 'http.Location', + src: '"/projects/" + re.group.1 + "/embed"', + response_condition: redirectResults.responseCondition.name + }; + fastly.setFastlyHeader(results.version, header, cb2); + }] + }, function (err, redirectResults) { + if (err) return cb(err); + cb(null, redirectResults); + }); }] }, function (err, results) { if (err) throw new Error(err); diff --git a/src/routes.json b/src/routes.json index 3a58d04a2..2f8888786 100644 --- a/src/routes.json +++ b/src/routes.json @@ -199,7 +199,7 @@ }, { "name": "projects", - "pattern": "^/projects(/editor|(/\\d+(/editor|/fullscreen)?)?)?/?(\\?.*)?$", + "pattern": "^/projects(/editor|(/\\d+(/editor|/fullscreen|/embed)?)?)?/?(\\?.*)?$", "routeAlias": "/projects/?$", "view": "preview/preview", "title": "Scratch Project" diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index b694a71e8..c42f53695 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -883,13 +883,16 @@ module.exports.initGuiState = guiInitialState => { const parts = pathname.split('/').filter(Boolean); // parts[0]: 'projects' // parts[1]: either :id or 'editor' - // parts[2]: undefined if no :id, otherwise either 'editor' or 'fullscreen' + // parts[2]: undefined if no :id, otherwise either 'editor', 'fullscreen' or 'embed' if (parts.indexOf('editor') === -1) { guiInitialState = GUI.initPlayer(guiInitialState); } if (parts.indexOf('fullscreen') !== -1) { guiInitialState = GUI.initFullScreen(guiInitialState); } + if (parts.indexOf('embed') !== -1) { + guiInitialState = GUI.initEmbedded(guiInitialState); + } return guiInitialState; };