* VRFS-3216 - add virtual page views for JamTrack funnels, add test mode for fraud check VRFS-3260

This commit is contained in:
Seth Call 2015-05-18 10:33:58 -05:00
parent f5595a03d5
commit 781a9838b7
10 changed files with 93 additions and 19 deletions

View File

@ -6,21 +6,21 @@ module JamRuby
@@log = Logging.logger[JamTrackRight]
attr_accessible :user, :jam_track, :user_id, :jam_track_id, :download_count
attr_accessible :user, :jam_track, :user_id, :jam_track_id, :download_count
attr_accessible :user_id, :jam_track_id, as: :admin
attr_accessible :url_48, :md5_48, :length_48, :url_44, :md5_44, :length_44
belongs_to :user, class_name: "JamRuby::User" # the owner, or purchaser of the jam_track
belongs_to :user, class_name: "JamRuby::User" # the owner, or purchaser of the jam_track
belongs_to :jam_track, class_name: "JamRuby::JamTrack"
validates :user, presence:true
validates :jam_track, presence:true
validates :is_test_purchase, inclusion: {in: [true, false]}
validates :user, presence: true
validates :jam_track, presence: true
validates :is_test_purchase, inclusion: {in: [true, false]}
validate :verify_download_count
after_save :after_save
validates_uniqueness_of :user_id, scope: :jam_track_id
validates_uniqueness_of :user_id, scope: :jam_track_id
# Uploads the JKZ:
mount_uploader :url_48, JamTrackRightUploader
mount_uploader :url_44, JamTrackRightUploader
@ -45,7 +45,7 @@ module JamRuby
def filename(bitrate)
"#{jam_track.name}-#{bitrate == :url_48 ? '48' : '44'}.jkz"
end
def verify_download_count
if (self.download_count < 0 || self.download_count > MAX_JAM_TRACK_DOWNLOADS) && !@current_user.admin
errors.add(:download_count, "must be less than or equal to #{MAX_JAM_TRACK_DOWNLOADS}")
@ -105,8 +105,8 @@ module JamRuby
end
def delete_s3_files
remove_url_48!
remove_url_44!
remove_url_48!
remove_url_44!
end
@ -244,7 +244,7 @@ module JamRuby
# if this is a free JamTrack, we need to check for fraud or accidental misuse
# first of all, does this user have any other JamTracks aside from this one that have already been redeemed it and are marked free?
other_redeemed_freebie = JamTrackRight.where(redeemed:true).where(redeemed_and_fingerprinted: true).where('id != ?', id).where(user_id: current_user.id).first
other_redeemed_freebie = JamTrackRight.where(redeemed: true).where(redeemed_and_fingerprinted: true).where('id != ?', id).where(user_id: current_user.id).first
if other_redeemed_freebie
return "already redeemed another"
@ -259,17 +259,23 @@ module JamRuby
# try to record the other fingerprint
MachineFingerprint.create(running_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ACTIVE, remote_ip, self)
return "other user has 'all' fingerprint"
if APP_CONFIG.error_on_fraud
return "other user has 'all' fingerprint"
end
end
match = MachineFingerprint.find_by_fingerprint(running_fingerprint)
if all_fingerprint != running_fingerprint
match = MachineFingerprint.find_by_fingerprint(running_fingerprint)
if match && match.user != current_user
AdminMailer.alerts(subject: "'Running' fingerprint collision by #{current_user.name}",
body: "MachineFingerprint #{match.inspect}\n\nCurrent User: #{current_user.admin_url}").deliver
# try to record the other fingerprint
MachineFingerprint.create(all_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ALL, remote_ip, self)
return "other user has 'running' fingerprint"
if match && match.user != current_user
AdminMailer.alerts(subject: "'Running' fingerprint collision by #{current_user.name}",
body: "MachineFingerprint #{match.inspect}\n\nCurrent User: #{current_user.admin_url}").deliver
# try to record the other fingerprint
MachineFingerprint.create(all_fingerprint, current_user, MachineFingerprint::TAKEN_ON_FRAUD_CONFLICT, MachineFingerprint::PRINT_TYPE_ALL, remote_ip, self)
if APP_CONFIG.error_on_fraud
return "other user has 'running' fingerprint"
end
end
end
# we made it past all checks; let's slap on the redeemed_fingerprint

View File

@ -194,6 +194,10 @@ def app_config
'blah'
end
def error_on_fraud
true
end
private
def audiomixer_workspace_path

View File

@ -51,6 +51,7 @@
//= require web/signup_helper
//= require web/signin_helper
//= require web/signin
//= require web/tracking
//= require_directory .
//= require_directory ./dialog
//= require_directory ./wizard

View File

@ -40,6 +40,7 @@ context.JK.JamTrackScreen=class JamTrackScreen
this.refresh()
afterShow:(data) =>
context.JK.Tracking.jamtrackBrowseTrack(@app)
beforeHide: () =>
this.clearResults();

View File

@ -31,6 +31,7 @@
}
function afterShow(data) {
}
@ -40,6 +41,7 @@
$contentHolder.removeClass('not-signed-in').addClass('signed-in')
}
else {
context.JK.Tracking.redeemSignupTrack(app)
$jamtrackName.text('')
$contentHolder.addClass('hidden')
$contentHolder.removeClass('signed-in').addClass('not-signed-in')

View File

@ -66,6 +66,7 @@
$genericHeader = $page.find('h1.generic')
$individualizedHeader = $page.find('h1.individualized')
context.JK.Tracking.adTrack(app)
fetchJamTrack();
}

View File

@ -53,6 +53,7 @@
$jamTracksButton = $page.find('.browse-jamtracks')
$ctaJamTracksButton = $page.find('.cta-free-jamtrack');
context.JK.Tracking.adTrack(app)
fetchJamTrack();
}

View File

@ -0,0 +1,56 @@
$ = jQuery
context = window
context.JK ||= {};
class Tracking
constructor: () ->
@logger = context.JK.logger
@rest = new context.JK.Rest();
adTrack: (app) =>
utmSource = $.QueryString['utm_source']
if utmSource == 'facebook-ads' || utmSource == 'google-ads' || utmSource == 'twitter-ads' || utmSource == 'affiliate' || utmSource == 'pr'
if !context.jamClient.IsNativeClient()
@logger.debug("new user recorded")
context.JK.GA.virtualPageView('/landing/jamtracks/new-user/')
app.user().done( (user) =>
# relative to 1 day ago (24 * 60 * 60 * 1000)
if new Date(user.created_at).getTime() < new Date().getTime() - 86400000
@logger.debug("existing user recorded")
context.JK.GA.virtualPageView('/landing/jamtracks/existing-user/');
)
jamtrackBrowseTrack: (app) =>
app.user().done( (user) =>
if context.jamClient.IsNativeClient()
@logger.debug("client user recorded")
context.JK.GA.virtualPageView('/client#/jamtrackBrowse/user-in-app')
else
if new Date(user.created_at).getTime() < new Date().getTime() - 86400000
@logger.debug("existing user recorded")
context.JK.GA.virtualPageView('/client#/jamtrackBrowse/existing-user')
else
@logger.debug("existing new recorded")
context.JK.GA.virtualPageView('/client#/jamtrackBrowse/new-user')
)
redeemSignupTrack: (app) =>
app.user().done( (user) =>
if context.jamClient.IsNativeClient()
@logger.debug("client user recorded")
context.JK.GA.virtualPageView('/client#/redeemSignup/user-in-app')
else
if new Date(user.created_at).getTime() < new Date().getTime() - 86400000
@logger.debug("existing existing recorded")
context.JK.GA.virtualPageView('/client#/redeemSignup/existing-user')
else
@logger.debug("existing new recorded")
context.JK.GA.virtualPageView('/client#/redeemSignup/new-user')
)
context.JK.Tracking = new Tracking()

View File

@ -62,6 +62,7 @@
//= require web/session_info
//= require web/recordings
//= require web/home
//= require web/tracking
//= require web/individual_jamtrack
//= require web/individual_jamtrack_band
//= require fakeJamClient

View File

@ -342,5 +342,6 @@ if defined?(Bundler)
config.estimate_taxes = true
config.ad_sense_enabled = false
config.guard_against_fraud = false
config.error_on_fraud = false
end
end