# HG changeset patch # User Marcin Kuzminski # Date 1277741396 -7200 # Node ID 8f7b8e965fe4275ccacf15f1915f093825686a09 # Parent d303aacb3349fff79fac8f03e34c31774ea8e806 fixed 404s added extra validator for magic repo_name path in routes diff -r d303aacb3349 -r 8f7b8e965fe4 pylons_app/config/environment.py --- a/pylons_app/config/environment.py Mon Jun 28 13:54:47 2010 +0200 +++ b/pylons_app/config/environment.py Mon Jun 28 18:09:56 2010 +0200 @@ -63,6 +63,7 @@ init_model(sa_engine_db1) repo2db_mapper(_get_repos_cached_initial(config['pylons.app_globals'])) set_available_permissions(config) + config['base_path'] = config['pylons.app_globals'].base_path # CONFIGURATION OPTIONS HERE (note: all config options will override # any Pylons config options) diff -r d303aacb3349 -r 8f7b8e965fe4 pylons_app/config/routing.py --- a/pylons_app/config/routing.py Mon Jun 28 13:54:47 2010 +0200 +++ b/pylons_app/config/routing.py Mon Jun 28 18:09:56 2010 +0200 @@ -5,6 +5,7 @@ refer to the routes manual at http://routes.groovie.org/docs/ """ from routes import Mapper +from pylons_app.lib.utils import check_repo as cr def make_map(config): """Create, configure and return the routes Mapper""" @@ -21,7 +22,15 @@ # CUSTOM ROUTES HERE map.connect('hg_home', '/', controller='hg', action='index') - + def check_repo(environ, match_dict): + """ + check for valid repository for proper 404 handling + @param environ: + @param match_dict: + """ + repo_name = match_dict.get('repo_name') + return not cr(repo_name, config['base_path']) + #REST routes with map.submapper(path_prefix='/_admin', controller='repos') as m: m.connect("repos", "/repos", @@ -36,20 +45,27 @@ m.connect("formatted_new_repo", "/repos/new.{format}", action="new", conditions=dict(method=["GET"])) m.connect("/repos/{repo_name:.*}", - action="update", conditions=dict(method=["PUT"])) + action="update", conditions=dict(method=["PUT"], + function=check_repo)) m.connect("/repos/{repo_name:.*}", - action="delete", conditions=dict(method=["DELETE"])) + action="delete", conditions=dict(method=["DELETE"], + function=check_repo)) m.connect("edit_repo", "/repos/{repo_name:.*}/edit", - action="edit", conditions=dict(method=["GET"])) + action="edit", conditions=dict(method=["GET"], + function=check_repo)) m.connect("formatted_edit_repo", "/repos/{repo_name:.*}.{format}/edit", - action="edit", conditions=dict(method=["GET"])) + action="edit", conditions=dict(method=["GET"], + function=check_repo)) m.connect("repo", "/repos/{repo_name:.*}", - action="show", conditions=dict(method=["GET"])) + action="show", conditions=dict(method=["GET"], + function=check_repo)) m.connect("formatted_repo", "/repos/{repo_name:.*}.{format}", - action="show", conditions=dict(method=["GET"])) + action="show", conditions=dict(method=["GET"], + function=check_repo)) #ajax delete repo perm user m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}", - action="delete_perm_user", conditions=dict(method=["DELETE"])) + action="delete_perm_user", conditions=dict(method=["DELETE"], + function=check_repo)) map.resource('user', 'users', path_prefix='/_admin') map.resource('permission', 'permissions', path_prefix='/_admin') @@ -62,33 +78,41 @@ #FEEDS map.connect('rss_feed_home', '/{repo_name:.*}/feed/rss', - controller='feed', action='rss') + controller='feed', action='rss', + conditions=dict(function=check_repo)) map.connect('atom_feed_home', '/{repo_name:.*}/feed/atom', - controller='feed', action='atom') + controller='feed', action='atom', + conditions=dict(function=check_repo)) map.connect('login_home', '/login', controller='login') map.connect('logout_home', '/logout', controller='login', action='logout') map.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}', - controller='changeset', revision='tip') + controller='changeset', revision='tip', + conditions=dict(function=check_repo)) map.connect('summary_home', '/{repo_name:.*}/summary', - controller='summary') + controller='summary', conditions=dict(function=check_repo)) map.connect('shortlog_home', '/{repo_name:.*}/shortlog', - controller='shortlog') + controller='shortlog', conditions=dict(function=check_repo)) map.connect('branches_home', '/{repo_name:.*}/branches', - controller='branches') + controller='branches', conditions=dict(function=check_repo)) map.connect('tags_home', '/{repo_name:.*}/tags', - controller='tags') + controller='tags', conditions=dict(function=check_repo)) map.connect('changelog_home', '/{repo_name:.*}/changelog', - controller='changelog') + controller='changelog', conditions=dict(function=check_repo)) map.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}', - controller='files', revision='tip', f_path='') + controller='files', revision='tip', f_path='', + conditions=dict(function=check_repo)) map.connect('files_diff_home', '/{repo_name:.*}/diff/{f_path:.*}', - controller='files', action='diff', revision='tip', f_path='') + controller='files', action='diff', revision='tip', f_path='', + conditions=dict(function=check_repo)) map.connect('files_raw_home', '/{repo_name:.*}/rawfile/{revision}/{f_path:.*}', - controller='files', action='rawfile', revision='tip', f_path='') + controller='files', action='rawfile', revision='tip', f_path='', + conditions=dict(function=check_repo)) map.connect('files_annotate_home', '/{repo_name:.*}/annotate/{revision}/{f_path:.*}', - controller='files', action='annotate', revision='tip', f_path='') + controller='files', action='annotate', revision='tip', f_path='', + conditions=dict(function=check_repo)) map.connect('files_archive_home', '/{repo_name:.*}/archive/{revision}/{fileformat}', - controller='files', action='archivefile', revision='tip') + controller='files', action='archivefile', revision='tip', + conditions=dict(function=check_repo)) return map