gitauth 0.0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +661 -0
- data/README.rdoc +141 -0
- data/USAGE +70 -0
- data/bin/gitauth +261 -0
- data/bin/gitauth-shell +30 -0
- data/config.ru +22 -0
- data/lib/gitauth.rb +100 -0
- data/lib/gitauth/apache_authentication.rb +64 -0
- data/lib/gitauth/auth_setup_middleware.rb +44 -0
- data/lib/gitauth/client.rb +95 -0
- data/lib/gitauth/command.rb +101 -0
- data/lib/gitauth/group.rb +87 -0
- data/lib/gitauth/message.rb +69 -0
- data/lib/gitauth/repo.rb +155 -0
- data/lib/gitauth/saveable_class.rb +54 -0
- data/lib/gitauth/user.rb +135 -0
- data/lib/gitauth/web_app.rb +310 -0
- data/public/gitauth.css +316 -0
- data/public/gitauth.js +17 -0
- data/public/jquery.js +19 -0
- data/resources/messages.yml +9 -0
- data/views/auth_setup.erb +27 -0
- data/views/clone_repo.erb +24 -0
- data/views/group.erb +24 -0
- data/views/index.erb +88 -0
- data/views/layout.erb +27 -0
- data/views/repo.erb +57 -0
- data/views/user.erb +51 -0
- metadata +152 -0
data/README.rdoc
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
== GitAuth - SSH-based authentication for Shared Git Repositories.
|
2
|
+
|
3
|
+
If you've heard of Gitosis before, GitAuth is like Gitosis but A) in Ruby, B) slightly simpler to get going and C) doesn't use a git repository to manage users.
|
4
|
+
|
5
|
+
At the moment configuration / adding users is done via a single command - +gitauth+. For usage, see below.
|
6
|
+
|
7
|
+
=== License
|
8
|
+
|
9
|
+
GitAuth is licensed under AGPL, with parts of the code being derived
|
10
|
+
from Gitorius - http://gitorious.org
|
11
|
+
|
12
|
+
=== Installing GitAuth
|
13
|
+
|
14
|
+
Getting started is relatively simple. First of, you'll need to log onto the remote server / your git host. Next, you'll need to install the gem:
|
15
|
+
|
16
|
+
sudo gem install brownbeagle-gitauth --source http://gems.github.com/
|
17
|
+
|
18
|
+
Or, if you want to avoid the gems approach, you can use simply clone the repository
|
19
|
+
as follows and use the git submodule setup in order to vendor rack, sinatra and perennial:
|
20
|
+
|
21
|
+
git clone git://github.com/brownbeagle/gitauth.git
|
22
|
+
cd gitauth
|
23
|
+
git submodule init
|
24
|
+
git submodule update
|
25
|
+
|
26
|
+
With the gitauth binary being in the bin folder.
|
27
|
+
|
28
|
+
Once that's done, the +gitauth+ and +gitauth-shell+ commands should be in your path.
|
29
|
+
Next, you'll want to (in most cases anyway) use a specific +git+ user to host repositories.
|
30
|
+
|
31
|
+
Using the example of ubuntu, we'll add a git user under which all actions will now take place (note, this is essentially the same as gitosis):
|
32
|
+
|
33
|
+
sudo adduser --disabled-password --shell /bin/bash --group --home /home/git --system --gecos 'gitauth user for version control' git
|
34
|
+
|
35
|
+
Now, whenever you run the +gitauth+ executable, you'll do so as the user you just created
|
36
|
+
above. For example purposes, I suggest using the following in order to run all commands
|
37
|
+
as the 'git' user:
|
38
|
+
|
39
|
+
sudo -H -u git -i
|
40
|
+
|
41
|
+
And finally, to create a settings file and initialize .ssh and authorized_keys, perform the
|
42
|
+
following:
|
43
|
+
|
44
|
+
gitauth install
|
45
|
+
|
46
|
+
Note that when it asks you for the gitauth shell path, the default will lock
|
47
|
+
it to the current gitauth version SO if you want it to stay up to date between gem versions
|
48
|
+
point it to the path for always-current executable (e.g. on Ubuntu 9.04 w/ apt-get ruby + gems,
|
49
|
+
+/var/lib/gems/1.8/bin/gitauth-shell+)
|
50
|
+
|
51
|
+
Also, Note that if use the --admin option with path to a public key to the end of the install command,
|
52
|
+
it will initialize a new +admin+ user who can also login via SSH. e.g.
|
53
|
+
|
54
|
+
gitauth install --admin id_rsa.pub
|
55
|
+
|
56
|
+
Would initialize an admin user with the given public key.
|
57
|
+
|
58
|
+
Note that from now on, all gitauth keys should be run either logged in as
|
59
|
+
git (via the admin user and ssh) or by being prefixed with asgit or "sudo -H -u git"
|
60
|
+
|
61
|
+
=== Web Interface
|
62
|
+
|
63
|
+
To start the web interface, just run:
|
64
|
+
|
65
|
+
gitauth web-app
|
66
|
+
|
67
|
+
The first time you boot the web app, you will be prompted
|
68
|
+
to enter a username and a password. Please do so
|
69
|
+
and then surf to http://your-server-ip:8998/
|
70
|
+
|
71
|
+
For people running passenger, you can simply point it at
|
72
|
+
the public subdirectory and it will act as any normal passenger
|
73
|
+
web app. It's worth noting that in this approach you need
|
74
|
+
to run gitauth web-app at least once to setup a username and
|
75
|
+
password.
|
76
|
+
|
77
|
+
=== Adding Users
|
78
|
+
|
79
|
+
Whenever you want to add a user, it's as simple as:
|
80
|
+
|
81
|
+
gitauth add-user user-name path-to-public-key
|
82
|
+
|
83
|
+
Note that if the --admin option is specified, the user will
|
84
|
+
be able to log in to the shell via SSH and will also be able
|
85
|
+
to access any repository.
|
86
|
+
|
87
|
+
=== Adding Repositories
|
88
|
+
|
89
|
+
Adding a repository is a two step process. First, you create it:
|
90
|
+
|
91
|
+
gitauth add-repo repo-name
|
92
|
+
|
93
|
+
If you wish to initialize the repository with a blank commit (so
|
94
|
+
git clone works straight away), simply pass --make-empty / -m as
|
95
|
+
an option. e.g.:
|
96
|
+
|
97
|
+
gitauth add-repo repo-name --make-empty
|
98
|
+
|
99
|
+
Then, for every user who needs access, you do:
|
100
|
+
|
101
|
+
gitauth permissions repo-name user-name --type=permission-type
|
102
|
+
|
103
|
+
Where permission type is read, write or all. If permission
|
104
|
+
type isn't specified, it will default to all. If you wish
|
105
|
+
to remove a user from a repository, you can simply pass
|
106
|
+
use the type as none.
|
107
|
+
|
108
|
+
=== Accessing repos:
|
109
|
+
|
110
|
+
Finally, once you've added users / repos, using them is as simple
|
111
|
+
as doing the following on each users computer:
|
112
|
+
|
113
|
+
git clone git@your-remote-host:repo-name
|
114
|
+
|
115
|
+
Or
|
116
|
+
|
117
|
+
git clone git@your-remote-host:repo-name.git
|
118
|
+
|
119
|
+
Either form working just as well.
|
120
|
+
|
121
|
+
Note that for the first time you push, you will need
|
122
|
+
to use the full form (as below) unless you've used
|
123
|
+
the --make-empty / -m option when you created the repo.
|
124
|
+
|
125
|
+
git push origin master
|
126
|
+
|
127
|
+
As it starts as an empty repo.
|
128
|
+
|
129
|
+
Alternatively, if you get the error "fatal: no matching remote head" when you
|
130
|
+
clone and it doesn't create a local copy, you'll instead have to do the following
|
131
|
+
on your local PC (due to the way git handles remote repositories):
|
132
|
+
|
133
|
+
mkdir my-repo
|
134
|
+
cd my-repo
|
135
|
+
git init
|
136
|
+
touch README
|
137
|
+
git add .
|
138
|
+
git commit -m "Added blank readme"
|
139
|
+
git add remote origin git@your-server:my-repo.git
|
140
|
+
git push origin master
|
141
|
+
|
data/USAGE
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
GitAuth is a tool to provide authenticated git hosting from any unix like
|
2
|
+
box using ruby, git-shell and a whole lot of awesomeness.
|
3
|
+
|
4
|
+
Available commands include:
|
5
|
+
|
6
|
+
ls-users - Lists all users handled by GitAuth
|
7
|
+
|
8
|
+
ls-groups - Lists all groups handled by GitAuth
|
9
|
+
|
10
|
+
ls-repos - Lists all repositories handled by GitAuth
|
11
|
+
|
12
|
+
show-user - Shows information about a user with a given name
|
13
|
+
e.g: gitauth show-user darcy
|
14
|
+
|
15
|
+
show-group - Shows information about a group with a given name
|
16
|
+
e.g: gitauth show-group brownbeagle
|
17
|
+
or,: gitauth show-group @brownbeagle
|
18
|
+
|
19
|
+
show-repo - Shows information about a repository with a given name
|
20
|
+
e.g: gitauth show-repo project-a
|
21
|
+
|
22
|
+
add-user - adds a user with a specific name and ssh key
|
23
|
+
e.g. gitauth add-user darcy ~/id_rsa-one.pub
|
24
|
+
or,: gitauth add-user sutto ~/id_rsa-two.pub --admin
|
25
|
+
|
26
|
+
Would create two users, one an admin and one a normal user.
|
27
|
+
|
28
|
+
add-group - Adds a group with a specified name.
|
29
|
+
e.g: gitauth add-group brownbeagle
|
30
|
+
or,: gitauth add-group brownbeagle
|
31
|
+
|
32
|
+
From there on in, you can refer to the group as @brownbeagle
|
33
|
+
|
34
|
+
add-repo - Adds a repository with a specific name and an optional path
|
35
|
+
e.g: gitauth add-repo project-a
|
36
|
+
or,: gitauth add-repo project-b --make-empty
|
37
|
+
or,: gitauth add-repo project-c my-path-to-repo.git
|
38
|
+
or,: gitauth add-repo project-d my-path-to-other-repo --make-empty
|
39
|
+
|
40
|
+
--make-empty initializes it with a blank commit whilst
|
41
|
+
a second argument sets the path for the created repository.
|
42
|
+
The path is only ever used internally, the user refers to
|
43
|
+
it externally. e.g, project-c above would be accessible by:
|
44
|
+
user@your-server.com:project-c or user@your-server.com:project-c.git
|
45
|
+
|
46
|
+
rm-user - Removes a user with the given name
|
47
|
+
e.g: gitauth rm-user darcy
|
48
|
+
|
49
|
+
rm-group - Removes a specific group from GitAuth
|
50
|
+
e.g: gitauth rm-group brownbeagle
|
51
|
+
or,: gitauth rm-group @brownbeagle
|
52
|
+
|
53
|
+
rm-repo - Removes a repository from gitauth (destroys it on the filesystem as well)
|
54
|
+
e.g: gitauth rm-repo project-a
|
55
|
+
|
56
|
+
permissions - Set the permissions for a given user or group on a specific repository.
|
57
|
+
e.g: gitauth permissions project-a darcy
|
58
|
+
or,: gitauth permissions project-b darcy --type read
|
59
|
+
or,: gitauth permissions project-c darcy --type none
|
60
|
+
or,: gitauth permissions project-a @brownbeagle -t read
|
61
|
+
or,: gitauth permissions project-b @brownbeagle
|
62
|
+
|
63
|
+
The first argument being the repository name, the second a target -
|
64
|
+
either a user (e.g. darcy), or, if prefixed with an @-symbol, a group.
|
65
|
+
An optional --type argument specifies what permissions to use (all, read, write
|
66
|
+
or none - defaulting to all).
|
67
|
+
|
68
|
+
web-app - Starts up the web app, serving on port 8998
|
69
|
+
e.g: gitauth web-app
|
70
|
+
|
data/bin/gitauth
ADDED
@@ -0,0 +1,261 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "gitauth"))
|
3
|
+
|
4
|
+
GitAuth::Application.processing(ARGV) do |a|
|
5
|
+
a.banner = "GitAuth v#{GitAuth.version}"
|
6
|
+
|
7
|
+
a.generator!
|
8
|
+
|
9
|
+
a.option(:force, "force the creation of the settings file")
|
10
|
+
a.option(:admin, "pass the path to a ssh public key and it adds a default admin user")
|
11
|
+
a.add("install", "Sets up GitAuth for the current user") do |options|
|
12
|
+
|
13
|
+
setup_generator ".", :silent => true
|
14
|
+
|
15
|
+
# Check for a valid admin key
|
16
|
+
if options.has_key?(:admin) && (!options[:admin].is_a?(String) || !file?(options[:admin]))
|
17
|
+
puts "You provided the admin option but didn't provide it with a path to public key."
|
18
|
+
die! "Please re-run again with a path to a key, e.g. --admin=~/id_rsa.pub"
|
19
|
+
end
|
20
|
+
|
21
|
+
if !yes?("Are you logged in as the correct user?")
|
22
|
+
die!("Please log in as the correct user and re-run")
|
23
|
+
end
|
24
|
+
|
25
|
+
if !GitAuth.has_git?
|
26
|
+
die!("'git' was not found in your path - please install it / add it to your path before continuing.")
|
27
|
+
end
|
28
|
+
|
29
|
+
ssh_folder = "~/.ssh"
|
30
|
+
if !folder?(ssh_folder)
|
31
|
+
folders ssh_folder
|
32
|
+
chmod 0700, ssh_folder
|
33
|
+
end
|
34
|
+
|
35
|
+
authorized_keys = ssh_folder / "authorized_keys"
|
36
|
+
if !file?(authorized_keys)
|
37
|
+
file authorized_keys, "\n\n## GitAuth - DO NO EDIT BELOW THIS LINE ##\n"
|
38
|
+
chmod 0600, authorized_keys
|
39
|
+
end
|
40
|
+
|
41
|
+
gitauth_folder = "~/.gitauth/"
|
42
|
+
folders gitauth_folder
|
43
|
+
|
44
|
+
settings_file = gitauth_folder / "settings.yml"
|
45
|
+
if !file?(settings_file) || options[:force]
|
46
|
+
repo_path = ask("Where did you want repositories to be stored?", "~/repositories")
|
47
|
+
repo_path = File.expand_path(repo_path)
|
48
|
+
folders repo_path
|
49
|
+
|
50
|
+
default_shell_path = GitAuth::BASE_DIR.join("bin", "gitauth-shell").to_s
|
51
|
+
gitauth_shell_path = ""
|
52
|
+
gitauth_shell_set = false
|
53
|
+
while gitauth_shell_path.blank? || !(file?(gitauth_shell_path) && executable?(gitauth_shell_path))
|
54
|
+
# A Give the user a message if the path doesn't exist.
|
55
|
+
if gitauth_shell_set
|
56
|
+
puts "The shell you provided, #{gitauth_shell_path}, isn't executable"
|
57
|
+
else
|
58
|
+
gitauth_shell_set = true
|
59
|
+
end
|
60
|
+
gitauth_shell_path = ask("What is the path to your gitauth-shell?", default_shell_path)
|
61
|
+
gitauth_shell_path = File.expand_path(gitauth_shell_path)
|
62
|
+
end
|
63
|
+
|
64
|
+
GitAuth::Settings.update!({
|
65
|
+
:base_path => File.expand_path(repo_path),
|
66
|
+
:authorized_keys_file => File.expand_path(authorized_keys),
|
67
|
+
:shell_executable => File.expand_path(gitauth_shell_path)
|
68
|
+
})
|
69
|
+
end
|
70
|
+
|
71
|
+
if options[:admin]
|
72
|
+
key_contents = File.read(options[:admin]).strip
|
73
|
+
if GitAuth::User.create("admin", true, key_contents)
|
74
|
+
puts "Default admin user added with key '#{options[:admin]}'"
|
75
|
+
else
|
76
|
+
die! "Error adding default admin user with key at '#{options[:admin]}'"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
a.controller!(:web_app, "Starts the gitauth frontend using the default sintra runner", :skip_path => true)
|
83
|
+
|
84
|
+
a.option(:force, "Skip the verification / confirmation part of adding the permissions")
|
85
|
+
a.option(:type, "The type of permissions - one of all, read, write or none. Defaults to all")
|
86
|
+
full_desc = "Gives a specific user or group the specified permissions to a given repository"
|
87
|
+
a.add("permissions REPOSITORY USER-OR-GROUP", full_desc) do |repo, target, options|
|
88
|
+
GitAuth.prepare
|
89
|
+
permissions = options[:type] || 'all'
|
90
|
+
|
91
|
+
if !%w(all read write none).include? permissions
|
92
|
+
die! "'#{permissions}' is not a valid permission type. It must be all, read, write or none"
|
93
|
+
end
|
94
|
+
|
95
|
+
real_permissions = ({"all" => ["read", "write"], "none" => []}[permissions] || [permissions])
|
96
|
+
repository = GitAuth::Repo.get(repo)
|
97
|
+
real_target = GitAuth.get_user_or_group(target)
|
98
|
+
|
99
|
+
die! "Unknown repository '#{repo}'" if repository.blank?
|
100
|
+
die! "Unknown user or group '#{target}'" if real_target.blank?
|
101
|
+
|
102
|
+
if options[:force] || yes?("Adding '#{permissions}' permissions for #{real_target} to #{repository.name}")
|
103
|
+
repository.update_permissions!(real_target, real_permissions)
|
104
|
+
puts "Permissions updated."
|
105
|
+
else
|
106
|
+
puts "Permissions not added, exiting."
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
a.option(:admin, "Makes a user an admin user")
|
111
|
+
a.add("add-user NAME PATH-TO-PUBLIC-KEY", "Creates a user with a given public key") do |name, ssh_key, options|
|
112
|
+
GitAuth.prepare
|
113
|
+
die! "'#{ssh_key}' is not a valid path to a public key" if !File.file?(ssh_key)
|
114
|
+
admin = !!options[:admin]
|
115
|
+
contents = File.read(ssh_key).strip
|
116
|
+
if GitAuth::User.create(name, admin, contents)
|
117
|
+
puts "Successfully added user '#{name}' (user #{admin ? 'is' : 'is not'} an admin)"
|
118
|
+
else
|
119
|
+
die! "There was an unknown error attempting to add a user called '#{name}'"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
a.option(:make_empty, "Initializes the repository to be empty / have an initial blank commit")
|
124
|
+
a.add("add-repo NAME [PATH=NAME]", "Creates a named repository, with an optional path on the file system") do |name, *args|
|
125
|
+
GitAuth.prepare
|
126
|
+
options = args.extract_options!
|
127
|
+
path = (args.shift || name)
|
128
|
+
if (repo = GitAuth::Repo.create(name, path))
|
129
|
+
puts "Successfully created repository '#{name}' located at '#{path}'"
|
130
|
+
if options[:make_empty]
|
131
|
+
puts "Attempting to make empty repository"
|
132
|
+
repo.make_empty!
|
133
|
+
end
|
134
|
+
else
|
135
|
+
die! "Unable to create repository '#{name}' in location '#{path}'"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
a.add("add-group NAME", "Creates a group with a given name") do |name, options|
|
140
|
+
GitAuth.prepare
|
141
|
+
if GitAuth::Group.create(name)
|
142
|
+
puts "Successfully created group '#{name}'"
|
143
|
+
else
|
144
|
+
die! "Unable to create group '#{name}'"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
a.add("ls-users", "Lists all users currently managed by gitauth") do |options|
|
149
|
+
GitAuth.prepare
|
150
|
+
puts "Users:"
|
151
|
+
(GitAuth::User.all || []).each do |user|
|
152
|
+
line = "- #{user}"
|
153
|
+
line << " (admin)" if user.admin?
|
154
|
+
puts line
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
a.add("ls-repos", "Lists all repositories currently managed by gitauth") do |options|
|
159
|
+
GitAuth.prepare
|
160
|
+
puts "Repositories:"
|
161
|
+
(GitAuth::Repo.all || []).each do |repo|
|
162
|
+
line = " - #{repo.name}"
|
163
|
+
line << " (#{repo.path})" if repo.path != repo.name
|
164
|
+
puts line
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
a.add("ls-groups", "Lists all groups currently managed by gitauth") do |options|
|
169
|
+
GitAuth.prepare
|
170
|
+
puts "Groups:"
|
171
|
+
(GitAuth::Group.all || []).each do |group|
|
172
|
+
puts "- #{group} (#{group.members.empty? ? "no members" : group.members.join(", ")})"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
a.add("rm-user NAME", "Removes the specified user") do |name, options|
|
177
|
+
GitAuth.prepare
|
178
|
+
user = GitAuth::User.get(name)
|
179
|
+
die! "Unknown user '#{name}'" if user.blank?
|
180
|
+
user.destroy!
|
181
|
+
puts "Removed user '#{name}' - Please note you will manually need to remove this users line from authorized_keys"
|
182
|
+
end
|
183
|
+
|
184
|
+
a.add("rm-repo NAME", "Removes the specified repo") do |name, options|
|
185
|
+
GitAuth.prepare
|
186
|
+
repo = GitAuth::Repo.get(name)
|
187
|
+
die! "Unknown repo '#{name}'" if repo.blank?
|
188
|
+
repo.destroy!
|
189
|
+
puts "Removed repo '#{name}'"
|
190
|
+
end
|
191
|
+
|
192
|
+
a.add("rm-group NAME", "Removes the specified group") do |name, options|
|
193
|
+
GitAuth.prepare
|
194
|
+
group = GitAuth::Group.get(name)
|
195
|
+
die! "Unknown group '#{name}'" if group.blank?
|
196
|
+
group.destroy!
|
197
|
+
puts "Removed group '#{name}'"
|
198
|
+
end
|
199
|
+
|
200
|
+
a.add("usage", "Prints out the sample usage instructions") do |options|
|
201
|
+
pager = nil
|
202
|
+
if ENV.has_key?('PAGER')
|
203
|
+
pager = ENV['PAGER'].blank? ? 'cat' : ENV['PAGER']
|
204
|
+
else
|
205
|
+
pager = "less"
|
206
|
+
end
|
207
|
+
exec "#{pager} '#{GitAuth::BASE_DIR.join("USAGE")}'"
|
208
|
+
end
|
209
|
+
|
210
|
+
a.add("show-repo NAME", "Shows information for a repository with a given name") do |name, options|
|
211
|
+
GitAuth.prepare
|
212
|
+
repo = GitAuth::Repo.get(name)
|
213
|
+
die! "Unknown repository '#{repo}'" if repo.blank?
|
214
|
+
puts "Repository Name: #{repo.name}"
|
215
|
+
puts "Repository Path: #{repo.path}"
|
216
|
+
puts "Actual Path: #{repo.real_path}"
|
217
|
+
puts "\nRead Permissions:"
|
218
|
+
read_perms = repo.permissions.fetch(:read, [])
|
219
|
+
read_perms.each { |item| puts " - #{item}" }
|
220
|
+
puts " - No read permissions" if read_perms.blank?
|
221
|
+
puts "\nWrite Permissions:"
|
222
|
+
write_perms = repo.permissions.fetch(:write, [])
|
223
|
+
write_perms.each { |item| puts " - #{item}" }
|
224
|
+
puts " - No write permissions" if write_perms.blank?
|
225
|
+
end
|
226
|
+
|
227
|
+
a.add("show-group NAME", "Shows information for a group with a given name") do |name, options|
|
228
|
+
GitAuth.prepare
|
229
|
+
group = GitAuth::Group.get(name)
|
230
|
+
die! "Unable to find a group named '#{name}'" if group.blank?
|
231
|
+
puts "Group Name: #{group.name}"
|
232
|
+
puts "Reference Name: #{group.to_s}"
|
233
|
+
puts "\nGroup Members:"
|
234
|
+
group.members.each { |member| puts " - #{member}" }
|
235
|
+
puts " - This group has no members" if group.members.blank?
|
236
|
+
end
|
237
|
+
|
238
|
+
a.add("show-user NAME", "Shows details for a user with a specific name") do |name, options|
|
239
|
+
GitAuth.prepare
|
240
|
+
user = GitAuth::User.get(name)
|
241
|
+
die! "Unable to find a user named '#{name}'" if user.blank?
|
242
|
+
puts "User Name: #{user.name}"
|
243
|
+
groups = user.groups
|
244
|
+
puts "\nGroups:"
|
245
|
+
puts " - This user isn't a member of any groups" if groups.blank?
|
246
|
+
groups.each { |g| puts " - #{g.to_s}" }
|
247
|
+
end
|
248
|
+
|
249
|
+
a.add("enable-htaccess-auth", "Generates .htaccess and .htpasswd files, disabling the built in auth") do |options|
|
250
|
+
die! "Apache-based authentication is already used" if GitAuth::ApacheAuthentication.setup?
|
251
|
+
GitAuth::ApacheAuthentication.setup
|
252
|
+
puts "Apache-based authentication setup."
|
253
|
+
end
|
254
|
+
|
255
|
+
a.add("disable-htaccess-auth", "Removes .htaccess and .htpasswd files, enabling the built in auth") do |options|
|
256
|
+
die! "Apache-based authentication is not currently used" unless GitAuth::ApacheAuthentication.setup?
|
257
|
+
GitAuth::ApacheAuthentication.remove
|
258
|
+
puts "Removed Apache-based authentication"
|
259
|
+
end
|
260
|
+
|
261
|
+
end
|