audiences 2.0.2 → 3.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.
- checksums.yaml +4 -4
- data/app/assets/builds/audiences-ujs.js +109 -300
- data/app/models/audiences/external_user.rb +6 -2
- data/docs/CHANGELOG.md +14 -0
- data/lib/audiences/engine.rb +5 -4
- data/lib/audiences/integrations/delete_groups_observer.rb +43 -0
- data/lib/audiences/integrations/delete_users_observer.rb +39 -0
- data/lib/audiences/integrations/observer_base.rb +36 -0
- data/lib/audiences/integrations/upsert_groups_observer.rb +71 -0
- data/lib/audiences/integrations/upsert_users_observer.rb +93 -0
- data/lib/audiences/integrations.rb +15 -0
- data/lib/audiences/version.rb +1 -1
- data/lib/audiences.rb +3 -3
- metadata +8 -13
- data/app/events/audiences/application_event.rb +0 -7
- data/app/events/audiences/persisted_resource_event.rb +0 -10
- data/lib/audiences/scim/field_mapping.rb +0 -77
- data/lib/audiences/scim/observer_base.rb +0 -8
- data/lib/audiences/scim/patch_groups_observer.rb +0 -51
- data/lib/audiences/scim/patch_op.rb +0 -42
- data/lib/audiences/scim/patch_users_observer.rb +0 -38
- data/lib/audiences/scim/scim_data.rb +0 -31
- data/lib/audiences/scim/upsert_groups_observer.rb +0 -41
- data/lib/audiences/scim/upsert_users_observer.rb +0 -62
- data/lib/audiences/scim.rb +0 -15
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Audiences
|
|
4
|
-
module Scim
|
|
5
|
-
class ScimData
|
|
6
|
-
def replace(object, key, value) = _replace(object.data || {}, key.split("."), value)
|
|
7
|
-
|
|
8
|
-
def add(object, key, val)
|
|
9
|
-
value = object.data&.dig(*key.split(".")) || []
|
|
10
|
-
replace(key, [...value, val])
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def remove(object, key, val)
|
|
14
|
-
values = object.data&.dig(*key.split(".")) || []
|
|
15
|
-
to_remove = [val].flatten.pluck("value")
|
|
16
|
-
replace(key, values&.reject { |value| to_remove.include?(value["value"]) })
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
def _replace(data, key, val)
|
|
22
|
-
first_key, *rest_keys = key
|
|
23
|
-
if rest_keys.empty?
|
|
24
|
-
data[first_key] = val
|
|
25
|
-
else
|
|
26
|
-
_replace(data[first_key] ||= {}, rest_keys, val)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Audiences
|
|
4
|
-
module Scim
|
|
5
|
-
class UpsertGroupsObserver < ObserverBase
|
|
6
|
-
Audiences.config.group_types.each do |group_type|
|
|
7
|
-
subscribe_to "two_percent.scim.create.#{group_type}"
|
|
8
|
-
subscribe_to "two_percent.scim.replace.#{group_type}"
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def process
|
|
12
|
-
Audiences.logger.info "#{upsert_action} group #{new_display_name} (#{new_external_id})"
|
|
13
|
-
|
|
14
|
-
group.update! external_id: new_external_id, display_name: new_display_name, active: new_active
|
|
15
|
-
Audiences::PersistedResourceEvent.create(resource_type: "Groups", params: event_payload.params)
|
|
16
|
-
rescue => e
|
|
17
|
-
Audiences.logger.error e
|
|
18
|
-
raise
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def upsert_action = group.persisted? ? "Updating" : "Creating"
|
|
24
|
-
|
|
25
|
-
def new_external_id = event_payload.params["externalId"]
|
|
26
|
-
|
|
27
|
-
def new_display_name = event_payload.params["displayName"]
|
|
28
|
-
|
|
29
|
-
def new_active
|
|
30
|
-
active = event_payload.params.dig("urn:ietf:params:scim:schemas:extension:authservice:2.0:Group", "active")
|
|
31
|
-
active.nil? || active
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def group
|
|
35
|
-
@group ||= Audiences::Group.where(resource_type: event_payload.resource,
|
|
36
|
-
scim_id: event_payload.params["id"])
|
|
37
|
-
.first_or_initialize
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Audiences
|
|
4
|
-
module Scim
|
|
5
|
-
class UpsertUsersObserver < ObserverBase
|
|
6
|
-
subscribe_to "two_percent.scim.create.Users"
|
|
7
|
-
subscribe_to "two_percent.scim.replace.Users"
|
|
8
|
-
|
|
9
|
-
def process
|
|
10
|
-
log_upsert_action
|
|
11
|
-
external_user.update! updated_attributes
|
|
12
|
-
return unless valid_group_types?
|
|
13
|
-
|
|
14
|
-
Audiences::PersistedResourceEvent.create(resource_type: "Users", params: event_payload.params)
|
|
15
|
-
rescue => e
|
|
16
|
-
Audiences.logger.error e
|
|
17
|
-
raise
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
def log_upsert_action
|
|
23
|
-
Audiences.logger.info "#{upsert_action} user #{event_payload.params['displayName']} (#{scim_id})"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def scim_id = event_payload.params["id"]
|
|
27
|
-
|
|
28
|
-
def external_user
|
|
29
|
-
@external_user ||= Audiences::ExternalUser.where(scim_id: scim_id).first_or_initialize
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def upsert_action = external_user.persisted? ? "Updating" : "Creating"
|
|
33
|
-
|
|
34
|
-
def updated_attributes
|
|
35
|
-
{
|
|
36
|
-
user_id: event_payload.params["externalId"],
|
|
37
|
-
display_name: event_payload.params["displayName"],
|
|
38
|
-
picture_urls: new_picture_urls,
|
|
39
|
-
data: event_payload.params,
|
|
40
|
-
groups: new_groups,
|
|
41
|
-
active: event_payload.params.fetch("active", false),
|
|
42
|
-
}
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def new_picture_urls = event_payload.params["photos"]&.pluck("value")
|
|
46
|
-
|
|
47
|
-
def new_groups
|
|
48
|
-
event_payload.params.fetch("groups", []).filter_map do |group|
|
|
49
|
-
Audiences::Group.find_by(scim_id: group["value"])
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def valid_group_types?
|
|
54
|
-
missing = external_user.missing_group_types
|
|
55
|
-
return true if missing.empty?
|
|
56
|
-
|
|
57
|
-
Audiences.logger.warn "Provisioning event for user #{scim_id} with missing group types: #{missing.join(', ')}"
|
|
58
|
-
false
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
data/lib/audiences/scim.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Audiences
|
|
4
|
-
module Scim
|
|
5
|
-
autoload :ScimData, "audiences/scim/scim_data"
|
|
6
|
-
autoload :FieldMapping, "audiences/scim/field_mapping"
|
|
7
|
-
autoload :PatchOp, "audiences/scim/patch_op"
|
|
8
|
-
|
|
9
|
-
autoload :ObserverBase, "audiences/scim/observer_base"
|
|
10
|
-
autoload :PatchGroupsObserver, "audiences/scim/patch_groups_observer"
|
|
11
|
-
autoload :PatchUsersObserver, "audiences/scim/patch_users_observer"
|
|
12
|
-
autoload :UpsertGroupsObserver, "audiences/scim/upsert_groups_observer"
|
|
13
|
-
autoload :UpsertUsersObserver, "audiences/scim/upsert_users_observer"
|
|
14
|
-
end
|
|
15
|
-
end
|