gitlab_support_readiness 1.0.120 → 1.0.122

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: 990b9ab8f4799c49858dbf3ab3a612352a184515211787dd8c3359ccf0f32f8f
4
- data.tar.gz: 60a06caa3b33e5a3bfbff514553dcc5da20f04e89f4b8c199a600d03c0e50afc
3
+ metadata.gz: 6c150b6e67f4b31af57feb7a85e4cb7752c61145027c9b195417bee449d86dfb
4
+ data.tar.gz: c47e718aadeaa60dc62778902bf01adf7e570e1f8a66415db44ea4c3f81f5469
5
5
  SHA512:
6
- metadata.gz: 99f166d57ea5b248c5f408ee6859bc02de431404c757f2436768bba5d6fbe701c4159f139e7745e403763d11bd948a60ca9849370139bd58c8e5adb2eeebf4bb
7
- data.tar.gz: 0e318c6210a803a999ea571c436a4ce99420aa79d9bee39656f90ab4ca31dee932ce3eec47ab712817f9739bff42efaabb499f6e0235348732f52e1dcd190f96
6
+ metadata.gz: 4ed28ace23f5506939188a4f22f16b0cd037c2a00741c9ebb23d370ce477419c25f9f61758ab66aee8a09e27c1896bf3a621c01b2c0be327b0e646fc6637d7d8
7
+ data.tar.gz: a3029cd87747b8cdb7629ff3eb133a13d817530ceff021d57602d9cf68b6b367eace6bbf3b2081afa69fc5e095aa806131fc04245e073cb3ac6de502336a7612
@@ -0,0 +1,118 @@
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
+ elsif support_entitlement_check
43
+ %w[2fa_challenge_questions]
44
+ else
45
+ %w[2fa_owner_not_entitled]
46
+ end
47
+ else
48
+ puts "Unknown request type of '#{ticket_field['value']}', exiting for safety"
49
+ exit 0
50
+ end
51
+ new_ticket = Readiness::Zendesk::Tickets.new
52
+ new_ticket.id = @ticket.id
53
+ new_ticket.additional_tags = tags_to_add
54
+ pp new_ticket.additional_tags
55
+ #Readiness::Zendesk::Tickets.update_many!(@zendesk_client, [new_ticket])
56
+ end
57
+
58
+ ##
59
+ # Determine if a request has support entitlement
60
+ #
61
+ # @author Jason Colyer
62
+ # @since 1.0.121
63
+ def self.support_entitlement_check
64
+ tags = %w[
65
+ sub_consumption_cicd_minutes
66
+ sub_consumption_eap
67
+ sub_consumption_storage
68
+ sub_dotcom_premium
69
+ sub_dotcom_ultimate
70
+ ]
71
+ tags.each do |t|
72
+ return true if @ticket.tags.include? t
73
+ end
74
+ false
75
+ end
76
+
77
+ ##
78
+ # Determine if a owner driven request has entitlement
79
+ #
80
+ # @author Jason Colyer
81
+ # @since 1.0.121
82
+ def self.owner_entitlement_check
83
+ return false unless support_entitlement_check
84
+
85
+ zd_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Impacted email address', @ticket_fields)
86
+ zd_requester = Readiness::Zendesk::Users.find!(@zendesk_client, @ticket.submitter_id)
87
+ target_email = @ticket.custom_fields.detect { |t| t['id'] == zd_field.id }['value']
88
+ return false unless zd_requester.email.split('@').last.downcase == target_email.split('@').last.downcase
89
+
90
+ users = Readiness::GitLab::Users.search_by_email(@gitlab_admin_client, target_email)
91
+ return false unless users.count == 1
92
+
93
+ target = users.first
94
+ users = Readiness::GitLab::Users.search_by_email(@gitlab_admin_client, zd_requester.email)
95
+ return false unless users.count == 1
96
+
97
+ requester = users.first
98
+ memberships = Readiness::GitLab::Users.memberships(@gitlab_admin_client, requester, ['type=Namespace'])
99
+ namespaces_to_check = []
100
+ memberships.select { |m| m['access_level'] == 50 }.each do |m|
101
+ namespace = Readiness::GitLab::Namespaces.find!(@gitlab_admin_client, m['source_id'])
102
+ next unless namespace.parent_id.nil?
103
+ next unless Readiness::GitLab::Namespaces.is_paid?(@gitlab_admin_client, namespace)
104
+
105
+ namespaces_to_check.push(namespace)
106
+ end
107
+ return false if namespaces_to_check.count.zero?
108
+
109
+ namespaces_to_check.each do |namespace|
110
+ group = Readiness::GitLab::Groups.new({ 'id' => namespace.id })
111
+ all_members = Readiness::GitLab::Groups.all_members(@gitlab_admin_client, group, ["user_ids=#{target.id}"])
112
+ return true unless all_members.count.zero?
113
+ end
114
+ false
115
+ end
116
+ end
117
+ end
118
+ 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.120
4
+ version: 1.0.122
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-12 00:00:00.000000000 Z
11
+ date: 2025-02-17 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