blob: 1ceb4863e5a45b583279b1841302c50873dc5c86 [file] [log] [blame]
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This file sets up all the urls for monorail pages."""
import flask
import urllib
from components import endpoints_flask
from components import prpc
from features import banspammer
from features import inboundemail
from features import hotlistcreate
from features import savedqueries
from features import userhotlists
from framework import banned
from framework import clientmon
from framework import csp_report
from framework import warmup
from framework import reap
from framework import deleteusers
from framework import excessiveactivity
from framework import teardown
from framework import ts_mon_js
from framework import trimvisitedpages
from project import peopledetail
from project import peoplelist
from project import projectadmin
from project import projectadminadvanced
from project import projectexport
from project import projectsummary
from project import projectupdates
from project import project_constants
from project import redirects
from services import api_svc_v1
from services import cachemanager_svc
from services import client_config_svc
from sitewide import custom_404
from sitewide import hostinghome
from sitewide import moved
from sitewide import userclearbouncing
from sitewide import userupdates
from sitewide import userprofile
from sitewide import projectcreate
from sitewide import usersettings
from sitewide import groupadmin
from sitewide import groupcreate
from sitewide import groupdetail
from sitewide import grouplist
from features import rerankhotlist
from features import hotlistdetails
from features import hotlistissues
from features import hotlistissuescsv
from features import hotlistpeople
from features import dateaction
from features import filterrules
from features import pubsub
from features import notify
from features import hotlistcreate
from features import savedqueries
from features import userhotlists
from features import banspammer
from search import backendnonviewable
from search import backendsearch
from tracker import componentcreate
from tracker import componentdetail
from tracker import fltconversion
from tracker import fieldcreate
from tracker import fielddetail
from tracker import templatecreate
from tracker import templatedetail
from tracker import issueadmin
from tracker import issueadvsearch
from tracker import issueattachment
from tracker import issueattachmenttext
from tracker import issuebulkedit
from tracker import issuedetailezt
from tracker import issueentry
from tracker import issueentryafterlogin
from tracker import issueexport
from tracker import issueoriginal
from tracker import issuereindex
from tracker import issuetips
from tracker import issueimport
from tracker import webcomponentspage
from api import api_routes as api_routes_v0
from api.v3 import api_routes as api_routes_v3
class ServletRegistry(object):
_PROJECT_NAME_REGEX = project_constants.PROJECT_NAME_PATTERN
_USERNAME_REGEX = r'[-+\w=.%]+(@([-a-z0-9]+\.)*[a-z0-9]+)?'
_HOTLIST_ID_NAME_REGEX = r'\d+|[a-zA-Z][-0-9a-zA-Z\.]*'
def __init__(self):
self.routes = []
def _AppendUrlToRoutes(self, rule_tuple, base=''):
"""Register each of the given servlets."""
for rule in rule_tuple:
self.routes.append([base + rule[0], rule[1], rule[2]])
def Register(self, services, flask_instance):
"""Register all the monorail request handlers."""
self._RegisterGroupUrls(services)
self._RegisterHostingUrl(services)
self._RegisterOldHostUrl(services)
self._RegisterRedirectProjectUrl()
self._RegisterCSPUrl()
self._RegisterProjectUrls(services, flask_instance)
self._RegisterUserUrls(services)
self._RegisterTaskUrl(services)
self._RegisterCronUrl(services)
self._RegisterBackendUrl(services)
self._RegisterMONSetUrl(services)
self._RegisterAHUrl(services)
self._RegisterPrpcUrl(services)
self._RegisterWebComponentsUrl(services)
self._RegisterFlaskUrlRules(flask_instance, self.routes)
def _RegisterFlaskUrlRules(
self, flask_instance, rule_tuple, removed_prefix=''):
"""Add url rules to a given Flask instance.
Args:
flask_instance: The Flask app to add URLs to.
rule_tuple: List of tuple of path, module and method to call, HTTP method
Returns:
The Flask instance.
"""
for rule in rule_tuple:
url = rule[0][len(removed_prefix):] if rule[0].startswith(
removed_prefix) else rule[0]
flask_instance.add_url_rule(url, view_func=rule[1], methods=rule[2])
return flask_instance
# pylint: disable=unused-argument
def _RegisterGroupUrls(self, services):
_GROUP_URL = [
(
'/', grouplist.GroupList(services=services).GetGroupList,
['GET']),
(
'/<string:viewed_username>/',
groupdetail.GroupDetail(services=services).GetGroupDetail, ['GET']),
(
'/<string:viewed_username>/edit.do',
groupdetail.GroupDetail(services=services).PostGroupDetail,
['POST']),
(
'/<string:viewed_username>/groupadmin',
groupadmin.GroupAdmin(services=services).GetGroupAdmin, ['GET']),
(
'/<string:viewed_username>/groupadmin.do',
groupadmin.GroupAdmin(services=services).PostGroupAdmin, ['POST']),
]
self._AppendUrlToRoutes(_GROUP_URL, '/g')
# pylint: disable=unused-argument
def _RegisterHostingUrl(self, service):
def DefaultToMainPage():
url = flask.request.host_url
return flask.redirect(url)
_HOSTING_URL = [
(
'/',
DefaultToMainPage,
['GET'],
),
(
'/excessiveActivity',
excessiveactivity.ExcessiveActivity(
services=service).GetExcessiveActivity, ['GET']),
(
'/settings',
usersettings.UserSettings(services=service).GetUserSetting, ['GET'
]),
(
'/settings.do',
usersettings.UserSettings(services=service).PostUserSetting,
['POST']),
('/noAccess', banned.Banned(services=service).GetNoAccessPage, ['GET']),
(
'/moved', moved.ProjectMoved(services=service).GetProjectMoved,
['GET']),
(
'/createProject',
projectcreate.ProjectCreate(services=service).GetCreateProject,
['GET']),
(
'/createProject.do',
projectcreate.ProjectCreate(services=service).PostCreateProject,
['POST']),
(
'/createHotlist',
hotlistcreate.HotlistCreate(services=service).GetCreateHotlist,
['GET']),
(
'/createHotlist.do',
hotlistcreate.HotlistCreate(services=service).PostCreateHotlist,
['POST']),
(
'/createGroup',
groupcreate.GroupCreate(services=service).GetGroupCreate, ['GET']),
(
'/createGroup.do',
groupcreate.GroupCreate(services=service).PostGroupCreate, ['POST'
]),
(
'/deleteGroup',
grouplist.GroupList(services=service).GetGroupDelete, ['GET']),
(
'/deleteGroup.do',
grouplist.GroupList(services=service).PostGroupDelete,
['POST']),
]
self._AppendUrlToRoutes(_HOSTING_URL, '/hosting')
def _RegisterOldHostUrl(self, service):
_OLD_HOSTING_URL = [
(
'/hosting_old/',
hostinghome.HostingHome(services=service).GetOldHostingHome,
['GET']),
]
self._AppendUrlToRoutes(_OLD_HOSTING_URL, '')
def _RegisterRedirectProjectUrl(self):
def GetRedirectProject():
url = flask.request.host_url
return flask.redirect(url)
_PROJECT_REDIRECT_URL = [
('/projects/', GetRedirectProject, ['GET']),
]
self._AppendUrlToRoutes(_PROJECT_REDIRECT_URL, '')
def _RegisterCSPUrl(self):
self._AppendUrlToRoutes([('/csp.do', csp_report.postCsp, ['POST'])], '')
def _RegisterProjectUrls(self, service, flaskapp_project):
_PROJECT_URLS = [
(
'/<string:project_name>/<string:unrecognized>',
custom_404.ErrorPage(services=service).Get404Page,
['GET'],
),
(
'/<string:project_name>/adminComponents',
issueadmin.AdminComponents(services=service).GetAdminComponentsPage,
['GET']),
(
'/<string:project_name>/adminComponents.do',
issueadmin.AdminComponents(
services=service).PostAdminComponentsPage, ['POST']),
(
'/<string:project_name>/adminIntro',
projectsummary.ProjectSummary(
services=service).GetProjectSummaryPage, ['GET']),
(
'/<string:project_name>/adminLabels',
issueadmin.AdminLabels(services=service).GetAdminLabelsPage,
['GET']),
(
'/<string:project_name>/adminLabels.do',
issueadmin.AdminLabels(services=service).PostAdminLabelsPage,
['POST']),
(
'/<string:project_name>/adminRules',
issueadmin.AdminRules(services=service).GetAdminRulesPage, ['GET']),
(
'/<string:project_name>/adminRules.do',
issueadmin.AdminRules(services=service).PostAdminRulesPage,
['POST']),
(
'/<string:project_name>/adminStatuses',
issueadmin.AdminStatuses(services=service).GetAdminStatusesPage,
['GET']),
(
'/<string:project_name>/adminStatuses.do',
issueadmin.AdminStatuses(services=service).PostAdminStatusesPage,
['POST']),
(
'/<string:project_name>/adminTemplates',
issueadmin.AdminTemplates(services=service).GetAdminTemplatesPage,
['GET']),
(
'/<string:project_name>/adminTemplates.do',
issueadmin.AdminTemplates(services=service).PostAdminTemplatesPage,
['POST']),
(
'/<string:project_name>/adminViews',
issueadmin.AdminViews(services=service).GetAdminViewsPage, ['GET']),
(
'/<string:project_name>/adminViews.do',
issueadmin.AdminViews(services=service).PostAdminViewsPage,
['POST']),
(
'/<string:project_name>/admin',
projectadmin.ProjectAdmin(services=service).GetProjectAdminPage,
['GET']),
(
'/<string:project_name>/admin.do',
projectadmin.ProjectAdmin(services=service).PostProjectAdminPage,
['POST']),
(
'/<string:project_name>/adminAdvanced',
projectadminadvanced.ProjectAdminAdvanced(
services=service).GetProjectAdminAdvancedPage, ['GET']),
(
'/<string:project_name>/adminAdvanced.do',
projectadminadvanced.ProjectAdminAdvanced(
services=service).PostProjectAdminAdvancedPage, ['POST']),
(
'/<string:project_name>/components/create',
componentcreate.ComponentCreate(
services=service).GetComponentCreatePage, ['GET']),
(
'/<string:project_name>/components/create.do',
componentcreate.ComponentCreate(
services=service).PostComponentCreatePage, ['POST']),
(
'/<string:project_name>/components/detail',
componentdetail.ComponentDetail(
services=service).GetComponentDetailPage, ['GET']),
(
'/<string:project_name>/components/detail.do',
componentdetail.ComponentDetail(
services=service).PostComponentDetailPage, ['POST']),
(
'/<string:project_name>/fields/create',
fieldcreate.FieldCreate(services=service).GetFieldCreate, ['GET']),
(
'/<string:project_name>/fields/create.do',
fieldcreate.FieldCreate(services=service).PostFieldCreate, ['POST'
]),
(
'/<string:project_name>/fields/detail',
fielddetail.FieldDetail(services=service).GetFieldDetail, ['GET']),
(
'/<string:project_name>/fields/detail.do',
fielddetail.FieldDetail(services=service).PostFieldDetail, ['POST'
]),
(
'/<string:project_name>/issues/advsearch',
issueadvsearch.IssueAdvancedSearch(
services=service).GetIssueAdvSearchPage, ['GET']),
(
'/<string:project_name>/issues/advsearch.do',
issueadvsearch.IssueAdvancedSearch(
services=service).PostIssueAdvSearchPage, ['POST']),
(
'/<string:project_name>/issues/detail',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsIssueDetail, ['GET']),
(
'/<string:project_name>/issues/export',
issueexport.IssueExport(services=service).GetIssueExport, ['GET']),
(
'/<string:project_name>/issues/export/json',
issueexport.IssueExportJSON(services=service).GetIssueExportJSON,
['GET']),
(
'/<string:project_name>/issues/export/json.do',
issueexport.IssueExportJSON(services=service).PostIssueExportJSON,
['POST']),
(
'/<string:project_name>/issues/import',
issueimport.IssueImport(services=service).GetIssueImport, ['GET']),
(
'/<string:project_name>/issues/import.do',
issueimport.IssueImport(services=service).PostIssueImport, ['POST'
]),
(
'/<string:project_name>/issues/original',
issueoriginal.IssueOriginal(services=service).GetIssueOriginal,
['GET']),
(
'/<string:project_name>/issues/entry',
issueentry.IssueEntry(services=service).GetIssueEntry, ['GET']),
(
'/<string:project_name>/issues/entry.do',
issueentry.IssueEntry(services=service).PostIssueEntry, ['POST']),
(
'/<string:project_name>/issues/entry_new',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsIssueNewEntry, ['GET']),
(
'/<string:project_name>/issues/list',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsIssueList, ['GET']),
(
'/<string:project_name>/issues/reindex',
issuereindex.IssueReindex(services=service).GetIssueReindex,
['GET']),
(
'/<string:project_name>/issues/reindex.do',
issuereindex.IssueReindex(services=service).PostIssueReindex,
['POST']),
(
'/<string:project_name>/issues/detail/list',
issuedetailezt.FlipperList(services=service).GetFlipperList,
['GET']),
(
'/<string:project_name>/issues/detail/flipper',
issuedetailezt.FlipperIndex(services=service).GetFlipperIndex,
['GET']),
(
'/<string:project_name>/issues/detail/flipper.do',
issuedetailezt.FlipperIndex(services=service).PostFlipperIndex,
['POST']),
(
'/<string:project_name>/issues/wizard',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsIssueWizard, ['GET']),
(
'/<string:project_name>/templates/create',
templatecreate.TemplateCreate(services=service).GetTemplateCreate,
['GET']),
(
'/<string:project_name>/templates/create.do',
templatecreate.TemplateCreate(services=service).PostTemplateCreate,
['POST']),
(
'/<string:project_name>/templates/detail',
templatedetail.TemplateDetail(services=service).GetTemplateDetail,
['GET']),
(
'/<string:project_name>/templates/detail.do',
templatedetail.TemplateDetail(services=service).PostTemplateDetail,
['POST']),
(
'/<string:project_name>/people/list',
peoplelist.PeopleList(services=service).GetPeopleListPage, ['GET']),
(
'/<string:project_name>/people/list.do',
peoplelist.PeopleList(services=service).PostPeopleListPage,
['POST']),
(
'/<string:project_name>/people/detail',
peopledetail.PeopleDetail(services=service).GetPeopleDetailPage,
['GET']),
(
'/<string:project_name>/people/detail.do',
peopledetail.PeopleDetail(services=service).PostPeopleDetailPage,
['POST']),
(
'/<string:project_name>/projectExport',
projectexport.ProjectExport(services=service).GetProjectExportPage,
['GET']),
(
'/<string:project_name>/projectExport/json',
projectexport.ProjectExportJSON(
services=service).GetProjectExportJSONPage, ['GET']),
(
'/<string:project_name>/projectExport/json.do',
projectexport.ProjectExportJSON(
services=service).PostProjectExportJSONPage, ['POST']),
(
'/<string:project_name>/updates/list',
projectupdates.ProjectUpdates(
services=service).GetProjectUpdatesPage, ['GET']),
(
'/<string:project_name>/w/list',
redirects.WikiRedirect(services=service).GetWikiListRedirect,
['GET']),
(
'/<string:project_name>/wiki/<string:wiki_page>',
redirects.WikiRedirect(services=service).GetWikiRedirect, ['GET']),
(
'/<string:project_name>/source/<string:source_page>',
redirects.SourceRedirect(services=service).GetSourceRedirect,
['GET']),
(
'/<string:project_name>/issues/entryafterlogin',
issueentryafterlogin.IssueEntryAfterLogin(
services=service).GetIssueEntryAfterLogin,
['GET'],
),
(
'/<string:project_name>/issues/searchtips',
issuetips.IssueSearchTips(services=service).GetIssueSearchTips,
['GET'],
),
(
'/<string:project_name>/issues/attachment',
issueattachment.AttachmentPage(services=service).GetAttachmentPage,
['GET'],
),
(
'/<string:project_name>/issues/attachmentText',
issueattachmenttext.AttachmentText(
services=service).GetAttachmentText,
['GET'],
),
(
'/<string:project_name>/issues/bulkedit',
issuebulkedit.IssueBulkEdit(services=service).GetIssueBulkEdit,
['GET']),
(
'/<string:project_name>/issues/bulkedit.do',
issuebulkedit.IssueBulkEdit(services=service).PostIssueBulkEdit,
['POST']),
(
'/<string:project_name>/issues/detail/next',
issuedetailezt.FlipperNext(
services=service).GetFlipperNextRedirectPage, ['GET']),
(
'/<string:project_name>/issues/detail/previous',
issuedetailezt.FlipperPrev(
services=service).GetFlipperPrevRedirectPage, ['GET']),
]
self._AppendUrlToRoutes(_PROJECT_URLS, '/p')
# pylint: disable=unused-variable
@flaskapp_project.route('/p/<string:project_name>/issues/approval')
@flaskapp_project.route('/p/<string:project_name>/issues/detail_ezt')
def ProjectRedirectToIssueDetail(project_name):
host_url = flask.request.host_url
url = host_url + 'p/' + project_name + '/issues/detail'
query_string = flask.request.query_string
if query_string:
url = '%s?%s' % (url, query_string)
return flask.redirect(url)
# pylint: disable=unused-variable
@flaskapp_project.route('/p/<string:project_name>/issues/list_new')
@flaskapp_project.route('/p/<string:project_name>/')
@flaskapp_project.route('/p/<string:project_name>/issues/')
def ProjectRedirectToIssueList(project_name):
host_url = flask.request.host_url
url = host_url + 'p/' + project_name + '/issues/list'
query_string = urllib.parse.urlencode(flask.request.args)
if query_string:
url = '%s?%s' % (url, query_string)
return flask.redirect(url)
# pylint: disable=unused-variable
@flaskapp_project.route('/p/')
def ProjectRedirectToMainPage():
url = flask.request.host_url
return flask.redirect(url)
# pylint: disable=unused-variable
@flaskapp_project.route('/p/<string:project_name>/people/')
def ProjectRedirectToPeopleList(project_name):
host_url = flask.request.host_url
url = host_url + 'p/' + project_name + '/people/list'
return flask.redirect(url)
def _RegisterUserUrls(self, service):
def UserRedirectToMainPage():
url = flask.request.host_url
return flask.redirect(url)
_USER_URLS = [
(
'/',
UserRedirectToMainPage,
['GET'],
),
(
'/<string:viewed_username>/queries',
savedqueries.SavedQueries(services=service).GetSavedQueriesPage,
['GET']),
(
'/<string:viewed_username>/queries.do',
savedqueries.SavedQueries(services=service).PostSavedQueriesPage,
['Post']),
(
'/<string:viewed_username>/hotlists',
userhotlists.UserHotlists(services=service).GetUserHotlistsPage,
['GET']),
(
'/<string:viewed_username>/hotlists.do',
userhotlists.UserHotlists(services=service).PostUserHotlistsPage,
['Post']),
(
'/<string:viewed_username>/',
userprofile.UserProfile(services=service).GetUserProfilePage,
['GET']),
(
'/<string:viewed_username>/edit.do',
userprofile.UserProfile(services=service).PostUserProfilePage,
['POST']),
(
'/<string:viewed_username>/ban.do',
userprofile.BanUser(services=service).PostBanUserPage, ['POST']),
(
'/<string:viewed_username>/banSpammer.do',
banspammer.BanSpammer(services=service).PostBanSpammerPage,
['POST']),
(
'/<string:viewed_username>/clearBouncing',
userclearbouncing.UserClearBouncing(
services=service).GetUserClearBouncingPage, ['GET']),
(
'/<string:viewed_username>/clearBouncing.do',
userclearbouncing.UserClearBouncing(
services=service).PostUserClearBouncingPage, ['Post']),
(
'/<string:viewed_username>/updates/projects',
userupdates.UserUpdatesProjects(
services=service).GetUserUpdatesProjectsPage, ['GET']),
(
'/<string:viewed_username>/updates/developers',
userupdates.UserUpdatesDevelopers(
services=service).GetUserUpdatesDevelopersPage, ['GET']),
(
'/<string:viewed_username>/updates',
userupdates.UserUpdatesIndividual(
services=service).GetUserUpdatesPage, ['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>',
hotlistissues.HotlistIssues(services=service).GetHotlistIssuesPage,
['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>.do',
hotlistissues.HotlistIssues(services=service).PostHotlistIssuesPage,
['POST']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/csv',
hotlistissuescsv.HotlistIssuesCsv(
services=service).GetHotlistIssuesCsvPage, ['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/people',
hotlistpeople.HotlistPeopleList(
services=service).GetHotlistPeoplePage, ['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/people.do',
hotlistpeople.HotlistPeopleList(
services=service).PostHotlistPeoplePage, ['POST']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/details',
hotlistdetails.HotlistDetails(
services=service).GetHotlistDetailsPage, ['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/details.do',
hotlistdetails.HotlistDetails(
services=service).PostHotlistDetailsPage, ['POST']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/rerank',
rerankhotlist.RerankHotlistIssue(
services=service).GetRerankHotlistIssuePage, ['GET']),
(
'/<string:viewed_username>/hotlists/<string:hotlist_id>/rerank.do',
rerankhotlist.RerankHotlistIssue(
services=service).PostRerankHotlistIssuePage, ['POST']),
]
self._AppendUrlToRoutes(_USER_URLS, '/u')
# pylint: disable=unused-argument
def _RegisterTaskUrl(self, service):
_TASK_URL = [
(
'/banSpammer.do',
banspammer.BanSpammerTask(services=service).PostBanSpammer,
['POST']),
(
'/sendWipeoutUserListsTask.do',
deleteusers.SendWipeoutUserListsTask(
services=service).PostSendWipeoutUserListsTask, ['POST']),
(
'/deleteWipeoutUsersTask.do',
deleteusers.DeleteWipeoutUsersTask(
services=service).PostDeleteWipeoutUsersTask, ['POST']),
(
'/deleteUsersTask.do',
deleteusers.DeleteUsersTask(services=service).PostDeleteUsersTask,
['POST']),
(
'/notifyRulesDeleted.do',
notify.NotifyRulesDeletedTask(
services=service).PostNotifyRulesDeletedTask, ['POST']),
(
'/notifyIssueChange.do',
notify.NotifyIssueChangeTask(
services=service).PostNotifyIssueChangeTask, ['POST']),
(
'/notifyBlockingChange.do',
notify.NotifyBlockingChangeTask(
services=service).PostNotifyBlockingChangeTask, ['POST']),
(
'/notifyBulkEdit.do', notify.NotifyBulkChangeTask(
services=service).PostNotifyBulkChangeTask, ['POST']),
(
'/notifyApprovalChange.do',
notify.NotifyApprovalChangeTask(
services=service).PostNotifyApprovalChangeTask, ['POST']),
(
'/publishPubsubIssueChange.do',
pubsub.PublishPubsubIssueChangeTask(
services=service).PostPublishPubsubIssueChangeTask, ['POST']),
(
'/issueDateAction.do',
dateaction.IssueDateActionTask(
services=service).PostIssueDateActionTask, ['POST']),
(
'/fltConversionTask.do',
fltconversion.FLTConvertTask(services=service).PostFLTConvertTask,
['POST']),
(
'/outboundEmail.do',
notify.OutboundEmailTask(services=service).PostOutboundEmailTask,
['POST']),
(
'/recomputeDerivedFields.do',
filterrules.RecomputeDerivedFieldsTask(
services=service).PostRecomputeDerivedFieldsTask, ['POST']),
]
self._AppendUrlToRoutes(_TASK_URL, '/_task')
# pylint: disable=unused-argument
def _RegisterCronUrl(self, service):
_CRON_URL = [
(
'/wipeoutSync',
deleteusers.WipeoutSyncCron(services=service).GetWipeoutSyncCron,
['GET']),
(
'/reindexQueue',
filterrules.ReindexQueueCron(services=service).GetReindexQueueCron,
['GET']),
(
'/dateAction',
dateaction.DateActionCron(services=service).GetDateActionCron,
['GET']),
(
'/ramCacheConsolidate',
cachemanager_svc.RamCacheConsolidate(
services=service).GetRamCacheConsolidate, ['GET']),
('/reap', reap.Reap(services=service).GetReap, ['GET']),
(
'/loadApiClientConfigs', client_config_svc.GetLoadApiClientConfigs,
['GET']),
(
'/trimVisitedPages',
trimvisitedpages.TrimVisitedPages(
services=service).GetTrimVisitedPages, ['GET']),
]
self._AppendUrlToRoutes(_CRON_URL, '/_cron')
# pylint: disable=unused-argument
def _RegisterBackendUrl(self, service):
_BACKEND_URL = [
(
'/search',
backendsearch.BackendSearch(services=service).GetBackendSearch,
['GET']),
(
'/nonviewable',
backendnonviewable.BackendNonviewable(
services=service).GetBackendNonviewable, ['GET']),
]
self._AppendUrlToRoutes(_BACKEND_URL, '/_backend')
# pylint: disable=unused-argument
def _RegisterMONSetUrl(self, service):
_MON_URL = [
(
'/clientmon.do',
clientmon.ClientMonitor(services=service).PostClientMonitor,
['POST']),
(
'/jstsmon.do',
ts_mon_js.MonorailTSMonJSHandler(
services=service).PostMonorailTSMonJSHandler,
['POST'],
)
]
self._AppendUrlToRoutes(_MON_URL, '/_')
def _RegisterAHUrl(self, service):
_AH_URL = [
('/warmup', warmup.Warmup, ['GET']), ('/start', warmup.Start, ['GET']),
('/stop', warmup.Stop, ['GET']),
(
'/bounce',
inboundemail.BouncedEmail(services=service).postBouncedEmail,
['POST']),
(
'/mail/<string:project_addr>',
inboundemail.InboundEmail(services=service).HandleInboundEmail,
['GET', 'POST'])
]
self._AppendUrlToRoutes(_AH_URL, '/_ah')
def _RegisterPrpcUrl(self, service):
prpc_server = prpc.FlaskServer(
allowed_origins=client_config_svc.GetAllowedOriginsSet())
api_routes_v0.RegisterApiHandlers(prpc_server, service)
api_routes_v3.RegisterApiHandlers(prpc_server, service)
routes = prpc_server.get_routes()
self._AppendUrlToRoutes(routes, '')
def _RegisterWebComponentsUrl(self, service):
self.routes.append(
[
'/',
webcomponentspage.ProjectListPage(
services=service).GetProjectListPage, ['GET']
])
self.routes.append(
[
'/hotlists/<path:subpath>',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsHotlist, ['GET']
])
self.routes.append(
[
'/users/<path:subpath>',
webcomponentspage.WebComponentsPage(
services=service).GetWebComponentsUser, ['GET']
])
def RegisterEndpointsUrls(app):
api_classes = [api_svc_v1.MonorailApi, api_svc_v1.ClientConfigApi]
routes = endpoints_flask.api_routes(api_classes, '/_ah/api')
for rule, endpoint, view_func, methods in routes:
app.add_url_rule(
rule, endpoint=endpoint, view_func=view_func, methods=methods)
app.view_functions['cors_handler'] = endpoints_flask.cors_handler
def RegisterTeardown(app):
app.teardown_request(teardown.Teardown)