lib/geminabox/server.rb in geminabox-1.1.1 vs lib/geminabox/server.rb in geminabox-1.2.0
- old
+ new
@@ -1,6 +1,7 @@
require 'reentrant_flock'
+require 'rubygems/util'
module Geminabox
class Server < Sinatra::Base
enable :static, :methodoverride
@@ -144,9 +145,30 @@
File.delete file_path if File.exist? file_path
self.class.reindex(:force_rebuild)
redirect url("/")
end
+ end
+
+ delete '/api/v1/gems/yank' do
+ unless self.class.allow_delete?
+ error_response(403, 'Gem deletion is disabled')
+ end
+
+ halt 400 unless request.form_data?
+
+ serialize_update do
+ gems = load_gems.select { |gem| request['gem_name'] == gem.name and
+ request['version'] == gem.number.version }
+ halt 404, 'Gem not found' if gems.size == 0
+ gems.each do |gem|
+ gem_path = File.expand_path(File.join(Geminabox.data, 'gems',
+ "#{gem.gemfile_name}.gem"))
+ File.delete gem_path if File.exists? gem_path
+ end
+ self.class.reindex(:force_rebuild)
+ return 200, 'Yanked gem and reindexed'
+ end
end
post '/upload' do
unless self.class.allow_upload?
error_response(403, 'Gem uploading is disabled')