Skip to content

Commit 0aa1eeb

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent fdcfcb2 commit 0aa1eeb

File tree

75 files changed

+695
-957
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+695
-957
lines changed

.rubocop_todo/rspec/be_eq.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,6 @@ RSpec/BeEq:
761761
- 'spec/lib/gitlab/auth/saml/auth_hash_spec.rb'
762762
- 'spec/lib/gitlab/auth/saml/config_spec.rb'
763763
- 'spec/lib/gitlab/auth/saml/origin_validator_spec.rb'
764-
- 'spec/lib/gitlab/auth_spec.rb'
765764
- 'spec/lib/gitlab/avatar_cache_spec.rb'
766765
- 'spec/lib/gitlab/background_migration/backfill_vs_code_settings_version_spec.rb'
767766
- 'spec/lib/gitlab/background_migration/convert_credit_card_validation_data_to_hashes_spec.rb'

.rubocop_todo/rspec/is_expected_specify.yml

Lines changed: 0 additions & 38 deletions
This file was deleted.

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,3 +743,5 @@ gem 'openbao_client', path: 'gems/openbao_client' # rubocop:todo Gemfile/Missing
743743
gem 'paper_trail', '~> 15.0' # rubocop:todo Gemfile/MissingFeatureCategory
744744

745745
gem "i18n_data", "~> 0.13.1", feature_category: :system_access
746+
747+
gem "gitlab-cloud-connector", "~> 0.2.1", require: 'cloud_connector', feature_category: :cloud_connector

Gemfile.checksum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@
220220
{"name":"gitaly","version":"17.5.0.pre.rc42","platform":"ruby","checksum":"15469230245c5d83f09c6e057ae1088ce87133ff156086bf02a2b8b2ec24e817"},
221221
{"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"},
222222
{"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"},
223+
{"name":"gitlab-cloud-connector","version":"0.2.1","platform":"ruby","checksum":"552d760ee2a9d25f681c9b2cf677e9f1b3c65f7516b6348e21b3bdf970640db4"},
223224
{"name":"gitlab-dangerfiles","version":"4.8.0","platform":"ruby","checksum":"b327d079552ec974a63bf34d749a0308425af6ebf51d01064f1a6ff216a523db"},
224225
{"name":"gitlab-experiment","version":"0.9.1","platform":"ruby","checksum":"f230ee742154805a755d5f2539dc44d93cdff08c5bbbb7656018d61f93d01f48"},
225226
{"name":"gitlab-fog-azure-rm","version":"2.2.0","platform":"ruby","checksum":"31aa7c2170f57874053144e7f716ec9e15f32e71ffbd2c56753dce46e2e78ba9"},

Gemfile.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,9 @@ GEM
729729
terminal-table (>= 1.5.1)
730730
gitlab-chronic (0.10.5)
731731
numerizer (~> 0.2)
732+
gitlab-cloud-connector (0.2.1)
733+
activesupport (~> 7.0)
734+
jwt (~> 2.9.3)
732735
gitlab-dangerfiles (4.8.0)
733736
danger (>= 9.3.0)
734737
danger-gitlab (>= 8.0.0)
@@ -2067,6 +2070,7 @@ DEPENDENCIES
20672070
gitaly (~> 17.5.0.pre.rc1)
20682071
gitlab-backup-cli!
20692072
gitlab-chronic (~> 0.10.5)
2073+
gitlab-cloud-connector (~> 0.2.1)
20702074
gitlab-dangerfiles (~> 4.8.0)
20712075
gitlab-duo-workflow-service-client (~> 0.1)!
20722076
gitlab-experiment (~> 0.9.1)

Gemfile.next.checksum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@
221221
{"name":"gitaly","version":"17.5.0.pre.rc42","platform":"ruby","checksum":"15469230245c5d83f09c6e057ae1088ce87133ff156086bf02a2b8b2ec24e817"},
222222
{"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"},
223223
{"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"},
224+
{"name":"gitlab-cloud-connector","version":"0.2.1","platform":"ruby","checksum":"552d760ee2a9d25f681c9b2cf677e9f1b3c65f7516b6348e21b3bdf970640db4"},
224225
{"name":"gitlab-dangerfiles","version":"4.8.0","platform":"ruby","checksum":"b327d079552ec974a63bf34d749a0308425af6ebf51d01064f1a6ff216a523db"},
225226
{"name":"gitlab-experiment","version":"0.9.1","platform":"ruby","checksum":"f230ee742154805a755d5f2539dc44d93cdff08c5bbbb7656018d61f93d01f48"},
226227
{"name":"gitlab-fog-azure-rm","version":"2.2.0","platform":"ruby","checksum":"31aa7c2170f57874053144e7f716ec9e15f32e71ffbd2c56753dce46e2e78ba9"},

