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.
@@ -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
@@ -5,7 +5,7 @@ module Goz
5
5
  #
6
6
  # Goz version
7
7
  #
8
- VERSION = '0.0.3'
8
+ VERSION = '0.1.0'
9
9
 
10
10
  end
11
11
 
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.3
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-04-30 00:00:00.000000000 Z
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: rake
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: :development
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: rdoc
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: rdoc-readme
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.1.2
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.1.2
125
+ version: '0'
78
126
  - !ruby/object:Gem::Dependency
79
- name: simplecov
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: sqlite3
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: []