gritano 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +18 -18
- data/TODO +7 -6
- data/VERSION +1 -1
- data/bin/gritano +37 -37
- data/bin/gritano-check +8 -14
- data/features/command.feature +23 -23
- data/features/console.feature +39 -37
- data/gritano.gemspec +2 -2
- data/lib/gritano/command.rb +8 -6
- data/lib/gritano/console.rb +70 -59
- data/spec/command_spec.rb +8 -8
- data/spec/console_spec.rb +48 -48
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Gritano v0.
|
1
|
+
= Gritano v0.4.0
|
2
2
|
|
3
3
|
Gritano is the simplest way to configure a git server over ssh. You can create repositories and manage user access using this practical tool.
|
4
4
|
|
@@ -29,23 +29,23 @@ All you need to do to set up Gritano is
|
|
29
29
|
|
30
30
|
After that you can add users:
|
31
31
|
|
32
|
-
$ gritano user
|
32
|
+
$ gritano user:add igorbonadio
|
33
33
|
|
34
34
|
add administrator rights to this user:
|
35
35
|
|
36
|
-
$ gritano user
|
36
|
+
$ gritano user:admin:add igorbonadio
|
37
37
|
|
38
38
|
add user's public keys:
|
39
39
|
|
40
|
-
$ gritano user
|
40
|
+
$ gritano user:key:add igorbonadio mykey < id_rsa.pub
|
41
41
|
|
42
42
|
create bare repositories:
|
43
43
|
|
44
|
-
$ gritano repo
|
44
|
+
$ gritano repo:add proj.git
|
45
45
|
|
46
46
|
and control access:
|
47
47
|
|
48
|
-
$ gritano repo
|
48
|
+
$ gritano repo:read:add proj.git igorbonadio
|
49
49
|
|
50
50
|
For more information, execute
|
51
51
|
|
@@ -55,13 +55,13 @@ For more information, execute
|
|
55
55
|
|
56
56
|
Gritano 0.2.0 introduced a new feature that enables users to execute some simple commands via ssh:
|
57
57
|
|
58
|
-
$ ssh git@host.com
|
58
|
+
$ ssh git@host.com repo:list
|
59
59
|
|
60
|
-
$ ssh git@host.com
|
60
|
+
$ ssh git@host.com key:list
|
61
61
|
|
62
|
-
$ ssh git@host.com
|
62
|
+
$ ssh git@host.com key:add mykey < id_rsa.pub
|
63
63
|
|
64
|
-
$ ssh git@host.com
|
64
|
+
$ ssh git@host.com key:add mykey
|
65
65
|
|
66
66
|
For more information, execute
|
67
67
|
|
@@ -71,23 +71,23 @@ For more information, execute
|
|
71
71
|
|
72
72
|
Starting from Gritano 0.3.0, administrators can execute commands via ssh:
|
73
73
|
|
74
|
-
$ ssh git@hot.com user
|
74
|
+
$ ssh git@hot.com admin:user:add username
|
75
75
|
|
76
|
-
$ ssh git@hot.com user
|
76
|
+
$ ssh git@hot.com admin:user:rm username
|
77
77
|
|
78
|
-
$ ssh git@hot.com user
|
78
|
+
$ ssh git@hot.com admin:user:key:add username keyname < key.pub
|
79
79
|
|
80
|
-
$ ssh git@hot.com user
|
80
|
+
$ ssh git@hot.com admin:user:key:rm username keyname
|
81
81
|
|
82
|
-
$ ssh git@hot.com repo
|
82
|
+
$ ssh git@hot.com admin:repo:add reponame.git
|
83
83
|
|
84
|
-
$ ssh git@hot.com repo
|
84
|
+
$ ssh git@hot.com admin:repo:rm reponame.git
|
85
85
|
|
86
|
-
$ ssh git@hot.com repo
|
86
|
+
$ ssh git@hot.com admin:repo:list
|
87
87
|
|
88
88
|
For more information, execute
|
89
89
|
|
90
|
-
$ ssh git@host.com admin
|
90
|
+
$ ssh git@host.com admin:help
|
91
91
|
|
92
92
|
== Contributing to Gritano
|
93
93
|
|
data/TODO
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
Outros
|
2
|
-
|
3
|
-
|
4
|
-
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
|
3
|
+
v0.4.0
|
4
|
+
- recuperar acesso via email/código e envio de chave via código
|
5
|
+
- melhorar o help
|
6
|
+
|
7
|
+
v0.5.0
|
8
|
+
- melhorar o instalador/updater
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/bin/gritano
CHANGED
@@ -8,28 +8,29 @@ require 'etc'
|
|
8
8
|
|
9
9
|
def help
|
10
10
|
puts "
|
11
|
-
gritano [
|
11
|
+
gritano [command] parameters
|
12
12
|
|
13
13
|
Examples:
|
14
14
|
gritano install
|
15
15
|
gritano update
|
16
|
-
gritano user
|
17
|
-
gritano user
|
18
|
-
gritano user
|
19
|
-
gritano user
|
20
|
-
gritano user
|
21
|
-
gritano user
|
22
|
-
gritano user
|
23
|
-
gritano user
|
24
|
-
gritano user
|
25
|
-
gritano repo
|
26
|
-
gritano repo
|
27
|
-
gritano repo
|
28
|
-
gritano repo
|
29
|
-
gritano repo
|
30
|
-
gritano repo
|
31
|
-
gritano repo
|
32
|
-
gritano repo
|
16
|
+
gritano user:add username
|
17
|
+
gritano user:rm username
|
18
|
+
gritano user:key:add username keyname < key.pub
|
19
|
+
gritano user:key:rm username keyname
|
20
|
+
gritano user:admin:add username
|
21
|
+
gritano user:admin:rm username
|
22
|
+
gritano user:list
|
23
|
+
gritano user:key:list username
|
24
|
+
gritano user:repo:list username
|
25
|
+
gritano repo:add reponame.git
|
26
|
+
gritano repo:add reponame.git user1 user2 user3
|
27
|
+
gritano repo:rm reponame.git
|
28
|
+
gritano repo:read:add reponame.git username
|
29
|
+
gritano repo:write:add reponame.git username
|
30
|
+
gritano repo:read:rm reponame.git username
|
31
|
+
gritano repo:write:rm reponame.git username
|
32
|
+
gritano repo:list
|
33
|
+
gritano repo:user:list reponame.git
|
33
34
|
|
34
35
|
--
|
35
36
|
v#{File.open(File.join(File.dirname(__FILE__), '..', 'VERSION')).readlines.join}"
|
@@ -69,7 +70,10 @@ def check_gritano
|
|
69
70
|
end
|
70
71
|
|
71
72
|
check_git
|
72
|
-
if ARGV.length ==
|
73
|
+
if ARGV.length == 0
|
74
|
+
help
|
75
|
+
else
|
76
|
+
|
73
77
|
if ARGV[0] =='install'
|
74
78
|
install
|
75
79
|
elsif ARGV[0] =='update'
|
@@ -77,24 +81,20 @@ if ARGV.length == 1
|
|
77
81
|
elsif ARGV[0] =='version'
|
78
82
|
version
|
79
83
|
else
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
puts
|
94
|
-
else
|
95
|
-
puts "error: #{cmd_return[1]}"
|
84
|
+
check_gritano
|
85
|
+
ActiveRecord::Base.establish_connection(YAML::load(File.open(File.join(Etc.getpwuid.dir, '.gritano', 'database.yml'))))
|
86
|
+
console = Gritano::Console.new(STDIN)
|
87
|
+
console.repo_path = Etc.getpwuid.dir
|
88
|
+
console.ssh_path = File.join(Etc.getpwuid.dir, '.ssh')
|
89
|
+
begin
|
90
|
+
cmd_return = console.execute(ARGV)
|
91
|
+
if cmd_return[0]
|
92
|
+
puts "#{cmd_return[1]}"
|
93
|
+
else
|
94
|
+
puts "error: #{cmd_return[1]}"
|
95
|
+
end
|
96
|
+
rescue NoMethodError
|
97
|
+
puts help
|
96
98
|
end
|
97
|
-
rescue NoMethodError
|
98
|
-
puts help
|
99
99
|
end
|
100
100
|
end
|
data/bin/gritano-check
CHANGED
@@ -9,11 +9,11 @@ def help
|
|
9
9
|
ssh user@host command
|
10
10
|
|
11
11
|
Examples:
|
12
|
-
ssh git@host.com
|
13
|
-
ssh git@host.com
|
14
|
-
ssh git@host.com
|
15
|
-
ssh git@host.com
|
16
|
-
ssh git@host.com admin
|
12
|
+
ssh git@host.com repo:list
|
13
|
+
ssh git@host.com key:list
|
14
|
+
ssh git@host.com key:add keyname < key.pub
|
15
|
+
ssh git@host.com key:rm keyname
|
16
|
+
ssh git@host.com admin:help
|
17
17
|
|
18
18
|
--
|
19
19
|
v#{File.open(File.join(File.dirname(__FILE__), '..', 'VERSION')).readlines.join}"
|
@@ -30,19 +30,13 @@ begin
|
|
30
30
|
repository = Gritano::Repository.find_by_name(command[:repo])
|
31
31
|
if user and repository
|
32
32
|
if user.check_access(repository, command[:access])
|
33
|
+
puts "#{command[:command]} #{File.join(repository.full_path)}"
|
33
34
|
exec "#{command[:command]} #{File.join(repository.full_path)}"
|
34
35
|
end
|
35
36
|
end
|
36
37
|
when :user_cmd
|
37
|
-
cmd = command[:command]
|
38
|
-
|
39
|
-
tmp = cmd.split(" ")
|
40
|
-
tmp = tmp[0..-2] + [login] + tmp[-1..-1]
|
41
|
-
cmd = tmp.join(" ")
|
42
|
-
else
|
43
|
-
cmd = cmd + " " + login
|
44
|
-
end
|
45
|
-
exec "gritano user #{cmd}"
|
38
|
+
cmd = command[:command].gsub("[USER]", login)
|
39
|
+
exec "gritano #{cmd}"
|
46
40
|
when :admin_cmd
|
47
41
|
cmd = command[:command]
|
48
42
|
user = Gritano::User.find_by_login(login)
|
data/features/command.feature
CHANGED
@@ -7,26 +7,26 @@ Feature: Command
|
|
7
7
|
When I receive a "<original_command>" command
|
8
8
|
Then I should see that it is a "<access>": "<command>" "<repo>"
|
9
9
|
Examples:
|
10
|
-
| original_command
|
11
|
-
| git-receive-pack proj.git
|
12
|
-
| git-upload-pack proj.git
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
| user
|
18
|
-
| user
|
19
|
-
| user
|
20
|
-
| user
|
21
|
-
| user
|
22
|
-
| user
|
23
|
-
| user
|
24
|
-
| repo
|
25
|
-
| repo
|
26
|
-
| repo
|
27
|
-
| repo
|
28
|
-
| repo
|
29
|
-
| repo
|
30
|
-
| repo
|
31
|
-
| repo
|
32
|
-
| admin
|
10
|
+
| original_command | access | command | repo |
|
11
|
+
| git-receive-pack proj.git | write | git-receive-pack | proj.git |
|
12
|
+
| git-upload-pack proj.git | read | git-upload-pack | proj.git |
|
13
|
+
| repo:list | user_cmd | user:repo:list [USER] | |
|
14
|
+
| key:list | user_cmd | user:key:list [USER] | |
|
15
|
+
| key:add keyname | user_cmd | user:key:add [USER] keyname | |
|
16
|
+
| key:rm keyname | user_cmd | user:key:rm [USER] keyname | |
|
17
|
+
| admin:user:add username | admin_cmd | user:add username | |
|
18
|
+
| admin:user:rm username | admin_cmd | user:rm username | |
|
19
|
+
| admin:user:key:add username keyname | admin_cmd | user:key:add username keyname | |
|
20
|
+
| admin:user:key:rm username keyname | admin_cmd | user:key:rm username keyname | |
|
21
|
+
| admin:user:list | admin_cmd | user:list | |
|
22
|
+
| admin:user:key:list username | admin_cmd | user:key:list username | |
|
23
|
+
| admin:user:repo:list username | admin_cmd | user:repo:list username | |
|
24
|
+
| admin:repo:add reponame.git | admin_cmd | repo:add reponame.git | |
|
25
|
+
| admin:repo:rm reponame.git | admin_cmd | repo:rm reponame.git | |
|
26
|
+
| admin:repo:read:add reponame.git username | admin_cmd | repo:read:add reponame.git username | |
|
27
|
+
| admin:repo:write:add reponame.git username | admin_cmd | repo:write:add reponame.git username | |
|
28
|
+
| admin:repo:read:rm reponame.git username | admin_cmd | repo:read:rm reponame.git username | |
|
29
|
+
| admin:repo:write:rm reponame.git username | admin_cmd | repo:write:rm reponame.git username | |
|
30
|
+
| admin:repo:list | admin_cmd | repo:list | |
|
31
|
+
| admin:repo:user:list reponame.git | admin_cmd | repo:user:list reponame.git | |
|
32
|
+
| admin:help | admin_cmd | help | |
|
data/features/console.feature
CHANGED
@@ -32,40 +32,42 @@ Feature: Console operations
|
|
32
32
|
When I execute "<command>"
|
33
33
|
Then I should see a <result> message
|
34
34
|
Examples:
|
35
|
-
| command
|
36
|
-
| user
|
37
|
-
| user
|
38
|
-
| user
|
39
|
-
| user
|
40
|
-
| user
|
41
|
-
| user
|
42
|
-
| user
|
43
|
-
| user
|
44
|
-
| user
|
45
|
-
| repo
|
46
|
-
| repo
|
47
|
-
| repo
|
48
|
-
| repo
|
49
|
-
| repo
|
50
|
-
| repo
|
51
|
-
| repo
|
52
|
-
| repo
|
53
|
-
|
|
54
|
-
| user
|
55
|
-
| user
|
56
|
-
| user
|
57
|
-
| user
|
58
|
-
| user
|
59
|
-
| user
|
60
|
-
| user
|
61
|
-
|
|
62
|
-
|
|
63
|
-
| repo
|
64
|
-
| repo
|
65
|
-
| repo
|
66
|
-
| repo
|
67
|
-
| repo
|
68
|
-
| repo
|
69
|
-
| repo
|
70
|
-
| repo
|
71
|
-
| repo
|
35
|
+
| command | result |
|
36
|
+
| user:add jose | success |
|
37
|
+
| user:key:add igorbonadio marvin | success |
|
38
|
+
| user:key:rm igorbonadio eva | success |
|
39
|
+
| user:rm igorbonadio | success |
|
40
|
+
| user:list | success |
|
41
|
+
| user:key:list igorbonadio | success |
|
42
|
+
| user:repo:list igorbonadio | success |
|
43
|
+
| user:admin:add igorbonadio | success |
|
44
|
+
| user:admin:rm igorbonadio | success |
|
45
|
+
| repo:add tmp/p-lang.git | success |
|
46
|
+
| repo:add tmp/p-lang.git igorbonadio | success |
|
47
|
+
| repo:add tmp/p-lang.git igorbonadio jessicaeto | success |
|
48
|
+
| repo:rm tmp/jeka.git | success |
|
49
|
+
| repo:read:add tmp/gritano.git jessicaeto | success |
|
50
|
+
| repo:write:add tmp/gritano.git jessicaeto | success |
|
51
|
+
| repo:read:rm tmp/jeka.git igorbonadio | success |
|
52
|
+
| repo:write:rm tmp/gritano.git igorbonadio | success |
|
53
|
+
| repo:list | success |
|
54
|
+
| repo:user:list tmp/jeka.git | success |
|
55
|
+
| user:add igorbonadio | error |
|
56
|
+
| user:rm jose | error |
|
57
|
+
| user:key:add userrr marvino | error |
|
58
|
+
| user:key:rm igorbonadio marvino | error |
|
59
|
+
| user:key:list arybonadio | error |
|
60
|
+
| user:repo:list arybonadio | error |
|
61
|
+
| user:admin:add arybonadio | error |
|
62
|
+
| user:admin:rm arybonadio | error |
|
63
|
+
| repo:add tmp/jeka.git | error |
|
64
|
+
| repo:rm tmp/p-lang.git | error |
|
65
|
+
| repo:read:add tmp/gritano.git arybonadio | error |
|
66
|
+
| repo:read:add tmp/p-lang.git jessicaeto | error |
|
67
|
+
| repo:write:add tmp/gritano.git arybonadio | error |
|
68
|
+
| repo:write:add tmp/p-lang.git jessicaeto | error |
|
69
|
+
| repo:read:rm tmp/jeka.git aribonadio | error |
|
70
|
+
| repo:read:rm tmp/p-lang.git igorbonadio | error |
|
71
|
+
| repo:write:rm tmp/gritano.git arybonadio | error |
|
72
|
+
| repo:write:rm tmp/p-lang.git igorbonadio | error |
|
73
|
+
| repo:user:list tmp/ruby.git | error |
|
data/gritano.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "gritano"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Igor Bonadio"]
|
12
|
-
s.date = "2012-12-
|
12
|
+
s.date = "2012-12-08"
|
13
13
|
s.description = "Gritano is the simplest way to configure your git server over ssh. You can create repositories and manage user access."
|
14
14
|
s.email = "igorbonadio@gmail.com"
|
15
15
|
s.executables = ["gritano", "gritano-check"]
|
data/lib/gritano/command.rb
CHANGED
@@ -6,12 +6,14 @@ module Gritano
|
|
6
6
|
return {access: :write, command: "git-receive-pack", repo: self.repo(cmd)}
|
7
7
|
when /^git-upload-pack/ then
|
8
8
|
return {access: :read, command: "git-upload-pack", repo: self.repo(cmd)}
|
9
|
-
when /^
|
10
|
-
return {access: :user_cmd, command: cmd}
|
11
|
-
when /^
|
12
|
-
|
13
|
-
|
14
|
-
return {access: :
|
9
|
+
when /^repo:/ then
|
10
|
+
return {access: :user_cmd, command: ("user:#{cmd} [USER]")}
|
11
|
+
when /^key:/ then
|
12
|
+
cmd = cmd.split(" ")
|
13
|
+
cmd = [cmd[0]] + ["[USER]"] + cmd[1..-1]
|
14
|
+
return {access: :user_cmd, command: ("user:" + cmd.join(" "))}
|
15
|
+
when /admin:/ then
|
16
|
+
return {access: :admin_cmd, command: cmd.gsub("admin:", "")}
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
data/lib/gritano/console.rb
CHANGED
@@ -13,7 +13,7 @@ module Gritano
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def execute(argv)
|
16
|
-
send(argv[0
|
16
|
+
send(argv[0].gsub(':', '_'), argv[1..-1])
|
17
17
|
end
|
18
18
|
|
19
19
|
def user_list(argv)
|
@@ -29,7 +29,7 @@ module Gritano
|
|
29
29
|
return [true, msg]
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
32
|
+
def user_key_list(argv)
|
33
33
|
login, = argv
|
34
34
|
user = User.find_by_login(login)
|
35
35
|
if user
|
@@ -48,7 +48,7 @@ module Gritano
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def
|
51
|
+
def user_repo_list(argv)
|
52
52
|
login, = argv
|
53
53
|
user = User.find_by_login(login)
|
54
54
|
if user
|
@@ -85,6 +85,55 @@ module Gritano
|
|
85
85
|
return [false, "User #{login} could not be removed."]
|
86
86
|
end
|
87
87
|
|
88
|
+
def user_key_add(argv)
|
89
|
+
login, key_name, key_file = argv
|
90
|
+
user = User.find_by_login(login)
|
91
|
+
if user
|
92
|
+
key = user.keys.create(name: key_name, key: @stdin.read)
|
93
|
+
if key.valid?
|
94
|
+
File.open(File.join(@ssh_path, 'authorized_keys'), 'w').write(Key.authorized_keys)
|
95
|
+
return [true, "Key added successfully."]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
return [false, "Key could not be added."]
|
99
|
+
end
|
100
|
+
|
101
|
+
def user_key_rm(argv)
|
102
|
+
login, key_name = argv
|
103
|
+
key = Key.where(name: key_name).includes(:user).where("users.login" => login).limit(1)[0]
|
104
|
+
if key
|
105
|
+
if key.destroy
|
106
|
+
File.open(File.join(@ssh_path, 'authorized_keys'), 'w').write(Key.authorized_keys)
|
107
|
+
return [true, "Key removed successfully."]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
return [false, "Key could not be removed."]
|
111
|
+
end
|
112
|
+
|
113
|
+
def user_admin_add(argv)
|
114
|
+
login, = argv
|
115
|
+
user = User.find_by_login(login)
|
116
|
+
if user
|
117
|
+
user.admin = true
|
118
|
+
if user.save
|
119
|
+
return [true, "Now, user #{login} is an administrator"]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
return [false, "User #{login} could not be modified"]
|
123
|
+
end
|
124
|
+
|
125
|
+
def user_admin_rm(argv)
|
126
|
+
login, = argv
|
127
|
+
user = User.find_by_login(login)
|
128
|
+
if user
|
129
|
+
user.admin = false
|
130
|
+
if user.save
|
131
|
+
return [true, "Now, user #{login} is not an administrator"]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
return [false, "User #{login} could not be modified"]
|
135
|
+
end
|
136
|
+
|
88
137
|
def repo_list(argv)
|
89
138
|
repos = Repository.all
|
90
139
|
msg = Terminal::Table.new do |t|
|
@@ -99,13 +148,24 @@ module Gritano
|
|
99
148
|
end
|
100
149
|
|
101
150
|
def repo_add(argv)
|
102
|
-
name, = argv
|
151
|
+
name, user_login = argv
|
103
152
|
repo = Repository.new(name: name, path: @repo_path)
|
104
|
-
|
153
|
+
if repo.save
|
154
|
+
if user_login
|
155
|
+
argv[1..-1].each do |login|
|
156
|
+
user = User.find_by_login(login)
|
157
|
+
if user
|
158
|
+
user.add_access(repo, :read)
|
159
|
+
user.add_access(repo, :write)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
return [true, "Repository #{name} created successfully."]
|
164
|
+
end
|
105
165
|
return [false, "Repository #{name} could not be created."]
|
106
166
|
end
|
107
167
|
|
108
|
-
def
|
168
|
+
def repo_user_list(argv)
|
109
169
|
name, = argv
|
110
170
|
repo = Repository.find_by_name(name)
|
111
171
|
if repo
|
@@ -139,7 +199,7 @@ module Gritano
|
|
139
199
|
return [false, "Repository #{name} could not be removed."]
|
140
200
|
end
|
141
201
|
|
142
|
-
def
|
202
|
+
def repo_read_add(argv)
|
143
203
|
repo_name, login = argv
|
144
204
|
user = User.find_by_login(login)
|
145
205
|
repo = Repository.find_by_name(repo_name)
|
@@ -149,7 +209,7 @@ module Gritano
|
|
149
209
|
return [false, "An error occurred. Permissions was not modified."]
|
150
210
|
end
|
151
211
|
|
152
|
-
def
|
212
|
+
def repo_write_add(argv)
|
153
213
|
repo_name, login = argv
|
154
214
|
user = User.find_by_login(login)
|
155
215
|
repo = Repository.find_by_name(repo_name)
|
@@ -159,7 +219,7 @@ module Gritano
|
|
159
219
|
return [false, "An error occurred. Permissions was not modified."]
|
160
220
|
end
|
161
221
|
|
162
|
-
def
|
222
|
+
def repo_read_rm(argv)
|
163
223
|
repo_name, login = argv
|
164
224
|
user = User.find_by_login(login)
|
165
225
|
repo = Repository.find_by_name(repo_name)
|
@@ -169,7 +229,7 @@ module Gritano
|
|
169
229
|
return [false, "An error occurred. Permissions was not modified."]
|
170
230
|
end
|
171
231
|
|
172
|
-
def
|
232
|
+
def repo_write_rm(argv)
|
173
233
|
repo_name, login = argv
|
174
234
|
user = User.find_by_login(login)
|
175
235
|
repo = Repository.find_by_name(repo_name)
|
@@ -178,54 +238,5 @@ module Gritano
|
|
178
238
|
end
|
179
239
|
return [false, "An error occurred. Permissions was not modified."]
|
180
240
|
end
|
181
|
-
|
182
|
-
def user_addkey(argv)
|
183
|
-
login, key_name, key_file = argv
|
184
|
-
user = User.find_by_login(login)
|
185
|
-
if user
|
186
|
-
key = user.keys.create(name: key_name, key: @stdin.read)
|
187
|
-
if key.valid?
|
188
|
-
File.open(File.join(@ssh_path, 'authorized_keys'), 'w').write(Key.authorized_keys)
|
189
|
-
return [true, "Key added successfully."]
|
190
|
-
end
|
191
|
-
end
|
192
|
-
return [false, "Key could not be added."]
|
193
|
-
end
|
194
|
-
|
195
|
-
def user_rmkey(argv)
|
196
|
-
login, key_name = argv
|
197
|
-
key = Key.where(name: key_name).includes(:user).where("users.login" => login).limit(1)[0]
|
198
|
-
if key
|
199
|
-
if key.destroy
|
200
|
-
File.open(File.join(@ssh_path, 'authorized_keys'), 'w').write(Key.authorized_keys)
|
201
|
-
return [true, "Key removed successfully."]
|
202
|
-
end
|
203
|
-
end
|
204
|
-
return [false, "Key could not be removed."]
|
205
|
-
end
|
206
|
-
|
207
|
-
def user_addadmin(argv)
|
208
|
-
login, = argv
|
209
|
-
user = User.find_by_login(login)
|
210
|
-
if user
|
211
|
-
user.admin = true
|
212
|
-
if user.save
|
213
|
-
return [true, "Now, user #{login} is an administrator"]
|
214
|
-
end
|
215
|
-
end
|
216
|
-
return [false, "User #{login} could not be modified"]
|
217
|
-
end
|
218
|
-
|
219
|
-
def user_rmadmin(argv)
|
220
|
-
login, = argv
|
221
|
-
user = User.find_by_login(login)
|
222
|
-
if user
|
223
|
-
user.admin = false
|
224
|
-
if user.save
|
225
|
-
return [true, "Now, user #{login} is not an administrator"]
|
226
|
-
end
|
227
|
-
end
|
228
|
-
return [false, "User #{login} could not be modified"]
|
229
|
-
end
|
230
241
|
end
|
231
242
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -16,26 +16,26 @@ describe Gritano::Command do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should interpret repos' do
|
19
|
-
command = Gritano::Command.eval("
|
19
|
+
command = Gritano::Command.eval("repo:list")
|
20
20
|
command[:access].to_s.should be == "user_cmd"
|
21
|
-
command[:command].should be == "
|
21
|
+
command[:command].should be == "user:repo:list [USER]"
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should interpret keys' do
|
25
|
-
command = Gritano::Command.eval("
|
25
|
+
command = Gritano::Command.eval("key:list")
|
26
26
|
command[:access].to_s.should be == "user_cmd"
|
27
|
-
command[:command].should be == "
|
27
|
+
command[:command].should be == "user:key:list [USER]"
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should interpret addkey keyname' do
|
31
|
-
command = Gritano::Command.eval("
|
31
|
+
command = Gritano::Command.eval("key:add keyname")
|
32
32
|
command[:access].to_s.should be == "user_cmd"
|
33
|
-
command[:command].should be == "
|
33
|
+
command[:command].should be == "user:key:add [USER] keyname"
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'should interpret rmkey keyname' do
|
37
|
-
command = Gritano::Command.eval("
|
37
|
+
command = Gritano::Command.eval("key:rm keyname")
|
38
38
|
command[:access].to_s.should be == "user_cmd"
|
39
|
-
command[:command].should be == "
|
39
|
+
command[:command].should be == "user:key:rm [USER] keyname"
|
40
40
|
end
|
41
41
|
end
|
data/spec/console_spec.rb
CHANGED
@@ -8,88 +8,88 @@ describe Gritano::Console do
|
|
8
8
|
@console = Gritano::Console.new(stdin)
|
9
9
|
end
|
10
10
|
|
11
|
-
it "should respond to gritano user
|
11
|
+
it "should respond to gritano user:add igorbonadio" do
|
12
12
|
@console.should_receive(:user_add)
|
13
|
-
@console.execute("user
|
13
|
+
@console.execute("user:add igorbonadio".split(' '))
|
14
14
|
end
|
15
15
|
|
16
|
-
it "should respond to gritano user
|
16
|
+
it "should respond to gritano user:rm igorbonadio" do
|
17
17
|
@console.should_receive(:user_rm)
|
18
|
-
@console.execute("user
|
18
|
+
@console.execute("user:rm igorbonadio".split(' '))
|
19
19
|
end
|
20
20
|
|
21
|
-
it "should respond to gritano user
|
22
|
-
@console.should_receive(:
|
23
|
-
@console.execute("user
|
21
|
+
it "should respond to gritano user:key:add username keyname < key.pub" do
|
22
|
+
@console.should_receive(:user_key_add)
|
23
|
+
@console.execute("user:key:add igorbonadio keyname".split(' '))
|
24
24
|
end
|
25
25
|
|
26
|
-
it "should respond to gritano user
|
27
|
-
@console.should_receive(:
|
28
|
-
@console.execute("user
|
26
|
+
it "should respond to gritano user:key:rm username keyname" do
|
27
|
+
@console.should_receive(:user_key_rm)
|
28
|
+
@console.execute("user:key:rm username keyname".split(' '))
|
29
29
|
end
|
30
30
|
|
31
|
-
it "should respond to gritano user
|
31
|
+
it "should respond to gritano user:list" do
|
32
32
|
@console.should_receive(:user_list)
|
33
|
-
@console.execute("user
|
33
|
+
@console.execute("user:list".split(' '))
|
34
34
|
end
|
35
35
|
|
36
|
-
it "should respond to gritano user
|
37
|
-
@console.should_receive(:
|
38
|
-
@console.execute("user
|
36
|
+
it "should respond to gritano user:key:list username" do
|
37
|
+
@console.should_receive(:user_key_list)
|
38
|
+
@console.execute("user:key:list username".split(' '))
|
39
39
|
end
|
40
40
|
|
41
|
-
it "should respond to gritano user
|
42
|
-
@console.should_receive(:
|
43
|
-
@console.execute("user
|
41
|
+
it "should respond to gritano user:repo:list username" do
|
42
|
+
@console.should_receive(:user_repo_list)
|
43
|
+
@console.execute("user:repo:list username".split(' '))
|
44
44
|
end
|
45
45
|
|
46
|
-
it "should respond to gritano repo
|
47
|
-
@console.should_receive(:
|
48
|
-
@console.execute("repo
|
46
|
+
it "should respond to gritano repo:user:list reponame.git" do
|
47
|
+
@console.should_receive(:repo_user_list)
|
48
|
+
@console.execute("repo:user:list reponame.git".split(' '))
|
49
49
|
end
|
50
50
|
|
51
|
-
it "should respond to gritano
|
52
|
-
@console.should_receive(:
|
53
|
-
@console.execute("
|
51
|
+
it "should respond to gritano user:admin:add igorbonadio" do
|
52
|
+
@console.should_receive(:user_admin_add)
|
53
|
+
@console.execute("user:admin:add igorbonadio".split(' '))
|
54
54
|
end
|
55
55
|
|
56
|
-
it "should respond to gritano
|
57
|
-
@console.should_receive(:
|
58
|
-
@console.execute("
|
56
|
+
it "should respond to gritano user:admin:rm igorbonadio" do
|
57
|
+
@console.should_receive(:user_admin_rm)
|
58
|
+
@console.execute("user:admin:rm igorbonadio".split(' '))
|
59
59
|
end
|
60
60
|
|
61
|
-
it "should respond to gritano repo
|
62
|
-
@console.should_receive(:
|
63
|
-
@console.execute("repo
|
61
|
+
it "should respond to gritano repo:add tmp/reponame.git" do
|
62
|
+
@console.should_receive(:repo_add)
|
63
|
+
@console.execute("repo:add tmp/reponame.git".split(' '))
|
64
64
|
end
|
65
65
|
|
66
|
-
it "should respond to gritano repo
|
67
|
-
@console.should_receive(:
|
68
|
-
@console.execute("repo
|
66
|
+
it "should respond to gritano repo:rm tmp/reponame.git" do
|
67
|
+
@console.should_receive(:repo_rm)
|
68
|
+
@console.execute("repo:rm tmp/reponame.git".split(' '))
|
69
69
|
end
|
70
70
|
|
71
|
-
it "should respond to gritano repo
|
72
|
-
@console.should_receive(:
|
73
|
-
@console.execute("repo
|
71
|
+
it "should respond to gritano repo:read:add igorbonadio tmp/reponame.git" do
|
72
|
+
@console.should_receive(:repo_read_add)
|
73
|
+
@console.execute("repo:read:add igorbonadio tmp/reponame.git".split(' '))
|
74
74
|
end
|
75
75
|
|
76
|
-
it "should respond to gritano repo
|
77
|
-
@console.should_receive(:
|
78
|
-
@console.execute("repo
|
76
|
+
it "should respond to gritano repo:write:add igorbonadio tmp/reponame.git" do
|
77
|
+
@console.should_receive(:repo_write_add)
|
78
|
+
@console.execute("repo:write:add igorbonadio tmp/reponame.git".split(' '))
|
79
79
|
end
|
80
80
|
|
81
|
-
it "should respond to gritano repo
|
82
|
-
@console.should_receive(:
|
83
|
-
@console.execute("repo
|
81
|
+
it "should respond to gritano repo:read:rm igorbonadio tmp/reponame.git" do
|
82
|
+
@console.should_receive(:repo_read_rm)
|
83
|
+
@console.execute("repo:read:rm igorbonadio tmp/reponame.git".split(' '))
|
84
84
|
end
|
85
85
|
|
86
|
-
it "should respond to gritano
|
87
|
-
@console.should_receive(:
|
88
|
-
@console.execute("
|
86
|
+
it "should respond to gritano repo:write:rm igorbonadio tmp/reponame.git" do
|
87
|
+
@console.should_receive(:repo_write_rm)
|
88
|
+
@console.execute("repo:write:rm igorbonadio tmp/reponame.git".split(' '))
|
89
89
|
end
|
90
90
|
|
91
|
-
it "should respond to gritano
|
92
|
-
@console.should_receive(:
|
93
|
-
@console.execute("
|
91
|
+
it "should respond to gritano repo:list" do
|
92
|
+
@console.should_receive(:repo_list)
|
93
|
+
@console.execute("repo:list".split(' '))
|
94
94
|
end
|
95
95
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gritano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -262,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
262
|
version: '0'
|
263
263
|
segments:
|
264
264
|
- 0
|
265
|
-
hash:
|
265
|
+
hash: 3887910005578174046
|
266
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
267
|
none: false
|
268
268
|
requirements:
|