Auto-approval and upload fixed
This commit is contained in:
parent
0dd63f6bf6
commit
1b299d53e6
5 changed files with 49 additions and 34 deletions
|
|
@ -53,17 +53,22 @@ class PackagesController < ApplicationController
|
||||||
new_screenshot.uploaderhash = session[:token]
|
new_screenshot.uploaderhash = session[:token]
|
||||||
new_screenshot.uploaderip = session[:ip]
|
new_screenshot.uploaderip = session[:ip]
|
||||||
new_screenshot.version = @package.version
|
new_screenshot.version = @package.version
|
||||||
new_screenshot.user = current_user
|
|
||||||
|
|
||||||
# Can the upload get approved automatically?
|
# Can the upload get approved automatically?
|
||||||
if current_user
|
if user_signed_in?
|
||||||
new_screenshot.approve! if current_user.auto_approve?
|
new_screenshot.user = current_user
|
||||||
|
new_screenshot.approve! if auto_approve?
|
||||||
|
|
||||||
# For anonymous uploads remember which screenshots have been
|
# For anonymous uploads remember which screenshots have been
|
||||||
# uploaded. If the user logs in later the screenshots will
|
# uploaded. If the user logs in later the screenshots will
|
||||||
# be linked to their account.
|
# be linked to their account.
|
||||||
else
|
else
|
||||||
|
# Save the screenshot database record to get an ID
|
||||||
|
new_screenshot.save!
|
||||||
(session[:uploaded_screenshots] ||= []) << new_screenshot.id
|
(session[:uploaded_screenshots] ||= []) << new_screenshot.id
|
||||||
|
puts "-------------------"
|
||||||
|
puts session[:uploaded_screenshots]
|
||||||
|
puts "-------------------"
|
||||||
Log.log "Anonymously uploaded screenshots #{new_screenshot.id} remembered in cookie session to assign it to a user later."
|
Log.log "Anonymously uploaded screenshots #{new_screenshot.id} remembered in cookie session to assign it to a user later."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -315,4 +320,23 @@ class PackagesController < ApplicationController
|
||||||
def params_screenshot_description
|
def params_screenshot_description
|
||||||
params.require(:screenshot).permit(:description)
|
params.require(:screenshot).permit(:description)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Do uploads from this user get approved automatically?
|
||||||
|
def auto_approve?
|
||||||
|
# Anonymous users need to go through moderation
|
||||||
|
return false unless user_signed_in?
|
||||||
|
|
||||||
|
# Admins do not need moderation
|
||||||
|
return true if current_user.is_admin?
|
||||||
|
|
||||||
|
# Debian developers do not need moderation
|
||||||
|
return true if current_user.provider == 'debian-sso'
|
||||||
|
|
||||||
|
# After one successfully approved screenshot users do not need moderation
|
||||||
|
return true if current_user.approved_screenshots.count > 0
|
||||||
|
|
||||||
|
# Any other user's upload must be moderated
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,19 @@
|
||||||
class Users::MySessionsController < Devise::SessionsController
|
class Users::MySessionsController < Devise::SessionsController
|
||||||
# before_filter :before_login, :only => :create
|
after_action :after_login, :only => :create
|
||||||
after_filter :after_login, :only => :create
|
|
||||||
|
|
||||||
# def before_login
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Hook after successful login
|
# Hook after successful login
|
||||||
def after_login
|
def after_login
|
||||||
Log.log "User #{current_user} logged in."
|
Log.log "User #{current_user} logged in."
|
||||||
old_screenshots = session[:uploaded_screenshots]
|
old_screenshots = session[:uploaded_screenshots]
|
||||||
raise
|
if old_screenshots.to_a.length > 0
|
||||||
if count = old_screenshots.to_a.length > 0
|
|
||||||
old_screenshots.each do |id|
|
old_screenshots.each do |id|
|
||||||
ss = Screenshot.find(id)
|
ss = Screenshot.find(id)
|
||||||
ss.user = @user
|
ss.user = @user
|
||||||
ss.save!
|
ss.save!
|
||||||
end
|
end
|
||||||
flash[:info] = "#{count} uploads have been added to your account"
|
flash[:info] = "#{old_screenshots.to_a.length} uploads have been added to your account"
|
||||||
Log.log "Anonymously uploaded screenshots #{old_screenshots} added to account."
|
Log.log "Anonymously uploaded screenshots #{old_screenshots} added to account."
|
||||||
|
session[:uploaded_screenshots] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -50,24 +50,6 @@ class User < ApplicationRecord
|
||||||
self.provider == nil
|
self.provider == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Do uploads from this user get approved automatically?
|
|
||||||
def auto_approve?
|
|
||||||
# Anonymous users need to go through moderation
|
|
||||||
return false unless user_signed_in?
|
|
||||||
|
|
||||||
# Admins do not need moderation
|
|
||||||
return true if current_user.is_admin?
|
|
||||||
|
|
||||||
# Debian developers do not need moderation
|
|
||||||
return true if current_user.provider == 'debian-sso'
|
|
||||||
|
|
||||||
# After one successfully approved screenshot users do not need moderation
|
|
||||||
return true if current_user.approved_screenshots.count > 0
|
|
||||||
|
|
||||||
# Any other user's upload must be moderated
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.from_omniauth(auth)
|
def self.from_omniauth(auth)
|
||||||
where(provider: auth.provider, email: auth.info.email).first_or_create do |user|
|
where(provider: auth.provider, email: auth.info.email).first_or_create do |user|
|
||||||
user.provider = auth.provider
|
user.provider = auth.provider
|
||||||
|
|
@ -79,6 +61,10 @@ class User < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def approved_screenshots
|
||||||
|
self.screenshots.where(approved: true)
|
||||||
|
end
|
||||||
|
|
||||||
# Seamlessly create a user account for the current client.
|
# Seamlessly create a user account for the current client.
|
||||||
# It helps track uploads because uploaded screenshots get assigned
|
# It helps track uploads because uploaded screenshots get assigned
|
||||||
# to this user record. The user can later decide to use a real
|
# to this user record. The user can later decide to use a real
|
||||||
|
|
|
||||||
9
test/fixtures/users.yml
vendored
9
test/fixtures/users.yml
vendored
|
|
@ -18,3 +18,12 @@ normal:
|
||||||
admin: 0
|
admin: 0
|
||||||
encrypted_password: <%= Devise::Encryptor.digest(User, 'normalsecret') %>
|
encrypted_password: <%= Devise::Encryptor.digest(User, 'normalsecret') %>
|
||||||
|
|
||||||
|
debian:
|
||||||
|
name: Detlef Debian
|
||||||
|
created_at: 2018-01-01
|
||||||
|
updated_at: 2018-01-01
|
||||||
|
email: detlef@debian.ork
|
||||||
|
sign_in_count: 0
|
||||||
|
provider: debian-sso
|
||||||
|
admin: 0
|
||||||
|
encrypted_password: <%= Devise::Encryptor.digest(User, 'normalsecret') %>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
class BrowserBrowseTest < ActionDispatch::IntegrationTest
|
class BrowserBrowseTest < ActionDispatch::IntegrationTest
|
||||||
test "upload broken screenshot anonymously" do
|
test "upload broken screenshot anonymously and get error message" do
|
||||||
visit package_path(name: 'firefox')
|
visit package_path(name: 'firefox')
|
||||||
click_on 'Upload a screenshot'
|
click_on 'Upload a screenshot'
|
||||||
attach_file 'file[]', Rails.root.join('test/fixtures/files/large-broken.png')
|
attach_file 'file[]', Rails.root.join('test/fixtures/files/large-broken.png')
|
||||||
|
|
@ -9,7 +9,7 @@ class BrowserBrowseTest < ActionDispatch::IntegrationTest
|
||||||
page.must_have_content 'The image large-broken.png is not valid'
|
page.must_have_content 'The image large-broken.png is not valid'
|
||||||
end
|
end
|
||||||
|
|
||||||
test "upload png screenshot anonymously" do
|
test "upload png screenshot anonymously and await moderation" do
|
||||||
visit package_path(name: 'firefox')
|
visit package_path(name: 'firefox')
|
||||||
click_on 'Upload a screenshot'
|
click_on 'Upload a screenshot'
|
||||||
img_count_before = page.find_all('img').count
|
img_count_before = page.find_all('img').count
|
||||||
|
|
@ -26,8 +26,8 @@ class BrowserBrowseTest < ActionDispatch::IntegrationTest
|
||||||
newest_screenshot.destroy
|
newest_screenshot.destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
test "upload screenshot as logged-in user" do
|
test "upload screenshot as Debian SSO user and get auto-approval" do
|
||||||
sign_in users(:normal)
|
sign_in users(:debian)
|
||||||
visit upload_path(name: 'firefox')
|
visit upload_path(name: 'firefox')
|
||||||
img_count_before = page.find_all('img').count
|
img_count_before = page.find_all('img').count
|
||||||
attach_file 'file[]', Rails.root.join('test/fixtures/files/large1.png')
|
attach_file 'file[]', Rails.root.join('test/fixtures/files/large1.png')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue