jam-cloud/web/app/helpers/sessions_helper.rb

249 lines
6.0 KiB
Ruby

module SessionsHelper
def sign_in(user)
set_remember_token(user)
set_jamkazam_user_cookies
set_purchased_jamtrack_cookie unless user.has_redeemable_jamtrack
self.current_user = user
end
def set_remember_token(user)
if @session_only_cookie
cookies.delete(:remember_token)
cookies[:remember_token] = {
value: user.remember_token,
domain: Rails.application.config.session_cookie_domain
}
else
cookies[:remember_token] = {
value: user.remember_token,
expires: 20.years.from_now.utc,
domain: Rails.application.config.session_cookie_domain
}
end
end
# should be set whenever a user logs in who has redeemed a free jamtrack, or whenever the user
def set_purchased_jamtrack_cookie
cookies.permanent[:redeemed_jamtrack] = true
end
def set_jamkazam_user_cookies
cookies.permanent[:jamkazam_user] = true
end
def complete_sign_in(user, redirect=true)
sign_in user
# port over any shopping cart items
if has_anonymous_user?
shopping_carts = anonymous_user.shopping_carts
ShoppingCart.move_to_user(user, anonymous_user, shopping_carts)
end
if redirect
if params[:sso] == "desk"
redirect_to_support_after_signin(user)
elsif params[:sso] == 'forums'
redirect_to_forums_after_signin
else
redirect_after_signin(client_path)
end
end
end
def signed_in?
!current_user.nil?
end
def has_anonymous_user?
!anonymous_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def anonymous_user=(anonymous_user)
@anonymous_user = anonymous_user
end
def anonymous_user
if anon_cookie
@anonymous_user ||= AnonymousUser.new(anon_cookie, cookies)
else
nil
end
end
# tries current_user over anonymous_user
def any_user
current_user || anonymous_user
end
def anon_cookie
@anon_cookie ||= cookies[:user_uuid]
end
def new_user(user, signup_hint)
want_jamblaster = false
redirect_location = nil
if signup_hint
want_jamblaster = signup_hint.want_jamblaster
redirect_location = signup_hint.redirect_location
end
cookies[:new_user] = { musician: user.musician, registrationType: user.user_authorization('facebook') ? 'Facebook' : 'Native', want_jamblaster: want_jamblaster, redirect_location: redirect_location }.to_json
end
# given the current user, and any signup hint (can be nil)
# handle the final destination of the user
def handle_signup_hint(user, signup_hint, default_redirect)
redirect_url = default_redirect
if signup_hint
if signup_hint.want_jamblaster
User.where(id: user.id).update_all(want_jamblaster: true)
end
if signup_hint.redirect_location
redirect_url = signup_hint.redirect_location
end
end
redirect_url
end
def current_user?(user)
user == current_user
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
def transactions_filter
ActiveRecord::Base.transaction do
yield
end
end
def api_signed_in_user
unless signed_in?
render :json => { :message => "not logged in"}, :status => 403
end
end
def ip_blacklist
if current_user && current_user.admin
return
end
if @jam_track_right && !@jam_track_right.redeemed
return
end
if IpBlacklist.banned(request.remote_ip) && (current_user && !UserWhitelist.listed(current_user))
Stats.write('web.blacklist.ip', {value: 1, remote_ip: request.remote_ip})
render :json => { :message => "IP blacklisted"}, :status => 403
end
end
def user_blacklist
if current_user && current_user.admin
return
end
if @jam_track_right && !@jam_track_right.redeemed
return
end
# not yet; we can track the thief by not outright banning
#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
end
end
# take either the signed in user, or if that fails, try the anonymous user
def api_any_user
unless signed_in? || has_anonymous_user?
render :json => { :message => "not logged in"}, :status => 403
end
end
def api_anonymous_user
unless has_anonymous_user?
render :json => { :errors => {:user_uuid => ['not specified']}}, :status => 422
end
end
def sign_out
current_user = nil
cookies.delete(:remember_token, domain: Rails.application.config.session_cookie_domain)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
def store_location
session[:return_to] = request.url
end
def jkclient_agent?
!!(request.env['HTTP_USER_AGENT'] =~ /JamKazam/)
end
# used to help GA tracking. should result in one of Visitor, Registered User, or Paying Subscriber
def ga_user_level
if current_user.nil?
'Visitor'
else
'Registered User' # TODO: when paying subscriber exists, add to it
end
end
# used to help GA tracking. should result in either Fan or Musician
def ga_user_type
if current_user.nil?
'Fan'
else
current_user.musician? ? 'Musician' : 'Fan'
end
end
def logged_in_not_logged_in_class
signed_in? ? "logged-in" : "not-logged-in"
end
def metronome_tempos
[
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 66, 69, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 126, 132, 138, 144, 152, 160, 168, 176, 184, 192, 200, 208
]
end
end