From 228b7375e7b5bea6fde45c37c59002d2ce6e1789 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Fri, 17 Aug 2018 17:07:42 +0200 Subject: [PATCH] Refactored auto-approve code to make it more readable --- app/controllers/packages_controller.rb | 5 ++--- app/models/user.rb | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index ab52c5d..da81a2f 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -56,9 +56,8 @@ class PackagesController < ApplicationController new_screenshot.version = @package.version new_screenshot.user = current_user - # Package is not approved by default. Approve automatically - # for authenticated users. - new_screenshot.approve! if current_user and not current_user.is_anonymous? + # Can the upload get approved automatically? + new_screenshot.approve! if current_user and current_user.auto_approve? new_screenshot.save Log.log "Screenshot #{new_screenshot.id} uploaded successfully from #{session[:ip]}. User has token #{session[:token]} or is #{current_user}" diff --git a/app/models/user.rb b/app/models/user.rb index 68ba9f3..9da70e8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -50,6 +50,21 @@ class User < ApplicationRecord self.provider == nil end + # Do uploads from this user get approved automatically? + def auto_approve? + # 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) where(provider: auth.provider, email: auth.info.email).first_or_create do |user| user.provider = auth.provider