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

Reply via email to