goz 0.0.3 → 0.1.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/.gitignore +1 -0
- data/HISTORY.rdoc +6 -0
- data/README.rdoc +2 -17
- data/TODO.md +16 -0
- data/goz.gemspec +5 -1
- data/lib/goz.rb +9 -25
- data/lib/goz/database.rb +10 -0
- data/lib/goz/database/migrations.rb +15 -9
- data/lib/goz/event.rb +78 -16
- data/lib/goz/event_type.rb +4 -4
- data/lib/goz/group.rb +121 -44
- data/lib/goz/group/base.rb +115 -0
- data/lib/goz/group/etc_group.rb +113 -0
- data/lib/goz/group/grouper.rb +153 -0
- data/lib/goz/group/grouper/stemmed_groups.rb +140 -0
- data/lib/goz/group/test_case.rb +200 -0
- data/lib/goz/group_service.rb +5 -10
- data/lib/goz/logger.rb +41 -72
- data/lib/goz/service.rb +50 -30
- data/lib/goz/service/base.rb +43 -0
- data/lib/goz/service/fake_service.rb +81 -0
- data/lib/goz/test_case.rb +26 -14
- data/lib/goz/user.rb +98 -37
- data/lib/goz/user/base.rb +81 -0
- data/lib/goz/user/etc_passwd.rb +56 -0
- data/lib/goz/user/ldap.rb +112 -0
- data/lib/goz/user/test_case.rb +55 -0
- data/lib/goz/version.rb +1 -1
- metadata +89 -45
- data/lib/goz/cache.rb +0 -136
- data/lib/goz/cache/hash_store.rb +0 -75
- data/test/test_admins.rb +0 -189
- data/test/test_cache.rb +0 -90
- data/test/test_event.rb +0 -576
- data/test/test_event_type.rb +0 -47
- data/test/test_goz.rb +0 -22
- data/test/test_group.rb +0 -180
- data/test/test_group_services.rb +0 -241
- data/test/test_hash_store_cash.rb +0 -42
- data/test/test_logger.rb +0 -93
- data/test/test_members.rb +0 -189
- data/test/test_service.rb +0 -150
- data/test/test_user.rb +0 -205
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'etc'
|
4
|
+
require 'goz/user/base'
|
5
|
+
require 'socket'
|
6
|
+
|
7
|
+
|
8
|
+
module Goz # :nodoc:
|
9
|
+
class User # :nodoc:
|
10
|
+
|
11
|
+
#
|
12
|
+
# = Goz::User::EtcPasswd - +/etc/passwd+ derived users (mostly for testing)
|
13
|
+
#
|
14
|
+
# == Usage
|
15
|
+
#
|
16
|
+
# TODO
|
17
|
+
#
|
18
|
+
# == Author
|
19
|
+
#
|
20
|
+
# blair christensen. <mailto:blair.christensen@gmail.com>
|
21
|
+
#
|
22
|
+
# == Homepage
|
23
|
+
#
|
24
|
+
# https://github.com/blairc/goz/
|
25
|
+
#
|
26
|
+
class EtcPasswd < Goz::User::Base
|
27
|
+
|
28
|
+
TAG = self.name
|
29
|
+
|
30
|
+
|
31
|
+
def initialize(u)
|
32
|
+
@email = "#{ u[:name] }@#{ Socket.gethostname }" # TODO Hack!
|
33
|
+
@identifier = u[:uid].to_s
|
34
|
+
@klass = self.class.name
|
35
|
+
@login = u[:name]
|
36
|
+
@name = u[:gecos]
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Find Goz::User by login or return +nil+
|
41
|
+
#
|
42
|
+
def self.find_by_login(login)
|
43
|
+
Goz::Logger.debug TAG, "find_by_login( login=#{login} )"
|
44
|
+
begin
|
45
|
+
return self.new( Etc.getpwnam(login) )
|
46
|
+
rescue ArgumentError => e
|
47
|
+
Goz::Logger.warn TAG, "find_by_login( login=#{login} ) - not found"
|
48
|
+
end
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'net/ldap'
|
4
|
+
require 'goz/user/base'
|
5
|
+
|
6
|
+
|
7
|
+
module Goz # :nodoc:
|
8
|
+
class User # :nodoc:
|
9
|
+
|
10
|
+
#
|
11
|
+
# = Goz::User::LDAP - TODO
|
12
|
+
#
|
13
|
+
# == Usage
|
14
|
+
#
|
15
|
+
# TODO
|
16
|
+
#
|
17
|
+
# == Author
|
18
|
+
#
|
19
|
+
# blair christensen. <mailto:blair.christensen@gmail.com>
|
20
|
+
#
|
21
|
+
# == Homepage
|
22
|
+
#
|
23
|
+
# https://github.com/blairc/goz/
|
24
|
+
#
|
25
|
+
class LDAP < Goz::User::Base
|
26
|
+
|
27
|
+
#
|
28
|
+
# TODO How am I handling configuration?
|
29
|
+
#
|
30
|
+
|
31
|
+
TAG = self.name
|
32
|
+
|
33
|
+
|
34
|
+
def initialize(u)
|
35
|
+
@email = u[ @@cf['attributes']['email'] ].first
|
36
|
+
@identifier = u[ @@cf['attributes']['identifier'] ].first
|
37
|
+
@klass = self.class.name
|
38
|
+
@login = u[ @@cf['attributes']['login'] ].first
|
39
|
+
@name = u[ @@cf['attributes']['name'] ].first
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Find Goz::User by identifier or return +nil+
|
44
|
+
#
|
45
|
+
def self.find_by_identifier(identifier)
|
46
|
+
Goz::Logger.debug TAG, "find_by_identifier( identifier=#{identifier} )"
|
47
|
+
u = find 'identifier', identifier
|
48
|
+
if u.nil?
|
49
|
+
Goz::Logger.warn TAG, "find_by_identifier( identifier=#{identifier} ) - not found"
|
50
|
+
return nil
|
51
|
+
end
|
52
|
+
self.new u
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
#
|
57
|
+
# Find Goz::User by login or return +nil+
|
58
|
+
#
|
59
|
+
def self.find_by_login(login)
|
60
|
+
Goz::Logger.debug TAG, "find_by_login( login=#{login} )"
|
61
|
+
u = find 'login', login
|
62
|
+
if u.nil?
|
63
|
+
Goz::Logger.warn TAG, "find_by_login( login=#{login} ) - not found"
|
64
|
+
return nil
|
65
|
+
end
|
66
|
+
self.new u
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def self.authenticate(login, pass)
|
73
|
+
connect do |ldap|
|
74
|
+
result = ldap.bind_as :base => @@cf['base'],
|
75
|
+
:filter => "#{ @@cf['attributes']['login'] }=#{login}",
|
76
|
+
:password => pass
|
77
|
+
result ? true : false
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.connect
|
82
|
+
ldap = Net::LDAP.new :host => @@cf['host'],
|
83
|
+
:port => @@cf['port'],
|
84
|
+
:encryption => @@cf['encryption'],
|
85
|
+
:auth => {
|
86
|
+
# TODO Shove this all into the config file
|
87
|
+
:method => :simple,
|
88
|
+
:password => @@cf['password'],
|
89
|
+
:username => @@cf['user']
|
90
|
+
}
|
91
|
+
raise(RuntimeError, "unable to bind to LDAP server") unless ldap.bind
|
92
|
+
yield ldap if block_given?
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.find(key, value)
|
96
|
+
connect do |ldap|
|
97
|
+
ldap.search( :base => @@cf['base'],
|
98
|
+
:filter => "#{ @@cf['attributes'][key] }=#{value}",
|
99
|
+
:attributes => @@cf['attributes'].values,
|
100
|
+
:size => 1 ) do |entry|
|
101
|
+
return entry
|
102
|
+
end
|
103
|
+
end
|
104
|
+
Goz::Logger.warn TAG, "finding '#{key}'='#{value}'"
|
105
|
+
nil
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'goz/test_case'
|
4
|
+
|
5
|
+
|
6
|
+
module Goz # :nodoc:
|
7
|
+
class User # :nodoc
|
8
|
+
|
9
|
+
#
|
10
|
+
# = Goz::User::TestCase - Goz user test case.
|
11
|
+
#
|
12
|
+
# == Author
|
13
|
+
#
|
14
|
+
# blair christensen. <mailto:blair.christensen@gmail.com>
|
15
|
+
#
|
16
|
+
# == Homepage
|
17
|
+
#
|
18
|
+
# https://github.com/blairc/goz/
|
19
|
+
#
|
20
|
+
class TestCase < Goz::TestCase
|
21
|
+
|
22
|
+
def setup
|
23
|
+
super
|
24
|
+
@klass ||= self.class
|
25
|
+
@skip = @klass == Goz::User::TestCase
|
26
|
+
end
|
27
|
+
|
28
|
+
def skip?
|
29
|
+
@skip
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def test_find_by_login_for_user_that_does_not_exist
|
34
|
+
return if skip?
|
35
|
+
|
36
|
+
assert_nil @klass.find_by_login @users[:a][:login]
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_find_by_login_for_user_that_does_exist
|
40
|
+
return if skip?
|
41
|
+
return if @klass == Goz::User
|
42
|
+
fail("not implemented")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_sync_with_provider
|
46
|
+
return if skip?
|
47
|
+
return if @klass == Goz::User
|
48
|
+
fail("not implemented")
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
data/lib/goz/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: goz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: grouper-rest-client
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: json
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
14
62
|
- !ruby/object:Gem::Dependency
|
15
63
|
name: sequel
|
16
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,14 +76,14 @@ dependencies:
|
|
28
76
|
- !ruby/object:Gem::Version
|
29
77
|
version: '0'
|
30
78
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
79
|
+
name: sqlite3
|
32
80
|
requirement: !ruby/object:Gem::Requirement
|
33
81
|
none: false
|
34
82
|
requirements:
|
35
83
|
- - ! '>='
|
36
84
|
- !ruby/object:Gem::Version
|
37
85
|
version: '0'
|
38
|
-
type: :
|
86
|
+
type: :runtime
|
39
87
|
prerelease: false
|
40
88
|
version_requirements: !ruby/object:Gem::Requirement
|
41
89
|
none: false
|
@@ -44,7 +92,7 @@ dependencies:
|
|
44
92
|
- !ruby/object:Gem::Version
|
45
93
|
version: '0'
|
46
94
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
95
|
+
name: mocha
|
48
96
|
requirement: !ruby/object:Gem::Requirement
|
49
97
|
none: false
|
50
98
|
requirements:
|
@@ -60,23 +108,23 @@ dependencies:
|
|
60
108
|
- !ruby/object:Gem::Version
|
61
109
|
version: '0'
|
62
110
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
111
|
+
name: rake
|
64
112
|
requirement: !ruby/object:Gem::Requirement
|
65
113
|
none: false
|
66
114
|
requirements:
|
67
|
-
- -
|
115
|
+
- - ! '>='
|
68
116
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0
|
117
|
+
version: '0'
|
70
118
|
type: :development
|
71
119
|
prerelease: false
|
72
120
|
version_requirements: !ruby/object:Gem::Requirement
|
73
121
|
none: false
|
74
122
|
requirements:
|
75
|
-
- -
|
123
|
+
- - ! '>='
|
76
124
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0
|
125
|
+
version: '0'
|
78
126
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
127
|
+
name: rdoc
|
80
128
|
requirement: !ruby/object:Gem::Requirement
|
81
129
|
none: false
|
82
130
|
requirements:
|
@@ -92,7 +140,23 @@ dependencies:
|
|
92
140
|
- !ruby/object:Gem::Version
|
93
141
|
version: '0'
|
94
142
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
143
|
+
name: rdoc-readme
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.1.2
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.1.2
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: simplecov
|
96
160
|
requirement: !ruby/object:Gem::Requirement
|
97
161
|
none: false
|
98
162
|
requirements:
|
@@ -119,33 +183,31 @@ files:
|
|
119
183
|
- HISTORY.rdoc
|
120
184
|
- README.rdoc
|
121
185
|
- Rakefile
|
186
|
+
- TODO.md
|
122
187
|
- goz.gemspec
|
123
188
|
- lib/goz.rb
|
124
|
-
- lib/goz/cache.rb
|
125
|
-
- lib/goz/cache/hash_store.rb
|
126
189
|
- lib/goz/database.rb
|
127
190
|
- lib/goz/database/migrations.rb
|
128
191
|
- lib/goz/event.rb
|
129
192
|
- lib/goz/event_type.rb
|
130
193
|
- lib/goz/group.rb
|
194
|
+
- lib/goz/group/base.rb
|
195
|
+
- lib/goz/group/etc_group.rb
|
196
|
+
- lib/goz/group/grouper.rb
|
197
|
+
- lib/goz/group/grouper/stemmed_groups.rb
|
198
|
+
- lib/goz/group/test_case.rb
|
131
199
|
- lib/goz/group_service.rb
|
132
200
|
- lib/goz/logger.rb
|
133
201
|
- lib/goz/service.rb
|
202
|
+
- lib/goz/service/base.rb
|
203
|
+
- lib/goz/service/fake_service.rb
|
134
204
|
- lib/goz/test_case.rb
|
135
205
|
- lib/goz/user.rb
|
206
|
+
- lib/goz/user/base.rb
|
207
|
+
- lib/goz/user/etc_passwd.rb
|
208
|
+
- lib/goz/user/ldap.rb
|
209
|
+
- lib/goz/user/test_case.rb
|
136
210
|
- lib/goz/version.rb
|
137
|
-
- test/test_admins.rb
|
138
|
-
- test/test_cache.rb
|
139
|
-
- test/test_event.rb
|
140
|
-
- test/test_event_type.rb
|
141
|
-
- test/test_goz.rb
|
142
|
-
- test/test_group.rb
|
143
|
-
- test/test_group_services.rb
|
144
|
-
- test/test_hash_store_cash.rb
|
145
|
-
- test/test_logger.rb
|
146
|
-
- test/test_members.rb
|
147
|
-
- test/test_service.rb
|
148
|
-
- test/test_user.rb
|
149
211
|
homepage: https://github.com/blairc/goz/
|
150
212
|
licenses: []
|
151
213
|
post_install_message:
|
@@ -158,34 +220,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
220
|
- - ! '>='
|
159
221
|
- !ruby/object:Gem::Version
|
160
222
|
version: '0'
|
161
|
-
segments:
|
162
|
-
- 0
|
163
|
-
hash: -4090993269565058272
|
164
223
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
224
|
none: false
|
166
225
|
requirements:
|
167
226
|
- - ! '>='
|
168
227
|
- !ruby/object:Gem::Version
|
169
228
|
version: '0'
|
170
|
-
segments:
|
171
|
-
- 0
|
172
|
-
hash: -4090993269565058272
|
173
229
|
requirements: []
|
174
230
|
rubyforge_project: goz
|
175
231
|
rubygems_version: 1.8.23
|
176
232
|
signing_key:
|
177
233
|
specification_version: 3
|
178
234
|
summary: Generic self-service provisioning system
|
179
|
-
test_files:
|
180
|
-
- test/test_admins.rb
|
181
|
-
- test/test_cache.rb
|
182
|
-
- test/test_event.rb
|
183
|
-
- test/test_event_type.rb
|
184
|
-
- test/test_goz.rb
|
185
|
-
- test/test_group.rb
|
186
|
-
- test/test_group_services.rb
|
187
|
-
- test/test_hash_store_cash.rb
|
188
|
-
- test/test_logger.rb
|
189
|
-
- test/test_members.rb
|
190
|
-
- test/test_service.rb
|
191
|
-
- test/test_user.rb
|
235
|
+
test_files: []
|