eco-helpers 2.0.57 → 2.0.58

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f311bacb1d039da9637ae6eb6fc33f709aef06e6647591a6f9dd981d010a424
4
- data.tar.gz: fe3056df3a19353c4b915440f3ba26bb181e8b89aa8570e4a356b8aa926e71b7
3
+ metadata.gz: b6c0a28540154a0421d36734a7b0a7f1d7e52b54082390804f696968b8a24d7c
4
+ data.tar.gz: 5f046e1b94bca34335551f14d5be2e7082ee91d131200609a8d0d517b0342334
5
5
  SHA512:
6
- metadata.gz: b0a0506303240b5a3e7f1b52865cbf142d2b50a4adbd64ab062f607df73502c49ecf37df659fc549676922740f118cfbcf0abf336876ba49423cf8c087ff04a5
7
- data.tar.gz: 2f5b1775eb19b2c8ed4ebf4539e06418fae5d5c0b969d9ee5f24f65a66fe8819162023e76a60409d63ac9869649dec35713981604b66e15097ea41ec47a4f3af
6
+ metadata.gz: 175e05b1799c9231570b9cd69cd25aafbef5f3db65e48be20c070fef5535d7679c04f032ab885d1cad2ea85fa1191b93d151d903b880821b5d2ad4db482d71ca
7
+ data.tar.gz: 4fa3671f1519440527d99aa4123aa287642cd8f1e535bba0a0a0201d1a23b15a902d4beca2e5994826746d28fd1b0e3e21fcdb647d3eac462feb067b9434552d
data/CHANGELOG.md CHANGED
@@ -1,18 +1,38 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## [2.0.57] - 2022-04-xx
4
+ ## [2.0.57] - 2022-05-31
5
5
 
6
6
  ### Added
7
+ - **Usecase**`Eco::API::UseCases::DefaultCases::ClearAbilitiesTransCase`
8
+ - invokable with `clear-abilities`
9
+ - `Eco::API::Session::Config::People` added
10
+ - `default_login_method` helpers
11
+ - `Eco::API::Session::Config#default_login_method=` added
12
+ - `Eco::API::Common::Loaders::Base#abort` method to log an error and raise an exception
13
+ - **patched** `Ecoportal::API::Internal::Person`
14
+ - Added a couple of handy helpers: `#replace_doc` and `#replace_original_doc`
15
+
16
+ ### Changed
17
+ - `Eco::API::Common::Session::SFTP#move` new parameter `override:` (default: `true`)
18
+ - If there was an error, it would delete the destination remote file and retry to move the file
19
+ - upgraded `ecoportal-api-v2` gem to `0.8.28`
20
+ - `Eco::API::Organization::LoginProviders#login_provider`
21
+ - Added support to fetch based on type (i.e. password, sso)
22
+ - `Eco::API::Policies::DefaultPolicies::UserAccess`
23
+ - Added support for `config.default_login_method`
24
+
25
+ ### Fixed
26
+ - `Eco::API::Common::People::EntryFactory`
27
+ - Max allowed enconding errors was not working (it was just fixing all).
28
+
29
+ ## [2.0.57] - 2022-04-29
7
30
 
8
31
  ### Changed
9
32
  - `Eco::API::UseCases::DefaultCases::HrisCase`
10
33
  - Made it so the `leavers` batch runs first
11
34
  - This aims to prevent some errors such as `cyclic supervisor` or `email already taken`
12
35
 
13
- ### Fixed
14
-
15
-
16
36
  ## [2.0.56] - 2022-04-25
17
37
 
18
38
  ### Added
@@ -43,7 +63,6 @@ All notable changes to this project will be documented in this file.
43
63
  ### Added
44
64
  - `Eco::API::UseCases::DefaultCases::Samples::Sftp` should tell where the files went in the local.
45
65
 
46
-
47
66
  ## [2.0.53] - 2022-04-04
48
67
 
49
68
  ### 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.27', '< 0.9'
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'
@@ -51,6 +51,14 @@ module Eco
51
51
  session.micro
52
52
  end
53
53
 
54
+ def abort(msg, raising: true)
55
+ logger.error(msg)
56
+ if raising
57
+ raise msg
58
+ else
59
+ exit(1)
60
+ end
61
+ end
54
62
  end
55
63
  end
56
64
  end
@@ -11,7 +11,7 @@ class Eco::API::Common::People::DefaultParsers::BooleanParser < Eco::API::Common
11
11
 
12
12
  private
13
13
 
14
- def truthy (value)
14
+ def truthy(value)
15
15
  %w[true y yes x].include?(value.to_s.strip.downcase)
16
16
  end
17
17
 
@@ -208,6 +208,7 @@ module Eco
208
208
  logger.error("There were more than 5 encoding errors in the file '#{file}'.")
209
209
  return content
210
210
  else
211
+ tolerance -= 1
211
212
  logger.error("Encoding problem in file '#{file}': '#{replacement}'.")
212
213
  replacement
213
214
  end
@@ -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
- sftp_session.rename!(fullname_source, fullname_dest, flags, &callback)
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
@@ -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
@@ -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 hemselves)
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
- def login_provider(id_name)
60
- @by_id.fetch(login_provider_id(id_name), nil)
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 login_provider_name(id_name)
66
- (@by_id[id_name] || @by_name[id_name&.downcase])&.name&.downcase
67
- end
68
-
69
- def login_provider_id(id_name)
70
- (@by_name[id_name&.downcase] || @by_id[id_name])&.id
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
- @by_id = self.map { |pg| [pg.id, pg] }.to_h
76
- @by_name = self.map { |pg| [pg.name&.downcase, pg] }.to_h
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
@@ -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,12 @@ 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) if person.email.to_s.empty?
14
- person.account.policy_group_ids = defid if no_policy_group_ids?(person)
17
+ remove_account_when_no_email!(person) if person.email.to_s.empty?
18
+ next unless account = person.account
19
+ if account.policy_group_ids.empty? && def_pg
20
+ account.policy_group_ids = [def_pg]
21
+ end
22
+ add_login_method_if_applicable!(account)
15
23
  end
16
24
 
17
25
  warn_account_removal!
@@ -39,20 +47,34 @@ class Eco::API::Policies::DefaultPolicies::UserAccess < Eco::API::Common::Loader
39
47
  return !!person.original_doc["account"]
40
48
  end
41
49
 
42
- def no_policy_group_ids?(person)
43
- (account = person.account) && account.policy_group_ids.empty?
50
+ def add_login_method_if_applicable!(account)
51
+ return unless account.as_update.key?("login_provider_ids")
52
+ if account.login_provider_ids.empty? && def_login
53
+ account.login_provider_ids = [def_login]
54
+ end
55
+ end
56
+
57
+ def def_pg
58
+ @def_pg ||= policy_groups.to_id(default_group)
44
59
  end
45
60
 
46
- def defid
47
- @defid ||= policy_groups.to_id([default_group]).compact
61
+ def def_login
62
+ @def_login ||= login_providers.to_id(default_login)
48
63
  end
49
64
 
50
65
  def default_group
51
- session.config.people.default_usergroup
66
+ config.people.default_usergroup
67
+ end
68
+
69
+ def default_login
70
+ config.people.default_login_method
71
+ end
72
+
73
+ def login_providers
74
+ session.login_providers
52
75
  end
53
76
 
54
77
  def policy_groups
55
78
  session.policy_groups
56
79
  end
57
-
58
80
  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
@@ -1,3 +1,3 @@
1
1
  module Eco
2
- VERSION = "2.0.57"
2
+ VERSION = "2.0.58"
3
3
  end
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.57
4
+ version: 2.0.58
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.27
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.27
149
+ version: 0.8.28
150
150
  - - "<"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'
@@ -528,6 +528,7 @@ files:
528
528
  - lib/eco/api/usecases/default_cases/append_usergroups_case.rb
529
529
  - lib/eco/api/usecases/default_cases/change_email_case.rb
530
530
  - lib/eco/api/usecases/default_cases/clean_unknown_tags_case.rb
531
+ - lib/eco/api/usecases/default_cases/clear_abilities_case.rb
531
532
  - lib/eco/api/usecases/default_cases/codes_to_tags_case.rb
532
533
  - lib/eco/api/usecases/default_cases/create_case.rb
533
534
  - lib/eco/api/usecases/default_cases/create_details_case.rb