diff --git a/admin/app/admin/email_blacklist.rb b/admin/app/admin/email_blacklist.rb new file mode 100644 index 000000000..615ff43fb --- /dev/null +++ b/admin/app/admin/email_blacklist.rb @@ -0,0 +1,14 @@ +ActiveAdmin.register JamRuby::EmailBlacklist, :as => 'Email Blacklist' do + + menu :label => 'Email Blacklist', :parent => 'Operations' + + config.sort_order = 'created_at desc' + config.batch_actions = false + + index do + column :email + column :source + column :notes + column :created_at + end +end \ No newline at end of file diff --git a/db/manifest b/db/manifest index 2667c3c18..503de6504 100755 --- a/db/manifest +++ b/db/manifest @@ -336,4 +336,5 @@ teacher_student_flags.sql add_sale_source_col.sql jamblaster_v2.sql acapella_rename.sql -jamblaster_pairing_active.sql \ No newline at end of file +jamblaster_pairing_active.sql +email_blacklist.sql \ No newline at end of file diff --git a/db/up/email_blacklist.sql b/db/up/email_blacklist.sql new file mode 100644 index 000000000..d1b7c30f0 --- /dev/null +++ b/db/up/email_blacklist.sql @@ -0,0 +1,10 @@ +CREATE TABLE email_blacklists ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + email VARCHAR(1000) UNIQUE NOT NULL, + source VARCHAR(1000), + notes VARCHAR(1000), + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL +); + +ALTER TABLE jamblasters DROP COLUMN vtoken; \ No newline at end of file diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 33b292d37..c5376cea8 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -114,6 +114,7 @@ require "jam_ruby/models/machine_extra" require "jam_ruby/models/download_tracker" require "jam_ruby/models/ip_blacklist" require "jam_ruby/models/user_blacklist" +require "jam_ruby/models/email_blacklist" require "jam_ruby/models/ip_whitelist" require "jam_ruby/models/user_whitelist" require "jam_ruby/models/fraud_alert" diff --git a/ruby/lib/jam_ruby/models/email_blacklist.rb b/ruby/lib/jam_ruby/models/email_blacklist.rb new file mode 100644 index 000000000..ac4940224 --- /dev/null +++ b/ruby/lib/jam_ruby/models/email_blacklist.rb @@ -0,0 +1,30 @@ +module JamRuby + class EmailBlacklist < ActiveRecord::Base + + attr_accessible :email, :source, :notes, as: :admin + + @@log = Logging.logger[EmailBlacklist] + + validates :email, uniqueness: true + + def self.banned(user) + EmailBlacklist.count(:conditions => "email = '#{user.email.downcase}'") >= 1 + end + + def self.listed(user) + EmailBlacklist.count(:conditions => "email= '#{user.id}'") == 1 + end + + def self.admin_url + APP_CONFIG.admin_root_url + "/admin/email_blacklists/" + end + + def admin_url + APP_CONFIG.admin_root_url + "/admin/email_blacklists/" + id + end + + def to_s + user + end + end +end diff --git a/ruby/lib/jam_ruby/models/jamblaster.rb b/ruby/lib/jam_ruby/models/jamblaster.rb index 4782d6b4f..a6309cc08 100644 --- a/ruby/lib/jam_ruby/models/jamblaster.rb +++ b/ruby/lib/jam_ruby/models/jamblaster.rb @@ -12,7 +12,6 @@ module JamRuby validates :user, presence: true validates :serial_no, uniqueness: true - validates :vtoken, uniqueness: true validates :client_id, uniqueness: true before_save :sanitize_active_admin diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index ee219a969..9e62c3500 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -921,5 +921,9 @@ FactoryGirl.define do factory :user_whitelist, class: "JamRuby::UserWhitelist" do association :user, factory: :user end + + factory :email_blacklist, class: "JamRuby::EmailBlacklist" do + sequence(:email) { |n| "person_#{n}@example.com"} + end end diff --git a/ruby/spec/jam_ruby/models/email_blacklist_spec.rb b/ruby/spec/jam_ruby/models/email_blacklist_spec.rb new file mode 100644 index 000000000..35c4097df --- /dev/null +++ b/ruby/spec/jam_ruby/models/email_blacklist_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe EmailBlacklist do + + let(:user) { FactoryGirl.create(:user) } + + describe "#banned" do + it "returns false if no ban" do + EmailBlacklist.banned(user).should eq false + end + + it "returns true if banned" do + FactoryGirl.create(:email_blacklist, email: user.email) + EmailBlacklist.banned(user).should eq true + end + end +end \ No newline at end of file diff --git a/web/app/helpers/sessions_helper.rb b/web/app/helpers/sessions_helper.rb index 831659613..34c4a1fb1 100644 --- a/web/app/helpers/sessions_helper.rb +++ b/web/app/helpers/sessions_helper.rb @@ -163,6 +163,11 @@ module SessionsHelper return end + if EmailBlacklist.banned(current_user) + Stats.write('web.blacklist.user', {value: 1, user_id: current_user.id}) + render :json => { :message => "User blacklisted via email"}, :status => 403 + end + if UserBlacklist.banned(current_user) Stats.write('web.blacklist.user', {value: 1, user_id: current_user.id}) render :json => { :message => "User blacklisted"}, :status => 403 diff --git a/websocket-gateway/lib/jam_websockets/router.rb b/websocket-gateway/lib/jam_websockets/router.rb index f7c3bfea6..1394bb98f 100644 --- a/websocket-gateway/lib/jam_websockets/router.rb +++ b/websocket-gateway/lib/jam_websockets/router.rb @@ -712,7 +712,7 @@ module JamWebsockets end # we have to deal with jamblaster before login - if jamblaster_serial_no + if jamblaster_serial_no && jamblaster_serial_no != '' jamblaster = Jamblaster.find_by_serial_no(jamblaster_serial_no) if jamblaster jamblaster.client_id = client_id