adap 0.1.10 → 0.2.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.
- checksums.yaml +4 -4
- data/README_FOR_DEVELOPER.md +48 -0
- data/lib/adap/adap.rb +24 -24
- data/lib/adap/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0027496e73b5ac4ad67838975ca7876a4d9efed7b64de41733b1ef85b591f893'
|
4
|
+
data.tar.gz: 6fcaf2a2f8506dff5c606593f2565ee5b853ff672eaecd7d9e2a27b41108431d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa4f5affabb9498f6d0f3a2802807fedfdb975870102fb16ba67fc9e0d9ff69c0b17cf3c1c5baf5c3b847f6aabd149f3114f778f8f45683fe0d81d6390118ba3
|
7
|
+
data.tar.gz: 9e19e2633f89514187f1f5a5472f62933f89d604399a3aafb56b674735f4784f58e2d7459c2160877ec800c3a966f84e27dfc5c6f6831f6fd4e4af62a285dff5
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# To run workflow
|
2
|
+
|
3
|
+
# GitHub Actions
|
4
|
+
## For unit testing
|
5
|
+
When you push to any branch "master", "develop" or merge a PR to "master", the unit tests will run automatically.
|
6
|
+
Please check the progress in the Actions tab.
|
7
|
+
|
8
|
+
|
9
|
+
## For release (interactively)
|
10
|
+
First, you need to modify a version in `./lib/adap/version.py`.
|
11
|
+
Then, you can run the following command to trigger the release workflow.
|
12
|
+
|
13
|
+
```
|
14
|
+
$ vim lib/adap/version.rb
|
15
|
+
-> Update VERSION
|
16
|
+
```
|
17
|
+
|
18
|
+
Then create a commit and push it and create a PR.
|
19
|
+
After it was merged, you can run the following command to trigger the release workflow.
|
20
|
+
|
21
|
+
```
|
22
|
+
$ gh workflow run
|
23
|
+
? Select a workflow [Use arrows to move, type to filter]
|
24
|
+
> Ruby (release.yml) // <- Select "Ruby (release.yml)"
|
25
|
+
Ruby (ruby.yml)
|
26
|
+
Dependabot Updates (dependabot-updates)
|
27
|
+
|
28
|
+
? otp (required) // <- Input the OTP code
|
29
|
+
```
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
```
|
34
|
+
$ gh run list --workflow=release.yml
|
35
|
+
STATUS TITLE WORKFLOW BRANCH EVENT ID ELAPSED AGE
|
36
|
+
* Ruby Ruby master workflow_dispatch 12673039585 10s less than a minute ago
|
37
|
+
```
|
38
|
+
|
39
|
+
|
40
|
+
## For release (non-interactively)
|
41
|
+
You can also trigger the release workflow non-interactively.
|
42
|
+
|
43
|
+
```
|
44
|
+
gh workflow run release.yml --ref=master --field otp=123456
|
45
|
+
```
|
46
|
+
|
47
|
+
`--field otp=123456` is required to input the OTP code.
|
48
|
+
You have to change `123456` to the actual OTP code.
|
data/lib/adap/adap.rb
CHANGED
@@ -19,8 +19,8 @@ class Adap
|
|
19
19
|
def initialize(params)
|
20
20
|
raise "Initialize Adap was failed. params must not be nil" if params == nil
|
21
21
|
|
22
|
-
[:ad_host, :
|
23
|
-
raise 'Adap requires keys in params ":ad_host", ":
|
22
|
+
[:ad_host, :ad_bind_dn, :ad_user_base_dn, :ad_group_base_dn, :ldap_host, :ldap_bind_dn, :ldap_user_base_dn, :ldap_group_base_dn].each { |k|
|
23
|
+
raise 'Adap requires keys in params ":ad_host", ":ad_bind_dn", ":ad_user_base_dn", ":ad_group_base_dn", ":ldap_host", ":ldap_bind_dn", ":ldap_user_base_dn", ":ldap_group_base_dn"' if !params.key?(k)
|
24
24
|
}
|
25
25
|
|
26
26
|
# List of attributes for user in AD
|
@@ -41,17 +41,17 @@ class Adap
|
|
41
41
|
|
42
42
|
@ad_host = params[:ad_host]
|
43
43
|
@ad_port = (params[:ad_port] ? params[:ad_port] : 389)
|
44
|
-
@
|
45
|
-
@
|
46
|
-
@
|
47
|
-
@ad_auth = (params.has_key?(:ad_password) ? { :method => :simple, :username => @
|
44
|
+
@ad_bind_dn = params[:ad_bind_dn]
|
45
|
+
@ad_user_base_dn = params[:ad_user_base_dn]
|
46
|
+
@ad_group_base_dn = params[:ad_group_base_dn]
|
47
|
+
@ad_auth = (params.has_key?(:ad_password) ? { :method => :simple, :username => @ad_bind_dn, :password => params[:ad_password] } : nil)
|
48
48
|
@ldap_host = params[:ldap_host]
|
49
49
|
@ldap_port = (params[:ldap_port] ? params[:ldap_port] : 389)
|
50
|
-
@
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@
|
54
|
-
@ldap_auth = (params.has_key?(:ldap_password) ? { :method => :simple, :username => @
|
50
|
+
@ldap_bind_dn = params[:ldap_bind_dn]
|
51
|
+
@ldap_base_dn = params[:ldap_base_dn]
|
52
|
+
@ldap_user_base_dn = params[:ldap_user_base_dn]
|
53
|
+
@ldap_group_base_dn = params[:ldap_group_base_dn]
|
54
|
+
@ldap_auth = (params.has_key?(:ldap_password) ? { :method => :simple, :username => @ldap_bind_dn, :password => params[:ldap_password] } : nil )
|
55
55
|
|
56
56
|
# A password-hash algorithm to sync to the LDAP.
|
57
57
|
# Popular LDAP products like Open LDAP usually supports md5({MD5}), sha1({SHA}) and ssha({SSHA}) algorithms.
|
@@ -101,11 +101,11 @@ class Adap
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def get_ad_user_dn(username)
|
104
|
-
"CN=#{username},#{@
|
104
|
+
"CN=#{username},#{@ad_user_base_dn}"
|
105
105
|
end
|
106
106
|
|
107
107
|
def get_ldap_user_dn(username)
|
108
|
-
"uid=#{username},#{@
|
108
|
+
"uid=#{username},#{@ldap_user_base_dn}"
|
109
109
|
end
|
110
110
|
|
111
111
|
def create_ldap_attributes(ad_entry)
|
@@ -342,26 +342,26 @@ class Adap
|
|
342
342
|
# Creating AD ldapsearch filter
|
343
343
|
|
344
344
|
ad_filter = if primary_gid_number == nil then
|
345
|
-
# TODO: Searching with filter `objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@
|
345
|
+
# TODO: Searching with filter `objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@ad_base_dn}` is more accureate.
|
346
346
|
#Net::LDAP::Filter.construct(
|
347
|
-
# "(&(objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@
|
347
|
+
# "(&(objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@ad_base_dn})(member=CN=#{uid},CN=Users,#{@ad_base_dn}))")
|
348
348
|
|
349
349
|
Net::LDAP::Filter.construct(
|
350
|
-
"(&(objectClass=group)(member=CN=#{uid},#{@
|
350
|
+
"(&(objectClass=group)(member=CN=#{uid},#{@ad_user_base_dn}))")
|
351
351
|
else
|
352
|
-
# TODO: Searching with filter `objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@
|
352
|
+
# TODO: Searching with filter `objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@ad_base_dn}` is more accureate.
|
353
353
|
#Net::LDAP::Filter.construct(
|
354
|
-
# "(&(objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@
|
354
|
+
# "(&(objectCategory=CN=Group,CN=Schema,CN=Configuration,#{@ad_base_dn})(|(member=CN=#{uid},CN=Users,#{@ad_base_dn})(gidNumber=#{primary_gid_number})))")
|
355
355
|
|
356
356
|
Net::LDAP::Filter.construct(
|
357
|
-
"(&(objectClass=group)(|(member=CN=#{uid},#{@
|
357
|
+
"(&(objectClass=group)(|(member=CN=#{uid},#{@ad_user_base_dn})(gidNumber=#{primary_gid_number})))")
|
358
358
|
end
|
359
359
|
|
360
360
|
# Get groups from AD
|
361
361
|
# entry = {
|
362
362
|
# :gidnumber => xxx,
|
363
363
|
# }
|
364
|
-
@ad_client.search(:base => @
|
364
|
+
@ad_client.search(:base => @ad_group_base_dn, :filter => ad_filter, :attributes => [:cn, :gidnumber]) do |entry|
|
365
365
|
ad_group_map[entry[:cn].first] = {:gidnumber => entry[:gidnumber]}
|
366
366
|
#ad_group_map[entry[:cn]] = nil
|
367
367
|
end
|
@@ -377,7 +377,7 @@ class Adap
|
|
377
377
|
ldap_filter = Net::LDAP::Filter.construct("(memberUid=#{uid})")
|
378
378
|
|
379
379
|
# Get groups from LDAP
|
380
|
-
@ldap_client.search(:base => @
|
380
|
+
@ldap_client.search(:base => @ldap_group_base_dn, :filter => ldap_filter, :attributes => [:cn]) do |entry|
|
381
381
|
# Capture common name of groups. gidnumber is not necessary for LDAP entry
|
382
382
|
ldap_group_map[entry[:cn].first] = nil
|
383
383
|
end
|
@@ -416,7 +416,7 @@ class Adap
|
|
416
416
|
operation_pool = {}
|
417
417
|
|
418
418
|
ad_group_map.each_key do |key|
|
419
|
-
dn = "cn=#{key},#{@
|
419
|
+
dn = "cn=#{key},#{@ldap_group_base_dn}"
|
420
420
|
# Convert AD entries to LDAP entries to create operation to update LDAP data.
|
421
421
|
operation_pool[dn] = {
|
422
422
|
:cn => key,
|
@@ -426,7 +426,7 @@ class Adap
|
|
426
426
|
end
|
427
427
|
|
428
428
|
ldap_group_map.each_key do |key|
|
429
|
-
operation_pool["cn=#{key},#{@
|
429
|
+
operation_pool["cn=#{key},#{@ldap_group_base_dn}"] = {
|
430
430
|
# :cn and :gidnumber are not necessary
|
431
431
|
:operations => [[:delete, :memberuid, uid]]
|
432
432
|
} if !ad_group_map.has_key?(key)
|
@@ -555,7 +555,7 @@ class Adap
|
|
555
555
|
return nil if uid ==nil
|
556
556
|
primary_gid = nil
|
557
557
|
|
558
|
-
@ad_client.search(:base => "CN=#{uid},CN=Users,#{@
|
558
|
+
@ad_client.search(:base => "CN=#{uid},CN=Users,#{@ad_base_dn}") do |entry|
|
559
559
|
primary_gid = entry[:gidnumber].first
|
560
560
|
end
|
561
561
|
|
data/lib/adap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsutomu Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-01-
|
11
|
+
date: 2025-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- Gemfile
|
66
66
|
- Gemfile.lock
|
67
67
|
- README.md
|
68
|
+
- README_FOR_DEVELOPER.md
|
68
69
|
- Rakefile
|
69
70
|
- adap.gemspec
|
70
71
|
- bin/console
|