gitlab_support_readiness 1.0.119 → 1.0.121

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: 5a2b0108587e5e82022714ed390e5810b3fc139fe9192649b1216b18a957605a
4
- data.tar.gz: 70948909b5727d437b9c396abdc6bd07c36273a297cbb9ebfd5e47f27dcef842
3
+ metadata.gz: 48fd190b6e50d389bfce4cd77bd04794f35162cec19727ff82aa913cfeb0ac24
4
+ data.tar.gz: 6ab595513585c78ae81a23abc63a214b50378a53885d087820a57b2fe8abe573
5
5
  SHA512:
6
- metadata.gz: 923828b4dc892451fb3d542503bd46a70cc115e99a258558160c2fee030e90210de87b66521ce015b687c98c4c101ab92cfdaa53d7a69dba7fd5427684c5ccc5
7
- data.tar.gz: fdfca9336366bea66430ee3d2acb3aecdfbcfa955f62509661dceb0127288baae3b4bc7fd3eccc18848e50ab23cee1effc12de071058b007db207bd0519959fb
6
+ metadata.gz: a2ff80cc59bcef6612ceca4842c87dcebe1fd9a199e2d3c4d77482557dbbc1dc3a015736eed30f0514d684bcb5de1fa9c659a92c7e7a05e79cdcb6b8edc31963
7
+ data.tar.gz: a58bb9251007ad5c4e3c075b53d8c8fd32b27313003acf37df67e92a8e2ec4f3a5edb57e8f5a1f4ed69c9801842ce8ecce53d0e31f85b7ee01c47166f3c1c1fc
@@ -60,7 +60,7 @@ module Readiness
60
60
  zd_options.each do |zd_option|
61
61
  repo_option = repo.custom_field_options.detect { |rp_o| rp_o.value == zd_option.value }
62
62
  if repo_option.nil?
63
- @diffs[:option_deletes].push({ "#{repo.value}" => zd_option })
63
+ @diffs[:option_deletes].push({ "#{zd_option.value}" => zd_option })
64
64
  end
65
65
  end
66
66
  end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module TicketProcessor
6
+ module TicketProcessor
7
+ ##
8
+ # Defines the class TwoFARemoval within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.121
12
+ class TwoFARemoval < Readiness::Client
13
+ ##
14
+ # Process a 2FA Removal request
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.121
18
+ def self.process!(zendesk_client, gitlab_admin_client, ticket_id)
19
+ @zendesk_client = zendesk_client
20
+ @gitlab_admin_client = gitlab_admin_client
21
+ @ticket = Readiness::Zendesk::Tickets.find!(@zendesk_client, ticket_id)
22
+ @fields = Readiness::Zendesk::TicketFields.list(@zendesk_client)
23
+ zd_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, '2FA removal target', @fields)
24
+ if zd_field.nil?
25
+ puts 'Cannot locate relevant zendesk ticket field, exiting for safety'
26
+ exit 0
27
+ end
28
+ ticket_field = @ticket.custom_fields.detect { |c| c['id'] == zd_field.id }
29
+ if ticket_field.nil?
30
+ puts 'Cannot locate relevant ticket field, exiting for safety'
31
+ exit 0
32
+ end
33
+ if ticket_field['value'] == '2fa_removal_self'
34
+ tags_to_add = if support_entitlement_check
35
+ %w[2fa_challenge_questions]
36
+ else
37
+ %w[2fa_user_not_entitled]
38
+ end
39
+ elsif ticket_field['value'] == '2fa_removal_other'
40
+ tags_to_add = if owner_entitlement_check
41
+ %w[2fa_snippet_verification]
42
+ else
43
+ %w[2fa_owner_not_entitled]
44
+ end
45
+ else
46
+ puts "Unknown request type of '#{ticket_field['value']}', exiting for safety"
47
+ exit 0
48
+ end
49
+ new_ticket = Readiness::Zendesk::Tickets.new
50
+ new_ticket.id = @ticket.id
51
+ new_ticket.additional_tags = tags_to_add
52
+ pp new_ticket.additional_tags
53
+ #Readiness::Zendesk::Tickets.update_many!(@zendesk_client, [new_ticket])
54
+ end
55
+
56
+ ##
57
+ # Determine if a request has support entitlement
58
+ #
59
+ # @author Jason Colyer
60
+ # @since 1.0.121
61
+ def self.support_entitlement_check
62
+ tags = %w[
63
+ sub_consumption_cicd_minutes
64
+ sub_consumption_eap
65
+ sub_consumption_storage
66
+ sub_dotcom_premium
67
+ sub_dotcom_ultimate
68
+ ]
69
+ tags.each do |t|
70
+ return true if @ticket.tags.include? t
71
+ end
72
+ false
73
+ end
74
+
75
+ ##
76
+ # Determine if a owner driven request has entitlement
77
+ #
78
+ # @author Jason Colyer
79
+ # @since 1.0.121
80
+ def self.owner_entitlement_check
81
+ return false unless support_entitlement_check
82
+
83
+ zd_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Impacted email address', @ticket_fields)
84
+ zd_requester = Readiness::Zendesk::Users.find!(@zendesk_client, @ticket.submitter_id)
85
+ target_email = @ticket.custom_fields.detect { |t| t['id'] == zd_field.id }['value']
86
+ return false unless zd_requester.email.split('@').last.downcase == target_email.split('@').last.downcase
87
+
88
+ users = Readiness::GitLab::Users.search_by_email(@gitlab_admin_client, target_email)
89
+ return false unless users.count == 1
90
+
91
+ target = users.first
92
+ users = Readiness::GitLab::Users.search_by_email(@gitlab_admin_client, zd_requester.email)
93
+ return false unless users.count == 1
94
+
95
+ requester = users.first
96
+ memberships = Readiness::GitLab::Users.memberships(@gitlab_admin_client, requester, ['type=Namespace'])
97
+ namespaces_to_check = []
98
+ memberships.select { |m| m['access_level'] == 50 }.each do |m|
99
+ namespace = Readiness::GitLab::Namespaces.find!(@gitlab_admin_client, m['source_id'])
100
+ next unless namespace.parent_id.nil?
101
+ next unless Readiness::GitLab::Namespaces.is_paid?(@gitlab_admin_client, namespace)
102
+
103
+ namespaces_to_check.push(namespace)
104
+ end
105
+ return false if namespaces_to_check.count.zero?
106
+
107
+ namespaces_to_check.each do |namespace|
108
+ group = Readiness::GitLab::Groups.new({ 'id' => namespace.id })
109
+ all_members = Readiness::GitLab::Groups.all_members(@gitlab_admin_client, group, ["user_ids=#{target.id}"])
110
+ return true unless all_members.count.zero?
111
+ end
112
+ false
113
+ end
114
+ end
115
+ end
116
+ end
@@ -7,6 +7,7 @@ module Readiness
7
7
  # @author Jason Colyer
8
8
  # @since 1.0.44
9
9
  module TicketProcessor
10
+ require "#{__dir__}/ticket_processor/2fa_removal"
10
11
  require "#{__dir__}/ticket_processor/account_blocked"
11
12
  require "#{__dir__}/ticket_processor/code_request_advanced_sast"
12
13
  require "#{__dir__}/ticket_processor/email_suppressions"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_support_readiness
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.119
4
+ version: 1.0.121
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Colyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-11 00:00:00.000000000 Z
11
+ date: 2025-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -391,6 +391,7 @@ files:
391
391
  - lib/support_readiness/support_super_form_processor/usgov_set_collaboration_id.rb
392
392
  - lib/support_readiness/support_super_form_processor/usgov_set_org_ase.rb
393
393
  - lib/support_readiness/ticket_processor.rb
394
+ - lib/support_readiness/ticket_processor/2fa_removal.rb
394
395
  - lib/support_readiness/ticket_processor/account_blocked.rb
395
396
  - lib/support_readiness/ticket_processor/code_request_advanced_sast.rb
396
397
  - lib/support_readiness/ticket_processor/email_suppressions.rb