diff --git a/roles/people/files/people.conf b/roles/people/files/people.conf
index 4a4665d4fb..eebf3e897e 100644
--- a/roles/people/files/people.conf
+++ b/roles/people/files/people.conf
@@ -58,7 +58,12 @@ NameVirtualHost *:80
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
- IndexOptions NameWidth=* FancyIndexing
+ #IndexOptions NameWidth=* FancyIndexing
+ Require all granted
+ Require method GET POST OPTIONS
+
+
+
Require all granted
Require method GET POST OPTIONS
@@ -145,157 +150,37 @@ NameVirtualHost *:80
RewriteRule ^repos\.fedorapeople\.org/(.*) /project/repos/$1 [L]
RewriteRule ^([a-z0-9-]+)\.fedorapeople\.org/(.*) /home/fedora/$1/public_html/$2 [L]
- # Use cgit and redirect (some) old gitweb-caching things
- RewriteRule ^/cgit-data/(.*)$ /cgit-data/$1 [L,PT]
- RewriteRule ^/cgit/(.*)$ /cgit/$1 [L,PT]
+ # Begin http git clone
+ # First, deny write access
+ RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
+ RewriteCond %{REQUEST_URI} /git-receive-pack$
+ RewriteRule ^/git/ - [E=AUTHREQUIRED:yes]
+
+
+ Require not env AUTHREQUIRED
+ Require all granted
+
+ Options -Indexes +ExecCGI
+
- # blob
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/blob/(.+)/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=blob;h=(.+);hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%5?id=%3;id2=%4 [R,L,NE]
+ # Next up, determine which user owns this repo
+ SetEnvIf Request_URI ^/git/([a-zA-Z0-9]*)/.* GIT_PROJECT_ROOT=/home/fedora/$1/public_git
+ Header set X-GitProject "%{GIT_PROJECT_ROOT}e"
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/blob/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=blob;hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%4?id=%3 [R,L,NE]
+ # Let's serve objects and packs directly from apache, very performant!
+ AliasMatch ^/git/([a-zA-Z0-9]*)/([a-zA-Z0-9]*)\.git(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /home/fedora/$1/public_git/$2.git/$3
+ AliasMatch ^/git/([a-zA-Z0-9]*)/([a-zA-Z0-9]*)\.git(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /home/fedora/$1/public_git/$2.git/$3
- RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+);h=(.+);hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%3?id=%4;id2=%5 [R,L,NE]
-
- RewriteCond %{query_string} p=(.+)(\.git);a=blob;f=(.+);h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%3?id=%4 [R,L,NE]
-
- # tree
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tree/(.+)/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tree;h=(.+);hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%5?id=%4?h=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tree/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tree;hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/%4?id=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tree/(.+)/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tree;h=(.+);hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/?id=%4 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tree/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tree;hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/?id=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tree [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tree
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tree/? [R,L,NE]
-
- # commitdiff
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/commitdiff/(.+)/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=blobdiff;h=(.+);hp=(.+);hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/diff/%6?id2=%4;id=%3;id3=%5 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/commitdiff/(.+)/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=commitdiff;h=(.+);hp=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/diff/?id=%4;id2=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/commitdiff/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=commitdiff;h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/diff/?id=%3 [R,L,NE]
-
- # commit
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/commit/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=commit;h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/commit/?id=%3 [R,L,NE]
-
- # summary
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/summary [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=summary
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/? [R,L,NE]
-
- # shortlog
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/shortlog/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=shortlog;h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/?id=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/shortlog [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=shortlog
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/? [R,L,NE]
-
- # log
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/log/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=log;h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/?id=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/log [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=log
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log? [R,L,NE]
-
- # history
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+)/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=history;h=(.+);hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/%5?id=%4 [R,L,NE]
-
- RewriteCond %{query_string} p=(.+)(\.git);a=history;f=(.+);h=(.+);hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/%3?id=%4;id2=%5 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+):/(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/%4?id=%3 [R,L,NE]
-
- RewriteCond %{query_string} p=(.+)(\.git);a=history;f=(.+);h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/%3?id=%4 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+)/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=history;h=(.+);hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/?id=%4 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=history;hb=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/%4?id=%3 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/history/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=history;hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/log/?id=%3 [R,L,NE]
-
- # tag
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/tag/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=tag;h=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/tag/?id=%3 [R,L,NE]
-
- # blob_plain
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/blob_plain/(.+):/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;h=(.+);f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/plain/%4?id=%3 [R,L,NE]
-
- RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;f=(.+);hb=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/plain/%3?id2=%4 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/blob_plain/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=blob_plain;f=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/plain/%3 [R,L,NE]
-
- # rss|atom
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/(rss|atom)/refs/heads/(.+) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=(rss|atom);h=refsheads/(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/atom?h=%4 [R,L,NE]
-
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/(rss|atom) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=(rss|atom)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/atom? [R,L,NE]
-
- # snapshot
- RewriteCond %{REQUEST_URI} /(.+)(\.git)/snapshot/(.+)(\.tar\.gz|\.tar\.bz2) [OR]
- RewriteCond %{query_string} p=(.+)(\.git);a=snapshot;h=(.+);sf=(.+)
- RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/snapshot/%3.tar.gz [R,L,NE]
-
- # Fail safes incase nothing above matches, try at least to put the person in the project
- #RewriteCond %{REQUEST_URI} /([^/]+)\.git.* [OR]
- #RewriteCond %{query_string} p=(.+)\.git.*
- #RewriteRule ^/.*$ https://fedorapeople.org/cgit/%1.git/? [R,L,NE]
-
- # Or else in the root of cgit
- RewriteRule ^/git/(.+)\.git$ /cgit/$1.git [L,PT]
- RewriteRule ^/git/(.*)/$ /cgit/$1.git [L,PT]
- RewriteRule ^/git/([^/]*)$ /cgit/$1.git [L,PT]
- RewriteRule ^/gitweb /cgit/ [L,PT]
-
- # for cgit clone repos
- RewriteRule ^/gitrepos/(.*)/public_git/(.*)$ /~$1/git/$2 [L,PT]
+ # And now for the magic, let's run the git cgi script
+ ScriptAliasMatch \
+ "(?x)^/git/([a-zA-Z0-9]*)/(.*/(HEAD | \
+ info/refs | \
+ objects/(info/[^/]+ | \
+ [0-9a-f]{2}/[0-9a-f]{38} | \
+ pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
+ git-(upload|receive)-pack))$" \
+ /usr/libexec/git-core/git-http-backend/$2
+ # End http git clone
Options IncludesNoExec
@@ -308,6 +193,18 @@ NameVirtualHost *:80
IndexOptions +XHTML +SuppressRules +SuppressHTMLPreamble
ServerSignature Off
AddOutputFilter INCLUDES .html
+ #SetEnvIf Request_URI "(?x)^/git/([^/]*)(.*)$" \
+ # GIT_PROJECT_ROOT=/home/fedora/$1/public_git
+
+ # this takes care of user directories
+ #ScriptAliasMatch \
+ # "(?x)^/git/([^/]*)(/.*/(HEAD | \
+ # info/refs | \
+ # objects/(info/[^/]+ | \
+ # [0-9a-f]{2}/[0-9a-f]{38} | \
+ # pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
+ # git-(upload|receive)-pack))$" \
+ # /usr/libexec/git-core/git-http-backend/$2
LoadModule deflate_module modules/mod_deflate.so