Gemfile.next.lock

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,9 @@ GEM
739739
terminal-table (>= 1.5.1)
740740
gitlab-chronic (0.10.5)
741741
numerizer (~> 0.2)
742+
gitlab-cloud-connector (0.2.1)
743+
activesupport (~> 7.0)
744+
jwt (~> 2.9.3)
742745
gitlab-dangerfiles (4.8.0)
743746
danger (>= 9.3.0)
744747
danger-gitlab (>= 8.0.0)
@@ -2094,6 +2097,7 @@ DEPENDENCIES
20942097
gitaly (~> 17.5.0.pre.rc1)
20952098
gitlab-backup-cli!
20962099
gitlab-chronic (~> 0.10.5)
2100+
gitlab-cloud-connector (~> 0.2.1)
20972101
gitlab-dangerfiles (~> 4.8.0)
20982102
gitlab-duo-workflow-service-client (~> 0.1)!
20992103
gitlab-experiment (~> 0.9.1)

app/assets/javascripts/deployments/components/deployment_deploy_block.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export default {
7070
ready: s__('Deployment|Ready to be deployed.'),
7171
deploy: s__('Deployment|Deploy'),
7272
genericError: s__(
73-
'Deloyment|Something went wrong starting the deployment. Please try again later.',
73+
'Deployment|Something went wrong starting the deployment. Please try again later.',
7474
),
7575
},
7676
};

app/assets/javascripts/repository/utils/url_utility.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
import { joinPaths, escapeFileUrl } from '~/lib/utils/url_utility';
1+
import { joinPaths, escapeFileUrl, removeParams } from '~/lib/utils/url_utility';
22

33
export function generateHistoryUrl(historyLink, path, refType) {
44
const url = new URL(window.location.href);
55

6-
url.pathname = joinPaths(historyLink, path ? escapeFileUrl(path) : '');
6+
url.pathname = joinPaths(
7+
removeParams(['ref_type'], historyLink),
8+
path ? escapeFileUrl(path) : '',
9+
);
710

8-
if (refType) {
11+
if (refType && !url.searchParams.get('ref_type')) {
912
url.searchParams.set('ref_type', refType);
1013
}
1114

app/assets/javascripts/security_configuration/components/pre_receive_secret_detection_feature_card.vue

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@ export default {
8989
}
9090
return '';
9191
},
92-
showSettingsButton() {
93-
return this.glFeatures.secretDetectionProjectLevelExclusions;
94-
},
9592
},
9693
methods: {
9794
onError(message) {
@@ -211,7 +208,6 @@ export default {
211208
@change="togglePreReceiveSecretDetection"
212209
/>
213210
<gl-button
214-
v-if="showSettingsButton"
215211
v-gl-tooltip.left.viewport="$options.i18n.settingsButtonTooltip"
216212
icon="settings"
217213
category="secondary"

app/finders/ci/auth_job_finder.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ def execute
3030
attr_reader :token
3131

3232
def find_job_by_token
33-
job_token = ::Ci::JobToken::Jwt::Decode.new(token)
34-
job_token.jwt? ? job_token.job : ::Ci::Build.find_by_token(token)
33+
jwt = ::Ci::JobToken::Jwt.decode(token)
34+
# TODO: Remove fallback finder when feature flag `ci_job_token_jwt` is removed
35+
jwt&.subject || ::Ci::Build.find_by_token(token)
3536
end
3637

3738
def validate_job!(job)

app/graphql/types/user_preferences_type.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ class UserPreferencesType < BaseObject
3838
experiment: { milestone: '17.2' }
3939
# rubocop:enable GraphQL/ExtractType
4040

41+
field :timezone,
42+
GraphQL::Types::String,
43+
null: true,
44+
description: 'Timezone of the user.',
45+
experiment: { milestone: '17.7' }
46+
4147
def issues_sort
4248
user_preference.issues_sort&.to_sym
4349
end

app/models/ci/build.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -757,9 +757,9 @@ def needs_touch?
757757
end
758758

759759
def valid_token?(token)
760-
job_token = ::Ci::JobToken::Jwt::Decode.new(token)
761-
if job_token.jwt?
762-
job_token.job == self
760+
jwt = ::Ci::JobToken::Jwt.decode(token)
761+
if jwt
762+
jwt.subject == self
763763
else
764764
self.token && token.present? && ActiveSupport::SecurityUtils.secure_compare(token, self.token)
765765
end
@@ -1203,7 +1203,7 @@ def to_partial_path
12031203
def token
12041204
return super unless Feature.enabled?(:ci_job_token_jwt, user)
12051205

1206-
jwt
1206+
encoded_jwt
12071207
end
12081208

12091209
protected
@@ -1216,10 +1216,10 @@ def run_status_commit_hooks!
12161216

12171217
private
12181218

1219-
def jwt
1220-
::Ci::JobToken::Jwt::Encode.new(self).jwt
1219+
def encoded_jwt
1220+
::Ci::JobToken::Jwt.encode(self)
12211221
end
1222-
strong_memoize_attr :jwt
1222+
strong_memoize_attr :encoded_jwt
12231223

12241224
def matrix_build?
12251225
options.dig(:parallel, :matrix).present?

app/services/ci/pipeline_processing/atomic_processing_service.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class AtomicProcessingService
66
include Gitlab::Utils::StrongMemoize
77
include ExclusiveLeaseGuard
88

9-
attr_reader :pipeline
9+
attr_reader :pipeline, :collection
1010

1111
DEFAULT_LEASE_TIMEOUT = 1.minute
1212
BATCH_SIZE = 20
@@ -128,14 +128,18 @@ def update_job!(job)
128128

129129
def status_of_previous_jobs(job)
130130
if job.scheduling_type_dag?
131-
# job uses DAG, get status of all dependent needs
132-
@collection.status_of_jobs(job.aggregated_needs_names.to_a)
131+
status_of_previous_jobs_dag(job)
133132
else
134133
# job uses Stages, get status of prior stage
135134
@collection.status_of_jobs_prior_to_stage(job.stage_idx.to_i)
136135
end
137136
end
138137

138+
def status_of_previous_jobs_dag(job)
139+
# job uses DAG, get status of all dependent needs
140+
@collection.status_of_jobs(job.aggregated_needs_names.to_a)
141+
end
142+
139143
# Gets the jobs that changed from stopped to alive status since the initial status collection
140144
# was evaluated. We determine this by checking if their current status is no longer stopped.
141145
def new_alive_jobs
@@ -184,3 +188,5 @@ def log_running_reset_skipped_jobs_service(jobs)
184188
end
185189
end
186190
end
191+
192+
Ci::PipelineProcessing::AtomicProcessingService.prepend_mod

app/services/ci/runners/bulk_delete_runners_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def delete_runners
3131
# rubocop:disable CodeReuse/ActiveRecord
3232
runners_to_be_deleted =
3333
Ci::Runner
34-
.where(id: authorized_runners_ids)
34+
.id_in(authorized_runners_ids)
3535
.preload([:taggings, :runner_namespaces, :runner_projects])
3636
# rubocop:enable CodeReuse/ActiveRecord
3737
deleted_ids = runners_to_be_deleted.destroy_all.map(&:id) # rubocop:disable Cop/DestroyAll

config/feature_flags/gitlab_com_derisk/bulk_push_concurrency_limit_resume_worker.yml

Lines changed: 0 additions & 9 deletions
This file was deleted.

doc/api/graphql/reference/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35907,6 +35907,7 @@ fields relate to interactions between the two entities.
3590735907
| <a id="userpreferencesissuessort"></a>`issuesSort` | [`IssueSort`](#issuesort) | Sort order for issue lists. |
3590835908
| <a id="userpreferencesorganizationgroupsprojectsdisplay"></a>`organizationGroupsProjectsDisplay` **{warning-solid}** | [`OrganizationGroupProjectDisplay!`](#organizationgroupprojectdisplay) | **Introduced** in GitLab 17.2. **Status**: Experiment. Default list view for organization groups and projects. |
3590935909
| <a id="userpreferencesorganizationgroupsprojectssort"></a>`organizationGroupsProjectsSort` **{warning-solid}** | [`OrganizationGroupProjectSort`](#organizationgroupprojectsort) | **Introduced** in GitLab 17.2. **Status**: Experiment. Sort order for organization groups and projects. |
35910+
| <a id="userpreferencestimezone"></a>`timezone` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.7. **Status**: Experiment. Timezone of the user. |
3591035911
| <a id="userpreferencesuseworkitemsview"></a>`useWorkItemsView` | [`Boolean`](#boolean) | Use work item view instead of legacy issue view. |
3591135912
| <a id="userpreferencesvisibilitypipelineidtype"></a>`visibilityPipelineIdType` | [`VisibilityPipelineIdType`](#visibilitypipelineidtype) | Determines whether the pipeline list shows ID or IID. |
3591235913

doc/user/application_security/secret_detection/exclusions.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ DETAILS:
1212
**Status:** Experiment
1313

1414
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14878) as an [experiment](../../../policy/experiment-beta-support.md) in GitLab 17.5 [with a flag](../../feature_flags.md) named `secret_detection_project_level_exclusions`. Enabled by default.
15-
16-
FLAG:
17-
The availability of this feature is controlled by a feature flag.
18-
For more information, see the history.
19-
This feature is available for testing, but not ready for production use.
15+
> - `secret_detection_project_level_exclusions` feature flag [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/499059) in GitLab 17.7.
2016
2117
Secret detection may detect something that's not actually a secret. For example, if you use
2218
a fake value as a placeholder in your code, it might be detected and possibly blocked.

lib/authn/tokens/jwt.rb

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# frozen_string_literal: true
2+
3+
# This class provides methods to encode and decode JWTs using RSA encryption.
4+
# It is designed to work within the GitLab authentication system, providing
5+
# secure token generation and verification for various subjects.
6+
#
7+
# Key features:
8+
# - RSA-based encoding and decoding of JWTs
9+
# - Validation of JWT format and structure
10+
# - Configurable subject types and global ID parsing
11+
# - Support for custom token prefixes
12+
#
13+
# Usage:
14+
# - Use `rsa_encode` to create new JWTs with any subjects
15+
# - Use `rsa_decode` to verify and extract information from existing JWTs
16+
#
17+
module Authn
18+
module Tokens
19+
class Jwt
20+
include Gitlab::Utils::StrongMemoize
21+
22+
InvalidSubjectForTokenError = Class.new(StandardError)
23+
24+
ISSUER = Settings.gitlab.host
25+
AUDIENCE = 'gitlab-authz-token'
26+
VERSION = '0.1.0'
27+
28+
class << self
29+
def rsa_encode(subject:, signing_key:, expire_time:, token_prefix:)
30+
subject_global_id = GlobalID.create(subject).to_s if subject
31+
raise InvalidSubjectForTokenError unless subject_global_id.present?
32+
33+
jwt = ::JSONWebToken::Token.new.tap do |token|
34+
token.subject = subject_global_id
35+
token.issuer = ISSUER
36+
token.audience = AUDIENCE
37+
token.expire_time = expire_time
38+
token[:version] = VERSION
39+
end
40+
41+
token = ::JSONWebToken::RSAToken.encode(
42+
jwt.payload,
43+
signing_key,
44+
signing_key.public_key.to_jwk[:kid]
45+
)
46+
47+
token_prefix + token
48+
end
49+
50+
def rsa_decode(token:, signing_public_key:, subject_type:, token_prefix:)
51+
return unless token.start_with?(token_prefix)
52+
53+
token = token.delete_prefix(token_prefix)
54+
55+
payload, _header = ::JSONWebToken::RSAToken.decode(token, signing_public_key)
56+
57+
new(payload: payload, subject_type: subject_type)
58+
rescue JWT::DecodeError, Gitlab::Graphql::Errors::ArgumentError => error
59+
Gitlab::ErrorTracking.track_exception(error)
60+
nil
61+
end
62+
end
63+
64+
def initialize(payload:, subject_type:)
65+
@payload = payload
66+
@subject_type = subject_type
67+
end
68+
69+
def subject
70+
return unless payload
71+
72+
GitlabSchema.parse_gid(payload['sub'], expected_type: subject_type)&.find
73+
end
74+
strong_memoize_attr :subject
75+
76+
attr_reader :payload, :subject_type
77+
end
78+
end
79+
end

0 commit comments

Comments
 (0)