diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index 626d230..dfbda50 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -1,5 +1,7 @@ class PackagesController < ApplicationController + protect_from_forgery :except => :legacy_uploadfile + def list @packages = query_packages @packages = @packages.paginate(page: params[:page], per_page: 6) @@ -51,6 +53,34 @@ class PackagesController < ApplicationController redirect_to package_path end + # Legacy action to upload an image along with metadata. + # This was used in Debshots 1.x as the default upload method. + # This method allows that old-style way to upload screenshots. + # It is probably used by screenshotting tools. + # + # Parameters: + # - packagename + # - version + # - description + # - file + def legacy_uploadfile + @package = Package.find_by(name: params[:packagename]) + + new_screenshot = @package.screenshots.new(image: params[:file]) + + # Check if the image was valid + if new_screenshot.valid? + # new_screenshot.uploaderhash = session[:token] + new_screenshot.uploaderip = session[:ip] + new_screenshot.save + Log.log "Screenshot #{new_screenshot.id} uploaded successfully from legacy upload form." + redirect_to package_path(params[:packagename]) + else + Log.log "Screenshot upload rejected. Errors: #{new_screenshot.errors.to_a}" + head :not_acceptable + end + end + def delete_screenshot # Is the user allowed to delete the screenshot? @screenshot = Screenshot.find(params[:id]) diff --git a/app/views/packages/legacy_uploadfile.slim b/app/views/packages/legacy_uploadfile.slim new file mode 100644 index 0000000..83ddc52 --- /dev/null +++ b/app/views/packages/legacy_uploadfile.slim @@ -0,0 +1,3 @@ +h1 Upload received + +' Thanks. \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index e1f1d01..bb44f48 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,7 +16,8 @@ Debshots::Application.routes.draw do get 'packages/list' => 'packages#list', as: :packages_list get 'moderate' => 'moderate#index' get 'package/:name' => 'packages#details', as: :package, name: /[^\/]+/ - get 'upload', to: redirect('/packages') + get 'upload', to: redirect('/packages') # legacy upload form + post 'uploadfile' => 'packages#legacy_uploadfile' get 'upload/:name' => 'packages#upload', as: :upload_package_by_name post 'upload_image/:name' => 'packages#upload_image', as: :upload_image, name: /[^\/]+/ # TODO: "get" is probably the wrong method to delete a screenshot