Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1917)

Unified Diff: appengine/monorail/sitewide/moved.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/monorail/sitewide/hostinghome.py ('k') | appengine/monorail/sitewide/projectcreate.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/monorail/sitewide/moved.py
diff --git a/appengine/monorail/sitewide/moved.py b/appengine/monorail/sitewide/moved.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5eef52641b7416713b0d96f26321991097fb0d6
--- /dev/null
+++ b/appengine/monorail/sitewide/moved.py
@@ -0,0 +1,57 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is govered by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+
+"""A class to display a message explaining that a project has moved.
+
+When a project moves, we just display a link to the new location.
+"""
+
+import logging
+
+from framework import framework_bizobj
+from framework import framework_helpers
+from framework import monorailrequest
+from framework import servlet
+
+
+class ProjectMoved(servlet.Servlet):
+ """The ProjectMoved page explains that the project has moved."""
+
+ _PAGE_TEMPLATE = 'sitewide/moved-page.ezt'
+
+ def GatherPageData(self, mr):
+ """Build up a dictionary of data values to use when rendering the page."""
+
+ # We are not actually in /p/PROJECTNAME, so mr.project_name is None.
+ # Putting the ProjectMoved page inside a moved project would make
+ # the redirect logic much more complicated.
+ if not mr.specified_project:
+ raise monorailrequest.InputException('No project specified')
+
+ project = self.services.project.GetProjectByName(
+ mr.cnxn, mr.specified_project)
+ if not project:
+ self.abort(404, 'project not found')
+
+ if not project.moved_to:
+ # Only show this page for projects that are actually moved.
+ # Don't allow hackers to construct misleading links to this servlet.
+ logging.info('attempt to view ProjectMoved for non-moved project: %s',
+ mr.specified_project)
+ self.abort(400, 'This project has not been moved')
+
+ if framework_bizobj.RE_PROJECT_NAME.match(project.moved_to):
+ moved_to_url = framework_helpers.FormatMovedProjectURL(
+ mr, project.moved_to)
+ elif project.moved_to.startswith('http'):
+ moved_to_url = project.moved_to
+ else:
+ # Prevent users from using javascript: or any other tricky URL scheme.
+ moved_to_url = '#invalid-destination-url'
+
+ return {
+ 'project_name': mr.specified_project,
+ 'moved_to_url': moved_to_url,
+ }
« no previous file with comments | « appengine/monorail/sitewide/hostinghome.py ('k') | appengine/monorail/sitewide/projectcreate.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698