eco-helpers 2.0.57 → 2.0.58

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