Class: Gitolite::Dtg::GitoliteAdmin
- Inherits:
-
Object
- Object
- Gitolite::Dtg::GitoliteAdmin
- Defined in:
- lib/gitolite-dtg/gitolite_admin.rb
Constant Summary collapse
- CONF =
"gitolite.conf"
- CONFDIR =
"conf"
- BRANCH =
"master"
Instance Attribute Summary collapse
-
#config ⇒ Object
Returns the value of attribute config.
-
#gl_admin ⇒ Object
Returns the value of attribute gl_admin.
Class Method Summary collapse
-
.is_gitolite_admin_repo?(dir) ⇒ Boolean
Checks to see if the given path is a gitolite-admin repository A valid repository contains a conf folder, keydir folder, and a configuration file within the conf folder.
Instance Method Summary collapse
-
#authorize(repo_name, username, resource_path, wanted_access) ⇒ Object
repo_name - the repository name username - the authenticated user name resource_path - the path relative to the repository root that the user is requesting access to wanted_access - the type of access the user is requesting.
-
#initialize(path, options = {}) ⇒ GitoliteAdmin
constructor
Intialize with the path to the gitolite-admin repository.
-
#reload! ⇒ Object
This method will destroy the in-memory data structures and reload everything from the file system.
Constructor Details
#initialize(path, options = {}) ⇒ GitoliteAdmin
Intialize with the path to the gitolite-admin repository
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 14 def initialize(path, = {}) @path = path @gl_admin = Grit::Repo.new(path) @conf = [:conf] || CONF @confdir = [:confdir] || CONFDIR @branch = [:branch] || BRANCH # Load the configuration load_data end |
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
6 7 8 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 6 def config @config end |
#gl_admin ⇒ Object
Returns the value of attribute gl_admin.
6 7 8 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 6 def gl_admin @gl_admin end |
Class Method Details
.is_gitolite_admin_repo?(dir) ⇒ Boolean
Checks to see if the given path is a gitolite-admin repository A valid repository contains a conf folder, keydir folder, and a configuration file within the conf folder
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 35 def self.is_gitolite_admin_repo?(dir) # First check if it is a git repository begin repo = Grit::Repo.new(dir) rescue Grit::InvalidGitRepositoryError return false end # If we got here it is a valid git repo, # now check directory structure cbl = repo.tree / 'conf/gitolite.conf' if cbl != nil return true else return false end end |
Instance Method Details
#authorize(repo_name, username, resource_path, wanted_access) ⇒ Object
repo_name - the repository name username - the authenticated user name resource_path - the path relative to the repository root that
the user is requesting access to
wanted_access - the type of access the user is requesting. can
be 'R' or 'W'
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 59 def (repo_name, username, resource_path, wanted_access) if @config == nil return false end repo = @config.repos[repo_name] if repo != nil repo..each do |perm_hash| perm_hash.each do |perm, list| #process a permission line list.each do |refex, users| ul = [] users.each do |user| if user[0,1]=='@' gname = user.gsub('@', '') if ((@config.special_groups.include? gname) == false) grp = @config.flat_groups[gname] ul.concat(grp) else ul.push(user) end else ul.push(user) end end ul.uniq! user_matches = false if ((ul.include? "@all") || ((ul.include? "@raven") && (username != nil)) || (ul.include? username)) user_matches = true end if user_matches == false next end refex_applies = false; if refex == '' refex_applies = true; else dirs = [] dirs.push(refex) dirs.push(resource_path) common_prefix = dirs.abbrev.keys.min_by {|key| key.length}.chop common_directory = common_prefix.sub(%r{/[^/]*$}, '') if common_directory != '' refex_applies = true end end if !refex_applies next # if rule refex does not refer to the resource the user requested, go to the next rule end access_matches = false if (perm.include? wanted_access) access_matches = true end # authorization cases. at this point, user_matches==true and refex_applies==true: if (perm == "-") return false elsif (user_matches && access_matches) #print "Access allowed by matching rule: " + perm + " " #print list #print "\n" return true else next end end end end end return false end |
#reload! ⇒ Object
This method will destroy the in-memory data structures and reload everything from the file system
28 29 30 |
# File 'lib/gitolite-dtg/gitolite_admin.rb', line 28 def reload! load_data end |