From 1f66b4dfbfc24828014513014d8ac3bf964db958 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Tue, 14 Feb 2023 01:26:10 +0000 Subject: [PATCH] Gitter migration: Setup redirects (rollout pt. 3) - Redirect various parts of the app to the homepage to give people some context - Redirect Gitter rooms to their new location on `app.gitter.im` - `gitter.im/:roomPart1/:roomPart2[/:roomPart3]` -> `app.gitter.im/#/room/#roomPart1_roomPart2[_roomPart3]:gitter.im` - Redirect Gitter room archives to `app.gitter.im` for now --- server/handlers/app/index.js | 226 +++++++++++++++++++++++++------------------ server/handlers/home.js | 29 ++---- server/handlers/index.js | 13 +-- 3 files changed, 141 insertions(+), 127 deletions(-) rewrite server/handlers/app/index.js (85%) diff --git a/server/handlers/app/index.js b/server/handlers/app/index.js dissimilarity index 85% index a60b8b615..91895844b 100644 --- a/server/handlers/app/index.js +++ b/server/handlers/app/index.js @@ -1,96 +1,130 @@ -'use strict'; - -var express = require('express'); -var uriContextResolverMiddleware = require('../uri-context/uri-context-resolver-middleware'); -var recentRoomService = require('gitter-web-rooms/lib/recent-room-service'); -var isPhoneMiddleware = require('../../web/middlewares/is-phone'); -var timezoneMiddleware = require('../../web/middlewares/timezone'); -var featureToggles = require('../../web/middlewares/feature-toggles'); -var preventClickjackingMiddleware = require('../../web/middlewares/prevent-clickjacking'); -var preventClickjackingOnlyGitterEmbedMiddleware = require('../../web/middlewares/prevent-clickjacking-only-gitter-embed'); -var archive = require('./archive'); -var identifyRoute = require('gitter-web-env').middlewares.identifyRoute; -var redirectErrorMiddleware = require('../uri-context/redirect-error-middleware'); -var desktopRenderer = require('../renderers/desktop-renderer'); -var embedRenderer = require('../renderers/embed-renderer'); - -function saveRoom(req) { - var userId = req.user && req.user.id; - var troupeId = req.uriContext && req.uriContext.troupe && req.uriContext.troupe.id; - - if (userId && troupeId) { - recentRoomService.saveLastVisitedTroupeforUserId(userId, troupeId); - } -} - -var mainFrameMiddlewarePipeline = [ - identifyRoute('app-main-frame'), - preventClickjackingMiddleware, - featureToggles, - uriContextResolverMiddleware, - isPhoneMiddleware, - timezoneMiddleware, - function(req, res, next) { - var uriContext = req.uriContext; - - return desktopRenderer.renderView(req, res, next, { - uriContext: uriContext - }); - }, - redirectErrorMiddleware -]; - -var frameMiddlewarePipeline = [ - identifyRoute('app-chat-frame'), // Legacy name - preventClickjackingOnlyGitterEmbedMiddleware, - featureToggles, - uriContextResolverMiddleware, - isPhoneMiddleware, - timezoneMiddleware, - function(req, res, next) { - saveRoom(req); - - return desktopRenderer.renderView(req, res, next, { - uriContext: req.uriContext - }); - }, - redirectErrorMiddleware -]; - -var embedMiddlewarePipeline = [ - identifyRoute('app-embed-frame'), - featureToggles, - uriContextResolverMiddleware, - isPhoneMiddleware, - timezoneMiddleware, - function(req, res, next) { - return embedRenderer.renderSecondaryView(req, res, next, { - uriContext: req.uriContext - }); - }, - redirectErrorMiddleware -]; - -var router = express.Router({ caseSensitive: true, mergeParams: true }); - -['/:roomPart1', '/:roomPart1/:roomPart2', '/:roomPart1/:roomPart2/:roomPart3'].forEach(function( - path -) { - router.get(path + '/archives', archive.linksList); - router.get(path + '/archives/all', archive.datesList); - router.get( - path + '/archives/:yyyy(\\d{4})/:mm(\\d{2})/:dd(\\d{2})/:hourRange(\\d\\d?-\\d\\d?)?', - archive.chatArchive - ); - - // Secondary view - router.get(path + '/~(chat|iframe)', frameMiddlewarePipeline); - - // Embedded View - router.get(path + '/~embed', embedMiddlewarePipeline); - - // Primary View - router.get(path, mainFrameMiddlewarePipeline); -}); - -module.exports = router; +'use strict'; + +const env = require('gitter-web-env'); +const config = env.config; +const express = require('express'); +const uriContextResolverMiddleware = require('../uri-context/uri-context-resolver-middleware'); +// var recentRoomService = require('gitter-web-rooms/lib/recent-room-service'); +// var isPhoneMiddleware = require('../../web/middlewares/is-phone'); +// var timezoneMiddleware = require('../../web/middlewares/timezone'); +// var featureToggles = require('../../web/middlewares/feature-toggles'); +// var preventClickjackingMiddleware = require('../../web/middlewares/prevent-clickjacking'); +// var preventClickjackingOnlyGitterEmbedMiddleware = require('../../web/middlewares/prevent-clickjacking-only-gitter-embed'); +// var archive = require('./archive'); +// var identifyRoute = require('gitter-web-env').middlewares.identifyRoute; +// var redirectErrorMiddleware = require('../uri-context/redirect-error-middleware'); +// var desktopRenderer = require('../renderers/desktop-renderer'); +// var embedRenderer = require('../renderers/embed-renderer'); +const { + getCanonicalAliasForGitterRoomUri +} = require('gitter-web-matrix-bridge/lib/matrix-alias-utils'); + +// function saveRoom(req) { +// var userId = req.user && req.user.id; +// var troupeId = req.uriContext && req.uriContext.troupe && req.uriContext.troupe.id; + +// if (userId && troupeId) { +// recentRoomService.saveLastVisitedTroupeforUserId(userId, troupeId); +// } +// } + +// Redirect from +// `gitter.im/:roomPart1/:roomPart2[/:roomPart3]` -> `app.gitter.im/#/room/#roomPart1_roomPart2[_roomPart3]:gitter.im` +const redirectRoomToElementMiddlewarePipeline = [ + uriContextResolverMiddleware, + (req, res) => { + var troupe = req.uriContext.troupe; + if (!troupe) { + return res.redirect(config.get('web:basepath')); + } + + const matrixRoomAlias = getCanonicalAliasForGitterRoomUri(troupe.uri); + const elementUrl = config.get('element:appUrl'); + res.redirect(elementUrl + `#/room/${matrixRoomAlias}`); + } +]; + +// var mainFrameMiddlewarePipeline = [ +// identifyRoute('app-main-frame'), +// preventClickjackingMiddleware, +// featureToggles, +// uriContextResolverMiddleware, +// isPhoneMiddleware, +// timezoneMiddleware, +// function(req, res, next) { +// var uriContext = req.uriContext; + +// return desktopRenderer.renderView(req, res, next, { +// uriContext: uriContext +// }); +// }, +// redirectErrorMiddleware +// ]; + +// var frameMiddlewarePipeline = [ +// identifyRoute('app-chat-frame'), // Legacy name +// preventClickjackingOnlyGitterEmbedMiddleware, +// featureToggles, +// uriContextResolverMiddleware, +// isPhoneMiddleware, +// timezoneMiddleware, +// function(req, res, next) { +// saveRoom(req); + +// return desktopRenderer.renderView(req, res, next, { +// uriContext: req.uriContext +// }); +// }, +// redirectErrorMiddleware +// ]; + +// var embedMiddlewarePipeline = [ +// identifyRoute('app-embed-frame'), +// featureToggles, +// uriContextResolverMiddleware, +// isPhoneMiddleware, +// timezoneMiddleware, +// function(req, res, next) { +// return embedRenderer.renderSecondaryView(req, res, next, { +// uriContext: req.uriContext +// }); +// }, +// redirectErrorMiddleware +// ]; + +var router = express.Router({ caseSensitive: true, mergeParams: true }); + +['/:roomPart1', '/:roomPart1/:roomPart2', '/:roomPart1/:roomPart2/:roomPart3'].forEach(function( + path +) { + router.get( + path + '/archives', + //archive.linksList + redirectRoomToElementMiddlewarePipeline + ); + router.get( + path + '/archives/all', + //archive.datesList + redirectRoomToElementMiddlewarePipeline + ); + router.get( + path + '/archives/:yyyy(\\d{4})/:mm(\\d{2})/:dd(\\d{2})/:hourRange(\\d\\d?-\\d\\d?)?', + //archive.chatArchive + redirectRoomToElementMiddlewarePipeline + ); + + // Secondary view + //router.get(path + '/~(chat|iframe)', frameMiddlewarePipeline); + + // Embedded View + //router.get(path + '/~embed', embedMiddlewarePipeline); + + // Primary View + router.get( + path, + //mainFrameMiddlewarePipeline + redirectRoomToElementMiddlewarePipeline + ); +}); + +module.exports = router; diff --git a/server/handlers/home.js b/server/handlers/home.js index 61c69126e..558623aac 100644 --- a/server/handlers/home.js +++ b/server/handlers/home.js @@ -1,12 +1,14 @@ 'use strict'; +const env = require('gitter-web-env'); +const config = env.config; var express = require('express'); var ensureLoggedIn = require('../web/middlewares/ensure-logged-in'); var timezoneMiddleware = require('../web/middlewares/timezone'); var isPhoneMiddleware = require('../web/middlewares/is-phone'); var featureToggles = require('../web/middlewares/feature-toggles'); -var userHomeRenderer = require('./renderers/userhome'); -const exploreRenderer = require('./renderers/explore-renderer'); +// var userHomeRenderer = require('./renderers/userhome'); +// const exploreRenderer = require('./renderers/explore-renderer'); var identifyRoute = require('gitter-web-env').middlewares.identifyRoute; var preventClickjackingMiddleware = require('../web/middlewares/prevent-clickjacking'); @@ -19,8 +21,8 @@ router.get( preventClickjackingMiddleware, isPhoneMiddleware, timezoneMiddleware, - function(req, res, next) { - userHomeRenderer.renderHomePage(req, res, next); + function(req, res) { + res.redirect(config.get('web:basepath')); } ); @@ -43,24 +45,7 @@ router.get( featureToggles, isPhoneMiddleware, function(req, res) { - if (req.user) { - return exploreRenderer.renderExplorePage(req, res); - } else { - return res.redirect('/explore'); - } - } -); - -// FIXME: Remove after 2020-8-22 -router.get( - '/learn', - identifyRoute('home-learn-main'), - ensureLoggedIn, - preventClickjackingMiddleware, - featureToggles, - isPhoneMiddleware, - function(req, res) { - return res.redirect('/home'); + res.redirect(config.get('web:basepath')); } ); diff --git a/server/handlers/index.js b/server/handlers/index.js index a51fd54df..5cc6f9dc7 100644 --- a/server/handlers/index.js +++ b/server/handlers/index.js @@ -1,12 +1,13 @@ 'use strict'; var env = require('gitter-web-env'); +const config = env.config; var express = require('express'); -var urlJoin = require('url-join'); +//var urlJoin = require('url-join'); const identifyRoute = require('gitter-web-env').middlewares.identifyRoute; const featureToggles = require('../web/middlewares/feature-toggles'); var preventClickjackingMiddleware = require('../web/middlewares/prevent-clickjacking'); -const exploreRenderer = require('./renderers/explore-renderer'); +//const exploreRenderer = require('./renderers/explore-renderer'); var router = express.Router({ caseSensitive: true, mergeParams: true }); @@ -20,13 +21,7 @@ router.get( preventClickjackingMiddleware, featureToggles, function(req, res) { - // If logged in and trying to go to `/explore`, redirect to `/home/explore` - if (req.user) { - var userHomeExploreUrl = urlJoin('/home/explore', req.url.replace(/explore\/?/, '')); - res.redirect(userHomeExploreUrl); - } else { - exploreRenderer.renderExplorePage(req, res); - } + res.redirect(config.get('web:basepath')); } ); -- 2.11.4.GIT