Skip to content

Commit 728bc26

Browse files
authored
Block pushes from an owner if gem is reserved (#6406)
* Block pushes from an owner owned gem if reserved * Prevent pending trusted publisher creation if gem is reserved
1 parent 5cc7ead commit 728bc26

15 files changed

Lines changed: 44 additions & 6 deletions

File tree

app/models/oidc/pending_trusted_publisher.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def build_trusted_publisher(params)
3232

3333
def available_rubygem_name
3434
return if rubygem_name.blank?
35+
36+
reserved = GemNameReservation.reserved?(rubygem_name)
37+
return errors.add(:rubygem_name, :reserved) if reserved
38+
3539
rubygem = Rubygem.name_is(rubygem_name).first
3640
return if rubygem.nil? || rubygem.pushable?
3741

app/models/pusher.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ def process
3535
end
3636

3737
def authorize
38-
(rubygem.pushable? && (api_key.user? || find_pending_trusted_publisher)) || owner.owns_gem?(rubygem) || notify_unauthorized
38+
return notify_reserved if rubygem.reserved_name?
39+
return true if rubygem.pushable? && (api_key.user? || find_pending_trusted_publisher)
40+
return true if owner.owns_gem?(rubygem)
41+
42+
notify_unauthorized
3943
end
4044

4145
def verify_gem_scope
@@ -255,8 +259,12 @@ def republish_notification(version)
255259
end
256260
end
257261

262+
def notify_reserved
263+
notify("This gem name is reserved. You are not allowed to push this gem.", 403)
264+
end
265+
258266
def notify_unauthorized
259-
if !api_key.user? || rubygem.reserved_name?
267+
if !api_key.user?
260268
notify("You are not allowed to push this gem.", 403)
261269
elsif rubygem.unconfirmed_ownership?(owner)
262270
notify("You do not have permission to push to this gem. " \

app/models/rubygem.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ def pushable?
295295
end
296296

297297
def reserved_name?
298-
GemNameReservation.reserved?(name)
298+
GemNameReservation.reserved?(name) if name.present?
299299
end
300300

301301
def create_ownership(user)

config/locales/de.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ de:
151151
attributes:
152152
rubygem_name:
153153
unavailable: wird bereits verwendet
154+
reserved:
154155
models:
155156
user: Benutzer
156157
api_key:

config/locales/en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ en:
144144
attributes:
145145
rubygem_name:
146146
unavailable: "is already in use"
147+
reserved: "is reserved"
147148
models:
148149
user: User
149150
api_key:

config/locales/es.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ es:
147147
attributes:
148148
rubygem_name:
149149
unavailable:
150+
reserved:
150151
models:
151152
user: Usuario
152153
api_key:

config/locales/fr.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ fr:
144144
attributes:
145145
rubygem_name:
146146
unavailable:
147+
reserved:
147148
models:
148149
user:
149150
api_key:

config/locales/ja.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ ja:
140140
attributes:
141141
rubygem_name:
142142
unavailable: 既に使われています
143+
reserved:
143144
models:
144145
user: ユーザー
145146
api_key:

config/locales/nl.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ nl:
139139
attributes:
140140
rubygem_name:
141141
unavailable:
142+
reserved:
142143
models:
143144
user:
144145
api_key:

config/locales/pt-BR.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ pt-BR:
145145
attributes:
146146
rubygem_name:
147147
unavailable:
148+
reserved:
148149
models:
149150
user: Usuário
150151
api_key:

0 commit comments

Comments
 (0)