Dzahn has submitted this change and it was merged. Change subject: Rewrite rules for git.wikimedia.org ......................................................................
Rewrite rules for git.wikimedia.org Redirect gitblit urls to phabricator (diffusion) equivalents. Bug: T137224 Change-Id: I73873258a5f3acc21d0db4689dee2f18ca38aff6 --- M modules/phabricator/manifests/init.pp A modules/phabricator/templates/gitblit_vhost.conf.erb M modules/phabricator/templates/phabricator-default.conf.erb M modules/role/manifests/phabricator/main.pp 4 files changed, 127 insertions(+), 10 deletions(-) Approvals: jenkins-bot: Verified Dzahn: Looks good to me, approved diff --git a/modules/phabricator/manifests/init.pp b/modules/phabricator/manifests/init.pp index 6eafb2d..146cbbe 100644 --- a/modules/phabricator/manifests/init.pp +++ b/modules/phabricator/manifests/init.pp @@ -27,8 +27,8 @@ # Requires: mysql_admin_user # # -# [*serveralias*] -# Alternative domain on which to respond too +# [*serveraliases*] +# Alternative domains on which to respond too # # [*deploy_user*] # The username that is used for scap deployments @@ -57,7 +57,7 @@ $mysql_admin_user = '', $mysql_admin_pass = '', $serveradmin = '', - $serveralias = '', + $serveraliases = [], $deploy_user = 'phab-deploy', $deploy_target = 'phabricator/deployment', ) { @@ -117,8 +117,24 @@ require => $base_requirements, } + # git.wikimedia.org hosts rewrite rules to redirect old gitblit urls to + # equivilent diffusion urls. + + $gitblit_servername = $phab_settings['gitblit.hostname'] + + file { '/srv/git.wikimedia.org': + ensure => 'directory', + owner => 'root', + group => 'root', + } + + apache::site { 'git.wikimedia.org': + content => template('phabricator/gitblit_vhost.conf.erb'), + require => File['/srv/git.wikimedia.org'], + } + # Robots.txt disallowing to crawl the alias domain - if $serveralias { + if $serveraliases { file {"${phabdir}/robots.txt": ensure => present, owner => 'root', diff --git a/modules/phabricator/templates/gitblit_vhost.conf.erb b/modules/phabricator/templates/gitblit_vhost.conf.erb new file mode 100644 index 0000000..c317a1f --- /dev/null +++ b/modules/phabricator/templates/gitblit_vhost.conf.erb @@ -0,0 +1,95 @@ +<VirtualHost *:80> + ServerName <%= @gitblit_servername %> +<% if !@serveradmin.empty? -%> + ServerAdmin <%= @serveradmin %> +<%- end %> + DocumentRoot /srv/git.wikimedia.org + + ##### https://git.wikimedia.org -> https://phabricator.wikimedia.org/diffusion redirects + ##### @author [[meta:User:Danny B.]] + ##### Maniphest Task: https://phabricator.wikimedia.org/T137224 + + ### Directives + + # logging + LogLevel warn + ErrorLog /var/log/apache2/git.wikimedia.org_error.log + CustomLog /var/log/apache2/git.wikimedia.org_access.log wmf + ServerSignature Off + + # don't decode "%2F" in URL to "/" + AllowEncodedSlashes NoDecode + + # allow URL rewriting + RewriteEngine On + + ### Static links + + # home page + RewriteRule ^/$ https://phabricator.wikimedia.org/diffusion [L,R=301] + + # searches & lists + RewriteRule ^/activity/?$ https://phabricator.wikimedia.org/diffusion/query/active/ [L,R=301] + RewriteRule ^/lucene/?$ https://phabricator.wikimedia.org/diffusion/query/advanced/ [L,R=301] + RewriteRule ^/(projects|repositories)/?$ https://phabricator.wikimedia.org/diffusion/query/all/ [L,R=301] + + + ### Preformat + + # ?r=<repo/name> -> /<repo/name> + RewriteCond %{QUERY_STRING} ^(.*&)?r=([0-9A-Za-z/_\.-]+).git(&.*)?$ + RewriteRule ^/(blame|blob|commit|commitdiff|docs|history|log|patch|summary|tree)/$ /$1/%2.git [NE] + + # remove "refs%2Fheads%2F" and "refs%2Fremotes%2Forigin%2F" + RewriteRule ^(.*)refs\%2[Ff](heads|remotes\%2[Ff]origin)\%2[Ff](.*)$ $1$3 + + # <repo%2Fname> -> <repo/name> + RewriteRule ^/(blame|blob|commit|commitdiff|docs|history|log|patch|summary|tree)/([0-9A-Za-z/_\.-]+)\%2[Ff](.*)\.git(.*)$ /$1/$2/$3.git$4 [N] + + # <tag%2Fname> -> <tag%25252Fname> + RewriteRule ^/(blame|blob|commit|commitdiff|docs|history|log|patch|summary|tree)/([0-9A-Za-z/_\.-]+)\.git/([0-9A-Za-z_\.-]+)\%2[Ff]([^/]+)(.*)$ /$1/$2.git/$3\%25252F$4$5 [N] + + # <path%2Fto%2Ffile> -> <path/to/file> + RewriteRule ^/(blame|blob|commit|commitdiff|docs|history|log|patch|summary|tree)/([0-9A-Za-z/_\.-]+)\.git/([^/]+)/([0-9A-Za-z/_\.-]+)\%2[Ff]([^/]*)$ /$1/$2.git/$3/$4/$5 [N] + + + ### /commit/ + ### /commitdiff/ + ### /patch/ + + # https://git.wikimedia.org/<commit(diff)?|patch>/<repo%2Fname>.git/<commithash> + # -> https://git.wikimedia.org/<commit(diff)?|patch>/<repo/name>.git/<commithash> + # ---> https://phabricator.wikimedia.org/r/<(commit|patch)>/<repo/name>;<commithash> + RewriteRule ^/(commit|patch)(diff)?/([0-9A-Za-z/_\.-]+)\.git/([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])$ https://phabricator.wikimedia.org/r/$1/$3;$4 [NE,L,R=301] + + + ### /blame/ + ### /blob/ + ### /docs/ + ### /history/ + ### /log/ + ### /summary/ + ### /tree/ + + # translate Gitblit actions to Diffusion actions + RewriteRule ^/(blame|blob|docs|tree)/(.*)$ /browse/$2 [NE] + RewriteRule ^/log/(.*)$ /history/$1 [NE] + RewriteRule ^/summary/(.*)$ /$1 [NE] + + # https://git.wikimedia.org/<(blame|blob|history|log|tree)>/<repo%2Fname>.git/<commithash><(/<path%2Fto%2Ffile>)?> + # -> https://git.wikimedia.org/<(blame|blob|history|log|tree)>/<repo/name>.git/<commithash><(/<path/to/file>)?> + # ---> https://phabricator.wikimedia.org/r/p/<repo/name>;<(browse|history)>/master/<(<path/to/file>)?>;<commithash> + RewriteRule ^/(browse|history)/([0-9A-Za-z/_\.-]+)\.git/([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])(/([0-9A-Za-z/_\.-]+))?$ https://phabricator.wikimedia.org/r/p/$2;$1/master/$5;$3 [NE,L,R=301] + + # https://git.wikimedia.org/<(blame|blob|history|log|summary|tree)>/<repo%2Fname>.git<(/<tag%2Fname><(/<path%2Fto%2Ffile>)?>)?> + # -> https://git.wikimedia.org/<(blame|blob|history|log|summary|tree)/<repo/name>.git<(/<tag%25252Fname><(/<path/to/file>)?>)?> + # ---> https://phabricator.wikimedia.org/r/p/<repo/name>;<(browse|history)?><(/<tag%25252Fname><(/<path/to/file>)?>)?> + RewriteRule ^/((browse|history)(/))?([0-9A-Za-z/_\.-]+)\.git((/[^/]+)(/([0-9A-Za-z/_\.-]+))?)?$ https://phabricator.wikimedia.org/r/p/$4;$2$6$3$8 [NE,L,R=301] + + + ### Unmatched above + + # redirect all remaining requests to the Diffusion main page + RewriteRule ^.*$ https://phabricator.wikimedia.org/diffusion [L,R=301] + +</VirtualHost> diff --git a/modules/phabricator/templates/phabricator-default.conf.erb b/modules/phabricator/templates/phabricator-default.conf.erb index be7c275..7ba7a01 100644 --- a/modules/phabricator/templates/phabricator-default.conf.erb +++ b/modules/phabricator/templates/phabricator-default.conf.erb @@ -3,9 +3,9 @@ <VirtualHost *:80> ServerName <%= @phab_servername.gsub('http://', '').gsub('https://', '') %> -<% if !@serveralias.empty? -%> - ServerAlias <%= @serveralias %> -<%- end %> +<%- @serveraliases.each do |name| -%> + ServerAlias <%= name %> +<% end -%> <% if !@serveradmin.empty? -%> ServerAdmin <%= @serveradmin %> <%- end %> @@ -18,11 +18,14 @@ RewriteEngine on -<% if !@serveralias.empty? -%> +<% if !@serveraliases.empty? -%> +<%- @serveraliases.each do |name| -%> # Read robots.txt from disk for the alternative domain - RewriteCond "%{HTTP_HOST}" "<%= @serveralias.gsub('.', '\.') %>" + RewriteCond "%{HTTP_HOST}" "<%= name.gsub('.', '\.') %>" RewriteRule ^/robots.txt$ <%= @phabdir %>/robots.txt [L] +<%- end %> + <Files "robots.txt"> Require all granted </Files> diff --git a/modules/role/manifests/phabricator/main.pp b/modules/role/manifests/phabricator/main.pp index 1bccc2d..b24765f 100644 --- a/modules/role/manifests/phabricator/main.pp +++ b/modules/role/manifests/phabricator/main.pp @@ -30,7 +30,9 @@ class { '::phabricator': deploy_target => $deploy_target, phabdir => $phab_root_dir, - serveralias => $altdom, + serveraliases => [ $altdom, + 'bugzilla.wikimedia.org', + 'bugs.wikimedia.org' ], trusted_proxies => $cache_misc_nodes[$::site], mysql_admin_user => $role::phabricator::config::mysql_adminuser, mysql_admin_pass => $role::phabricator::config::mysql_adminpass, @@ -54,6 +56,7 @@ 'events.listeners' => [], 'diffusion.allow-http-auth' => true, 'diffusion.ssh-host' => 'git-ssh.wikimedia.org', + 'gitblit.hostname' => 'git.wikimedia.org', }, } # lint:endignore -- To view, visit https://gerrit.wikimedia.org/r/296138 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I73873258a5f3acc21d0db4689dee2f18ca38aff6 Gerrit-PatchSet: 6 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Paladox <thomasmulhall...@yahoo.com> Gerrit-Reviewer: 20after4 <mmod...@wikimedia.org> Gerrit-Reviewer: Danny B. <dann...@email.cz> Gerrit-Reviewer: Dzahn <dz...@wikimedia.org> Gerrit-Reviewer: Greg Grossmeier <g...@wikimedia.org> Gerrit-Reviewer: JanZerebecki <jan.wikime...@zerebecki.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits