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.
@@ -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
@@ -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