eco-helpers 2.0.57 → 2.0.60
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -5
- data/eco-helpers.gemspec +1 -1
- data/lib/eco/api/common/loaders/base.rb +8 -0
- data/lib/eco/api/common/people/default_parsers/boolean_parser.rb +1 -1
- data/lib/eco/api/common/people/entry_factory.rb +1 -0
- data/lib/eco/api/common/session/sftp.rb +8 -2
- data/lib/eco/api/common/version_patches/ecoportal_api/external_details.rb +15 -0
- data/lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb +17 -0
- data/lib/eco/api/common/version_patches/ecoportal_api.rb +1 -0
- data/lib/eco/api/microcases/core_excluded.rb +4 -5
- data/lib/eco/api/microcases/set_supervisor.rb +1 -1
- data/lib/eco/api/organization/login_providers.rb +25 -11
- data/lib/eco/api/organization/tag_tree.rb +8 -0
- data/lib/eco/api/policies/default_policies/99_user_access_policy.rb +31 -8
- data/lib/eco/api/session/config/people.rb +13 -1
- data/lib/eco/api/session/config.rb +5 -0
- data/lib/eco/api/usecases/default_cases/clear_abilities_case.rb +22 -0
- data/lib/eco/api/usecases/default_cases.rb +1 -0
- data/lib/eco/cli/config/default/usecases.rb +4 -0
- data/lib/eco/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 182922a2146b1fa50b0372253a5279eb7d801c4fabd8fcd5303dd6322091c91c
|
4
|
+
data.tar.gz: 5f807f72bc3b6fc7a376bbd43d7a10b99cb5144a606ded5f9eb6817b82740788
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40cb65992b4c9524e025b7f7073f699062cd22008202491c593089b662c9b72ac611eb9cfcccfe14a2f62e1d519eb5dad14fef9389b6e2cbee1798ced0baa54f
|
7
|
+
data.tar.gz: 3e3154fcf629162a1445acbafd96f2d00f8d2a84f77bfb9b2cb68ce6c7f36ed4e8f5fea3cee43e897ac1b50b0210fd14bf9489b0a6708a6bc954093a7b1af3f8
|
data/CHANGELOG.md
CHANGED
@@ -1,17 +1,57 @@
|
|
1
1
|
# Change Log
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
-
## [2.0.
|
4
|
+
## [2.0.60] - 2022-06-xx
|
5
5
|
|
6
6
|
### Added
|
7
|
+
### Changed
|
8
|
+
### Fixed
|
9
|
+
- `Ecoportal::API::V1::PersonDetails.key?` patched
|
10
|
+
|
11
|
+
## [2.0.59] - 2022-06-07
|
12
|
+
|
13
|
+
### Added
|
14
|
+
- `Eco::API::Organization::TagTree#leafs` new method to spot tags with no children.
|
7
15
|
|
8
16
|
### Changed
|
9
|
-
- `Eco::API::
|
10
|
-
-
|
11
|
-
|
17
|
+
- `Eco::API::MicroCases#core_excluded`
|
18
|
+
- when person is `new?`, you should still be able to exclude `filter_tags`
|
19
|
+
|
20
|
+
### Fixed
|
21
|
+
- `Eco::API::Policies::DefaultPolicies::UserAccess`
|
22
|
+
- `-exclude-account` should leave it untouched
|
23
|
+
|
24
|
+
## [2.0.58] - 2022-05-31
|
25
|
+
|
26
|
+
### Added
|
27
|
+
- **Usecase**`Eco::API::UseCases::DefaultCases::ClearAbilitiesTransCase`
|
28
|
+
- invokable with `clear-abilities`
|
29
|
+
- `Eco::API::Session::Config::People` added
|
30
|
+
- `default_login_method` helpers
|
31
|
+
- `Eco::API::Session::Config#default_login_method=` added
|
32
|
+
- `Eco::API::Common::Loaders::Base#abort` method to log an error and raise an exception
|
33
|
+
- **patched** `Ecoportal::API::Internal::Person`
|
34
|
+
- Added a couple of handy helpers: `#replace_doc` and `#replace_original_doc`
|
35
|
+
|
36
|
+
### Changed
|
37
|
+
- `Eco::API::Common::Session::SFTP#move` new parameter `override:` (default: `true`)
|
38
|
+
- If there was an error, it would delete the destination remote file and retry to move the file
|
39
|
+
- upgraded `ecoportal-api-v2` gem to `0.8.28`
|
40
|
+
- `Eco::API::Organization::LoginProviders#login_provider`
|
41
|
+
- Added support to fetch based on type (i.e. password, sso)
|
42
|
+
- `Eco::API::Policies::DefaultPolicies::UserAccess`
|
43
|
+
- Added support for `config.default_login_method`
|
12
44
|
|
13
45
|
### Fixed
|
46
|
+
- `Eco::API::Common::People::EntryFactory`
|
47
|
+
- Max allowed enconding errors was not working (it was just fixing all).
|
48
|
+
|
49
|
+
## [2.0.57] - 2022-04-29
|
14
50
|
|
51
|
+
### Changed
|
52
|
+
- `Eco::API::UseCases::DefaultCases::HrisCase`
|
53
|
+
- Made it so the `leavers` batch runs first
|
54
|
+
- This aims to prevent some errors such as `cyclic supervisor` or `email already taken`
|
15
55
|
|
16
56
|
## [2.0.56] - 2022-04-25
|
17
57
|
|
@@ -43,7 +83,6 @@ All notable changes to this project will be documented in this file.
|
|
43
83
|
### Added
|
44
84
|
- `Eco::API::UseCases::DefaultCases::Samples::Sftp` should tell where the files went in the local.
|
45
85
|
|
46
|
-
|
47
86
|
## [2.0.53] - 2022-04-04
|
48
87
|
|
49
88
|
### Added
|
data/eco-helpers.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency "redcarpet", ">= 3.5.1", "< 3.6"
|
32
32
|
|
33
33
|
spec.add_dependency 'ecoportal-api', '>= 0.8.5', '< 0.9'
|
34
|
-
spec.add_dependency 'ecoportal-api-v2', '>= 0.8.
|
34
|
+
spec.add_dependency 'ecoportal-api-v2', '>= 0.8.28', '< 0.9'
|
35
35
|
spec.add_dependency 'aws-sdk-s3', '>= 1.83.0', '< 2'
|
36
36
|
spec.add_dependency 'aws-sdk-ses', '>= 1.36.0', '< 2'
|
37
37
|
spec.add_dependency 'dotenv', '>= 2.7.6', '< 2.8'
|
@@ -56,8 +56,14 @@ module Eco
|
|
56
56
|
end
|
57
57
|
|
58
58
|
# @see Net::SFTP::Session#rename
|
59
|
-
def move(fullname_source, fullname_dest, flags=0x0001, &callback)
|
60
|
-
|
59
|
+
def move(fullname_source, fullname_dest, flags=0x0001, override: true, &callback)
|
60
|
+
begin
|
61
|
+
sftp_session.rename!(fullname_source, fullname_dest, flags, &callback)
|
62
|
+
rescue Net::SFTP::StatusException => e
|
63
|
+
raise unless override
|
64
|
+
sftp_session.remove(fullname_dest)
|
65
|
+
sftp_session.rename!(fullname_source, fullname_dest, flags, &callback)
|
66
|
+
end
|
61
67
|
end
|
62
68
|
|
63
69
|
# Downloads the files specified to a local folder
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ecoportal
|
2
|
+
module API
|
3
|
+
class V1
|
4
|
+
class PersonDetails
|
5
|
+
# Checks if an `id` or `alt_id` exists
|
6
|
+
# @param id [String] the `id` or the `alt_id` of the target field.
|
7
|
+
# @return [Boolean] `true` if it exists, `false` otherwise
|
8
|
+
def key?(id)
|
9
|
+
@fields_by_id or index_fields
|
10
|
+
@fields_by_id.key?(id) || @fields_by_alt_id.key?(id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -14,6 +14,23 @@ module Ecoportal
|
|
14
14
|
account && !ref_doc["account"]
|
15
15
|
end
|
16
16
|
|
17
|
+
# It replaces `doc` by `new_doc`
|
18
|
+
# @return [Hash] `doc` before change
|
19
|
+
def replace_doc!(new_doc)
|
20
|
+
raise UnlinkedModel.new(from: "#{self.class}#replace_doc", key: _key) unless linked?
|
21
|
+
@doc.tap do
|
22
|
+
@doc = new_doc
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# It replaces `original_doc` by `new_doc`
|
27
|
+
# @return [Hash] `original_doc` before change
|
28
|
+
def replace_original_doc!(new_doc)
|
29
|
+
raise UnlinkedModel.new(from: "#{self.class}#replace_original_doc", key: _key) unless linked?
|
30
|
+
@original_doc.tap do
|
31
|
+
@original_doc = new_doc
|
32
|
+
end
|
33
|
+
end
|
17
34
|
end
|
18
35
|
end
|
19
36
|
end
|
@@ -7,12 +7,11 @@ module Eco
|
|
7
7
|
# @return [Array<String>] the core parameters that should not be included.
|
8
8
|
def core_excluded(person, options)
|
9
9
|
["supervisor_id"].tap do |core_excluded|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
core_excluded.concat(exclusions)
|
10
|
+
can_exclude = person.new?? ["filter_tags"] : ["name", "external_id", "email", "filter_tags"]
|
11
|
+
exclusions = can_exclude.select do |attr|
|
12
|
+
options.dig(:exclude, attr.to_sym)
|
15
13
|
end
|
14
|
+
core_excluded.concat(exclusions)
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -3,7 +3,7 @@ module Eco
|
|
3
3
|
class MicroCases
|
4
4
|
# Unique access point to set the `supervisor_id` value on a person.
|
5
5
|
# @note
|
6
|
-
# - It prevents the basic cyclic supervisor case (supervisor to be supervisor of
|
6
|
+
# - It prevents the basic cyclic supervisor case (supervisor to be supervisor of themselves)
|
7
7
|
# @param person [Ecoportal::API::V1::Person] the person we want to update, carrying the changes to be done.
|
8
8
|
# @param sup_id [nil, String] the **supervisor id** we should set on the `person`.
|
9
9
|
# @param people [Eco::API::Organization::People] _People_ involved in the current update.
|
@@ -56,27 +56,41 @@ module Eco
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
59
|
+
# @param id_name_type [String, Symbol]
|
60
|
+
# - `String` to refer to the login provider `name` or `id`
|
61
|
+
# - `Symbol` to refer to the login providr type (i.e. `:password`, `:sso`)
|
62
|
+
def login_provider(id_name_type)
|
63
|
+
@by_id[login_provider_id(id_name_type)]
|
61
64
|
end
|
62
65
|
|
63
66
|
private
|
64
67
|
|
65
|
-
def
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
def login_provider_id(value)
|
69
|
+
case value
|
70
|
+
when Symbol
|
71
|
+
value = value.to_s.downcase.to_sym
|
72
|
+
@by_type[value]&.id
|
73
|
+
when String
|
74
|
+
value = value.strip.downcase
|
75
|
+
@by_name[value]&.id || @by_id[value]&.id
|
76
|
+
end
|
71
77
|
end
|
72
78
|
|
73
79
|
def init_caches
|
74
80
|
return if @caches_init
|
75
|
-
|
76
|
-
@
|
81
|
+
enabled_lps = self.select {|lp| lp.enabled_for != "disabled"}
|
82
|
+
@by_id = enabled_lps.each_with_object({}) do |lp, hash|
|
83
|
+
hash[lp.id.downcase] = lp
|
84
|
+
end
|
85
|
+
@by_name = enabled_lps.each_with_object({}) do |lp, hash|
|
86
|
+
hash[lp.name.downcase] = lp
|
87
|
+
end
|
88
|
+
@by_type = enabled_lps.each_with_object({}) do |lp, hash|
|
89
|
+
hash[lp.type.downcase.to_sym] = lp
|
90
|
+
hash[:sso] = lp if (!hash.key?(:sso) && lp.type == "saml")
|
91
|
+
end
|
77
92
|
@caches_init = true
|
78
93
|
end
|
79
|
-
|
80
94
|
end
|
81
95
|
end
|
82
96
|
end
|
@@ -124,6 +124,14 @@ module Eco
|
|
124
124
|
subtags.include?(key&.upcase)
|
125
125
|
end
|
126
126
|
|
127
|
+
# Returns all the tags with no children
|
128
|
+
# @return [Array<String>]
|
129
|
+
def leafs
|
130
|
+
tags.select do |tag|
|
131
|
+
node(tag).children_count == 0
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
127
135
|
# Verifies if a tag exists in the tree.
|
128
136
|
# @param key [String] tag to verify.
|
129
137
|
# @return [Boolean]
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# Default policy:
|
2
|
+
# 1. Removes the account if the email is empty
|
3
|
+
# 2. Adds the defined default_usergroup if user does not have policy groups
|
4
|
+
# 3. Adds the defined default_login_method if update includes empty login methods
|
1
5
|
class Eco::API::Policies::DefaultPolicies::UserAccess < Eco::API::Common::Loaders::Policy
|
2
6
|
name "default-user-access"
|
3
7
|
|
@@ -10,8 +14,13 @@ class Eco::API::Policies::DefaultPolicies::UserAccess < Eco::API::Common::Loader
|
|
10
14
|
self.account_removed_count = 0
|
11
15
|
|
12
16
|
people.each do |person|
|
13
|
-
remove_account_when_no_email!(person)
|
14
|
-
|
17
|
+
remove_account_when_no_email!(person) if person.email.to_s.empty?
|
18
|
+
next unless account = person.account
|
19
|
+
next if options.dig(:exclude, :account)
|
20
|
+
if account.policy_group_ids.empty? && def_pg
|
21
|
+
account.policy_group_ids = [def_pg]
|
22
|
+
end
|
23
|
+
add_login_method_if_applicable!(account)
|
15
24
|
end
|
16
25
|
|
17
26
|
warn_account_removal!
|
@@ -39,20 +48,34 @@ class Eco::API::Policies::DefaultPolicies::UserAccess < Eco::API::Common::Loader
|
|
39
48
|
return !!person.original_doc["account"]
|
40
49
|
end
|
41
50
|
|
42
|
-
def
|
43
|
-
|
51
|
+
def add_login_method_if_applicable!(account)
|
52
|
+
return unless account.as_update.key?("login_provider_ids")
|
53
|
+
if account.login_provider_ids.empty? && def_login
|
54
|
+
account.login_provider_ids = [def_login]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def def_pg
|
59
|
+
@def_pg ||= policy_groups.to_id(default_group)
|
44
60
|
end
|
45
61
|
|
46
|
-
def
|
47
|
-
@
|
62
|
+
def def_login
|
63
|
+
@def_login ||= login_providers.to_id(default_login)
|
48
64
|
end
|
49
65
|
|
50
66
|
def default_group
|
51
|
-
|
67
|
+
config.people.default_usergroup
|
68
|
+
end
|
69
|
+
|
70
|
+
def default_login
|
71
|
+
config.people.default_login_method
|
72
|
+
end
|
73
|
+
|
74
|
+
def login_providers
|
75
|
+
session.login_providers
|
52
76
|
end
|
53
77
|
|
54
78
|
def policy_groups
|
55
79
|
session.policy_groups
|
56
80
|
end
|
57
|
-
|
58
81
|
end
|
@@ -86,7 +86,19 @@ module Eco
|
|
86
86
|
def default_schema?
|
87
87
|
!!self["default_schema"]
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
|
+
def default_login_method=(name)
|
91
|
+
self["default_login_method"] = name
|
92
|
+
end
|
93
|
+
|
94
|
+
def default_login_method
|
95
|
+
self["default_login_method"]
|
96
|
+
end
|
97
|
+
|
98
|
+
def default_login_method?
|
99
|
+
!!self["default_login_method"]
|
100
|
+
end
|
101
|
+
|
90
102
|
# @return [Hash] with defined pairs format `key` and Person parsers.
|
91
103
|
def parsers
|
92
104
|
self["parsers"] ||= {}
|
@@ -297,6 +297,11 @@ module Eco
|
|
297
297
|
people.default_schema = name
|
298
298
|
end
|
299
299
|
|
300
|
+
# Set the **default login method** that users should acquire.
|
301
|
+
def default_login_method=(name)
|
302
|
+
people.default_login_method = name
|
303
|
+
end
|
304
|
+
|
300
305
|
# @see Eco::API::Session::Config::People
|
301
306
|
# @param (see Eco::API::Session::Config::People)
|
302
307
|
# @return [Eco::API::Common::People::PersonParser] parser/serializer for the defined `format`.
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Eco::API::UseCases::DefaultCases::ClearAbilitiesTransCase < Eco::API::Common::Loaders::UseCase
|
2
|
+
name "clear-abilities"
|
3
|
+
type :transform
|
4
|
+
|
5
|
+
def main(people, session, options, usecase)
|
6
|
+
clear_abilities(people.users, session, options, usecase)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def clear_abilities(users, session, options, usecase)
|
12
|
+
update = session.new_job("main", "clear-abilities", :update, usecase, :account)
|
13
|
+
users.each do |person|
|
14
|
+
person.account.permissions_custom = nil_abilities.dup
|
15
|
+
update.add(person)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def nil_abilities
|
20
|
+
@nil_abilities ||= Eco::API::Organization::PresetsFactory.all_abilities
|
21
|
+
end
|
22
|
+
end
|
@@ -15,6 +15,7 @@ require_relative 'default_cases/analyse_people_case'
|
|
15
15
|
require_relative 'default_cases/append_usergroups_case'
|
16
16
|
require_relative 'default_cases/change_email_case'
|
17
17
|
require_relative 'default_cases/clean_unknown_tags_case'
|
18
|
+
require_relative 'default_cases/clear_abilities_case'
|
18
19
|
require_relative 'default_cases/codes_to_tags_case'
|
19
20
|
require_relative 'default_cases/create_case'
|
20
21
|
require_relative 'default_cases/create_details_case'
|
@@ -196,6 +196,10 @@ ASSETS.cli.config do |cnf|
|
|
196
196
|
options.deep_merge!(force: {invite: true})
|
197
197
|
end
|
198
198
|
|
199
|
+
desc = "Clears the `permissions_custom`, provided that Policy Group abilities alone apply."
|
200
|
+
desc += " Please be mindfull if you use this option (there may be users that have been upgraded in ad-hoc manner)."
|
201
|
+
cases.add("-clear-abilities", :transform, desc, case_name: "clear-abilities")
|
202
|
+
|
199
203
|
desc = "Deletes everybody that has been filtered from the people manager"
|
200
204
|
cases.add("-delete", :transform, desc, case_name: "delete")
|
201
205
|
desc = "Deletes the people specified in the input data"
|
data/lib/eco/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eco-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.60
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura
|
@@ -136,7 +136,7 @@ dependencies:
|
|
136
136
|
requirements:
|
137
137
|
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0.8.
|
139
|
+
version: 0.8.28
|
140
140
|
- - "<"
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0.9'
|
@@ -146,7 +146,7 @@ dependencies:
|
|
146
146
|
requirements:
|
147
147
|
- - ">="
|
148
148
|
- !ruby/object:Gem::Version
|
149
|
-
version: 0.8.
|
149
|
+
version: 0.8.28
|
150
150
|
- - "<"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.9'
|
@@ -437,6 +437,7 @@ files:
|
|
437
437
|
- lib/eco/api/common/session/sftp.rb
|
438
438
|
- lib/eco/api/common/version_patches.rb
|
439
439
|
- lib/eco/api/common/version_patches/ecoportal_api.rb
|
440
|
+
- lib/eco/api/common/version_patches/ecoportal_api/external_details.rb
|
440
441
|
- lib/eco/api/common/version_patches/ecoportal_api/external_person.rb
|
441
442
|
- lib/eco/api/common/version_patches/ecoportal_api/internal_person.rb
|
442
443
|
- lib/eco/api/common/version_patches/exception.rb
|
@@ -528,6 +529,7 @@ files:
|
|
528
529
|
- lib/eco/api/usecases/default_cases/append_usergroups_case.rb
|
529
530
|
- lib/eco/api/usecases/default_cases/change_email_case.rb
|
530
531
|
- lib/eco/api/usecases/default_cases/clean_unknown_tags_case.rb
|
532
|
+
- lib/eco/api/usecases/default_cases/clear_abilities_case.rb
|
531
533
|
- lib/eco/api/usecases/default_cases/codes_to_tags_case.rb
|
532
534
|
- lib/eco/api/usecases/default_cases/create_case.rb
|
533
535
|
- lib/eco/api/usecases/default_cases/create_details_case.rb
|