From c87011ff8484435fde115d08ea1a6e3efbf8d077 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 12:33:18 +0200 Subject: [PATCH 1/7] Session token/IP based user authentication added --- app/controllers/application_controller.rb | 1 + app/controllers/packages_controller.rb | 12 ++++++++---- app/views/packages/details.slim | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 64acd72..10b8733 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -9,6 +9,7 @@ class ApplicationController < ActionController::Base # and show them even before moderation. def create_user_token session[:token] ||= SecureRandom.hex + session[:ip] ||= request.remote_ip end end diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index 738d23d..f8eebd4 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -24,6 +24,8 @@ class PackagesController < ApplicationController @package = Package.find_by(name: params[:name]) end + # POST target of the screenshots upload form. + # Checks upload images and creates a new Screenshot record for it. def upload_image @package = Package.find_by(name: params[:name]) @@ -33,13 +35,15 @@ class PackagesController < ApplicationController new_screenshot = @package.screenshots.new(image: img) # Check if the image was valid - unless new_screenshot.valid? - errors = new_screenshot.errors[:image].join(' and ') - flash['alert'] = "Sorry - the image #{errors}" - else + if new_screenshot.valid? + new_screenshot.uploaderhash = session[:token] + new_screenshot.uploaderip = session[:ip] new_screenshot.save successful_upload_count += 1 Log.log "Screenshot #{new_screenshot.id} uploaded successfully." + else + errors = new_screenshot.errors[:image].join(' and ') + flash['alert'] = "Sorry - the image #{errors}" end if successful_upload_count > 0 diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index c773bbc..3f13948 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -11,6 +11,8 @@ a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption = image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption) .imgcaption =screenshot.caption + // TODO: Show information only if admin + p Uploader IP=#{screenshot.uploaderip} / Token=#{screenshot.uploaderhash} // TODO: Enable button only if admin or uploader a.button.tiny.alert[ href=delete_screenshot_path(@package.name, screenshot.id) From 0e52eecb2b0cf9170636f0295063a97618333908 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 12:33:59 +0200 Subject: [PATCH 2/7] Added Javascript engine --- Gemfile | 2 +- Gemfile.lock | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 0c3a223..be58c93 100644 --- a/Gemfile +++ b/Gemfile @@ -16,7 +16,7 @@ gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' # See https://github.com/sstephenson/execjs#readme for more supported runtimes -# gem 'therubyracer', platforms: :ruby +gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 285b496..cb09d29 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -111,6 +111,7 @@ GEM railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (1.8.2) + libv8 (3.16.14.7) listen (2.10.0) celluloid (~> 0.16.0) rb-fsevent (>= 0.9.3) @@ -186,6 +187,7 @@ GEM ffi (>= 0.5.0) rdoc (4.2.0) json (~> 1.4) + ref (1.0.5) ruby-graphviz (1.0.9) sass (3.4.13) sass-rails (5.0.3) @@ -216,6 +218,9 @@ GEM activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) temple (0.7.5) + therubyracer (0.12.2) + libv8 (~> 3.16.14.0) + ref thor (0.19.1) thread_safe (0.3.5) tilt (1.4.1) @@ -261,6 +266,7 @@ DEPENDENCIES sdoc (~> 0.4.0) slim-rails spring + therubyracer uglifier (>= 1.3.0) web-console (~> 2.0) will_paginate From c6fb7f1974e17d4fc4f0c358ab7364d713d7e9f4 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 12:34:19 +0200 Subject: [PATCH 3/7] Hint added on the installation of -dev packages --- README.Developer | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.Developer b/README.Developer index f5cb03b..7a52854 100644 --- a/README.Developer +++ b/README.Developer @@ -77,3 +77,9 @@ end A separate validation in the Screenshots model has been implemented already. This unique constraint would raise an error and not trigger a validation error properly unless the separate model validation is in place. + +-- + +Deployment +---------- +sudo apt-get install libyaml-dev libbz2-dev From 8f5cd6f4e4f381b124fcf61fc82e4ed23ddcb7ae Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 12:34:37 +0200 Subject: [PATCH 4/7] Fixed screenshots path when importing from debshots1 installation --- bin/get-data-from-old-live-server.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/get-data-from-old-live-server.sh b/bin/get-data-from-old-live-server.sh index cd48b3a..888b199 100755 --- a/bin/get-data-from-old-live-server.sh +++ b/bin/get-data-from-old-live-server.sh @@ -1,7 +1,8 @@ #!/bin/sh -ex #IMAGE_DEST=../public -IMAGE_DEST=/local/screenshots +IMAGE_DEST=public +#IMAGE_DEST=/local/screenshots #DB_HOST=localhost DB_HOST=torf @@ -24,8 +25,9 @@ psql -h $DB_HOST debshots debshots < /tmp/debshots.sql echo Unpacking screenshots tarball #cd ../public -cd $IMAGE_DEST -tar xf /tmp/debshots-screenshots.tar +#cd $IMAGE_DEST +tar -C $IMAGE_DEST -xf /tmp/debshots-screenshots.tar #mv public/live/screenshots/approved public/screenshots #rm -r public/live +ln -fs public/live/screenshots/approved public/screenshots From 75eee8e3cc50542c589d406392549a7d2ae5d8b7 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 23:11:02 +0200 Subject: [PATCH 5/7] Path for importing debshots1 screenshots fixed --- app/models/screenshot.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/screenshot.rb b/app/models/screenshot.rb index 5524ab0..6e59c7a 100644 --- a/app/models/screenshot.rb +++ b/app/models/screenshot.rb @@ -42,7 +42,7 @@ class Screenshot < ActiveRecord::Base # Return Debshots 1.x path to allow migration of images into Paperclip filesystem schema def image_url(size) - "#{Rails.configuration.images_path_prefix}/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png" + "live/screenshots/approved/#{self.package.name[0]}/#{self.package.name}/#{self.id}_#{size}.png" end From 2b64bd4b80f145e0dc3096d52976fc4e57e9d9be Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 23:11:41 +0200 Subject: [PATCH 6/7] Legacy screenshots path removed from config --- config/environments/development.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index f8dc4db..3711fcf 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -30,10 +30,6 @@ Debshots::Application.configure do # ActiveRecord errors propagate normally (forward deprecation to Rails 5) config.active_record.raise_in_transactional_callbacks = true - - # URL prefix leading to the static images that should get delivered by the web server - config.images_path_prefix = '/screenshots' - # DEB package repositories to parse when running "rake debshots:... tasks" config.package_sources = [ { From fa47827f7abba3d17687978d839b730f41b790cc Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sun, 14 Jun 2015 23:12:24 +0200 Subject: [PATCH 7/7] Fixed routing for packages containing a dot in their names --- config/routes.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index f9c2c2d..2ac291c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,13 +13,13 @@ Debshots::Application.routes.draw do get 'packages' => 'packages#grid', as: :packages_grid get 'packages/list' => 'packages#list', as: :packages_list - get 'package/:name' => 'packages#details', as: :package + get 'package/:name' => 'packages#details', as: :package, name: /[^\/]+/ get 'upload', to: redirect('/packages') get 'upload/:name' => 'packages#upload', as: :upload_package_by_name - post 'upload_image/:name' => 'packages#upload_image', as: :upload_image + post 'upload_image/:name' => 'packages#upload_image', as: :upload_image, name: /[^\/]+/ get 'delete_screenshot/:name/:id' => 'packages#delete_screenshot', as: :delete_screenshot get 'about' => 'welcome#about' - get 'thumbnail/:name' => 'packages#thumbnail', as: :thumbnail_image + get 'thumbnail/:name' => 'packages#thumbnail', as: :thumbnail_image, name: /[^\/]+/ # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes".