goz 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []