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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48fd190b6e50d389bfce4cd77bd04794f35162cec19727ff82aa913cfeb0ac24
|
4
|
+
data.tar.gz: 6ab595513585c78ae81a23abc63a214b50378a53885d087820a57b2fe8abe573
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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({ "#{
|
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.
|
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
|
+
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
|