keycloak-ruby-client 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d9e6755953b3b7c1e98116ebeeb55107b54f058
4
- data.tar.gz: 21ab42c066be34c26e4077a7d10a9884e3f387a5
3
+ metadata.gz: 3cb38b642619a3555b01fb376a6339a3d549c243
4
+ data.tar.gz: 925ca9ad46a8632213681fdc822ed0c029773df5
5
5
  SHA512:
6
- metadata.gz: b5192d922842967e6586dfee0b88a24d5c99e09dcb7d2a75e76136ac5c39ab90479cf23fc6a71acb9938c58d893a05a7b028c6f7b473ab5469f3e58d6296a4ad
7
- data.tar.gz: c21b0568ce50e660a36b3f7bf905707523f4bb784bafcaba7bfd01ae1e41a0f23c30f9030da1ea700713b020913b6ac4ce3b6d2a5fdf555b6d075bcb9daa2478
6
+ metadata.gz: 7741aceb16860d9931dbebc11d5e2ce10c688c362a5574232bf9a4b141020f72f20f53bc9c33ab617e5d1c24b81ba87e9d2074c5a4a653aea8eb1980b1ad9f4a
7
+ data.tar.gz: 68a48f33549ff151c059acdf768233c6246d23ac4087a14bed8084b3a4fb269cf88a81b5ac2329d8f69d6b8386af66102b3c4be033e5210ad13817139b8f7f52
data/README.md CHANGED
@@ -45,7 +45,7 @@ Then you can authenticate your keycloak JWT token:
45
45
 
46
46
  ```ruby
47
47
  token = "your_bearer_token"
48
- keycloak_token = .parse_access_token(token) # an instance of Keycloak::AccessToken
48
+ keycloak_token = Keycloak::Realm.shundao_admin.parse_access_token(token) # an instance of Keycloak::AccessToken
49
49
  raise CanCan::AccessDenied if keycloak_token.expired? || !keycloak_token.has_role?("admin")
50
50
 
51
51
  # authentication succeeded
@@ -100,6 +100,13 @@ user_rep = Keycloak::Model::UserRepresentation.new({
100
100
  })
101
101
  mapping_roles = role_store.map { |entry| {id: entry[1].id , name: entry[1].name} }
102
102
  client.create_user(user_rep, mapping_roles)
103
+
104
+ # NOTE: It's worth noting that `to_a` may be costly if you have a large dataset of users,
105
+ # which could cause out-of-memory, but using `each` instead of `to_a` could save you if
106
+ # you really want traverse all users.
107
+ client.find_users.to_a.each { |user| puts user.to_json } # possibly out of memory
108
+ client.find_users.each { |user| puts user.to_json } # no risk of out of memory
109
+
103
110
  ```
104
111
 
105
112
  ### Connect your rails user model with keycloak user entity:
data/lib/keycloak.rb CHANGED
@@ -8,3 +8,4 @@ require_relative 'keycloak/scalar'
8
8
  require_relative 'keycloak/api'
9
9
  require_relative 'keycloak/client'
10
10
  require_relative 'keycloak/model'
11
+ require_relative 'keycloak/utils'
@@ -28,13 +28,18 @@ module Keycloak
28
28
  end
29
29
 
30
30
  # see https://www.keycloak.org/docs-api/6.0/rest-api/index.html#_users_resource for params details
31
+ #
32
+ # @return [Keycloak::Utils::RepresentationIterator] iterator of users
31
33
  def find_users(params = {})
32
- res = JSON.parse(get(user_resources_url, params: params))
33
- res.map { |user| Model::UserRepresentation.new user }
34
+ Utils::RepresentationIterator.new(self, params) do
35
+ res = JSON.parse(get(user_resources_url, params: params))
36
+ res.map { |user| Model::UserRepresentation.new user }
37
+ end
34
38
  end
35
39
 
40
+ # @return [Keycloak::Model::UserRepresentation] user representation
36
41
  def find_user_by_username(username)
37
- find_users({username: username})[0]
42
+ find_users({username: username}).to_a[0]
38
43
  end
39
44
 
40
45
  end
@@ -0,0 +1 @@
1
+ require 'keycloak/utils/representation_iterator'
@@ -0,0 +1,62 @@
1
+ module Keycloak
2
+ module Utils
3
+ # RepresentationIterator provides ability to enable lazy loading if necessary.
4
+ #
5
+ # NOTE: It's worth noting that `to_a` may be costly if you have a large dataset of users,
6
+ # which could cause out-of-memory, but using `each` instead of `to_a` could save you if
7
+ # you really want traverse all users.
8
+ class RepresentationIterator
9
+ DEFAULT_PER_PAGE = 30
10
+
11
+ include Enumerable
12
+
13
+ attr_accessor :first, :per_page, :till
14
+ attr_reader :cursor
15
+
16
+ def initialize(client, params, per_page: DEFAULT_PER_PAGE, till: nil, &block)
17
+ @client = client
18
+ @params = params
19
+ @params[:first] ||= 0
20
+ @first = @params[:first]
21
+ @till = @params[:max] || till
22
+ @per_page = per_page
23
+ @block = block
24
+
25
+ @data = []
26
+ @cursor = 0
27
+ end
28
+
29
+ def first=(num)
30
+ @first = num
31
+ @cursor = 0
32
+ @data = []
33
+ end
34
+
35
+ def each
36
+ while true
37
+ return if at_end?
38
+ _fetch_next if @data.empty? || @cursor >= @data.size
39
+ return if @data.empty?
40
+
41
+ yield @data[@cursor]
42
+ @cursor += 1
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def _fetch_next
49
+ @params[:first] = @first
50
+ @params[:max] = @per_page
51
+ @data = @client.instance_eval(&@block)
52
+
53
+ @first += @per_page
54
+ @cursor = 0
55
+ end
56
+
57
+ def at_end?
58
+ @till && @till <= @params[:first] + @cursor
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module Keycloak
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keycloak-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fuxin Hao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-20 00:00:00.000000000 Z
11
+ date: 2019-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -117,6 +117,8 @@ files:
117
117
  - lib/keycloak/scalar.rb
118
118
  - lib/keycloak/scalar/array_type.rb
119
119
  - lib/keycloak/user_entity.rb
120
+ - lib/keycloak/utils.rb
121
+ - lib/keycloak/utils/representation_iterator.rb
120
122
  - lib/keycloak/version.rb
121
123
  homepage: https://github.com/FX-HAO/keycloak-ruby-client
122
124
  licenses: