2016-02-03 16:56:14 +00:00
class ApiJamblastersController < ApiController
2016-02-18 12:12:28 +00:00
before_filter :api_signed_in_user , except : [ :login , :store_token , :auth_users , :can_pair , :is_allowed ]
2016-04-06 02:23:15 +00:00
2016-02-03 16:56:14 +00:00
respond_to :json
2016-02-18 12:12:28 +00:00
# called from jamblaster
def can_pair
2016-02-18 17:22:50 +00:00
jbid = params [ :jbid ]
user_id = params [ :user_id ]
2016-02-18 12:12:28 +00:00
connection_a = nil
2016-02-18 17:22:50 +00:00
connection_a = Connection . find_by_client_id ( jbid ) if jbid
user = User . find_by_id ( user_id ) if user_id
2016-02-18 12:12:28 +00:00
if connection_a . nil?
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " No connection found with client_id #{ jbid } " , reason : " jbid " } , :status = > 404
2016-02-18 12:12:28 +00:00
return
end
2016-02-18 17:22:50 +00:00
if user . nil?
render :json = > { :message = > " No user found with user id #{ user_id } " , reason : " user_id " } , :status = > 404
2016-02-18 12:12:28 +00:00
return
end
user_a = connection_a . user
if user_a . nil?
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " No user found for jbid #{ jbid } " , reason : " user_a " } , :status = > 404
2016-02-18 12:12:28 +00:00
return
end
2016-02-18 17:22:50 +00:00
if user_a . id == user . id
2016-02-18 12:12:28 +00:00
render :json = > { } , :status = > 200
else
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " Users do not match for both client IDs " , reason : " can_not_pair " } , :status = > 403
2016-02-18 12:12:28 +00:00
end
end
2016-05-01 03:12:25 +00:00
def is_allowed
2016-02-18 12:12:28 +00:00
#Pass the jbid & cbid. Reply is no error on true, else error
jbid = params [ :jbid ]
2016-02-18 17:22:50 +00:00
user_id = params [ :user_id ]
2016-02-18 12:12:28 +00:00
jamblaster = Jamblaster . find_by_client_id! ( jbid )
2016-02-18 17:22:50 +00:00
user = User . find_by_id ( user_id )
2016-02-18 12:12:28 +00:00
if user . nil?
2016-05-01 03:12:25 +00:00
render :json = > { :message = > " No usepar associated with the user #{ user_id } " , reason : " user_id " } , :status = > 404
2016-02-18 12:12:28 +00:00
return
end
2017-02-12 16:52:06 +00:00
# if jamblaster && jamblaster.users.length > 0 && !user.jamblasters.include?(jamblaster)
# render :json => {reason: "jamblaster_access", message: "current user does not have access to jamblaster #{jamblaster.id}"}, status: 403
# return
# end
2016-02-18 12:12:28 +00:00
render :json = > { } , status : 200
end
def auth_users
# use by jamblaster to get all key (cid,key)* that are currently paired to it.
jbid = params [ :jbid ]
serial_no = params [ :serial_no ]
@jamblaster = Jamblaster . where ( client_id : jbid , serial_no : serial_no ) . first
if @jamblaster . nil?
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " No jamblaster found with serial_no #{ serial_no } and jbid #{ jbid } " , reason : " serial_no " } , :status = > 404
2016-02-18 12:12:28 +00:00
return
end
end
2016-02-03 16:56:14 +00:00
def get_tokens
@jamblasters = current_user . jamblasters
end
def start_pairing
jamblaster = Jamblaster . find_by_client_id ( params [ :jbid ] )
2017-01-30 03:41:33 +00:00
# allow multiple users to own a single jb
#if jamblaster && jamblaster.users.length > 0 && !current_user.jamblasters.include?(jamblaster)
# render :json => {reason: "jamblaster_access", message: "current user does not have access to jamblaster #{jamblaster.id}"}, status: 403
# return
#end
2016-02-03 16:56:14 +00:00
@pairing = JamblasterPairingRequest . new
@pairing . user = current_user
@pairing . jamblaster_client_id = params [ :jbid ]
@pairing . jamblaster = jamblaster
2016-02-18 12:12:28 +00:00
@pairing . vtoken = params [ :vtoken ]
2017-01-30 03:41:33 +00:00
puts " @PAIRING #{ @pairing . inspect } "
2016-02-03 16:56:14 +00:00
if ! @pairing . save
respond_with_model ( @pairing )
else
end
end
def login
2016-02-18 17:22:50 +00:00
user_id = params [ :user_id ]
2016-02-03 16:56:14 +00:00
jbid = params [ :jbid ]
2016-02-18 12:12:28 +00:00
vtoken = params [ :vtoken ]
2016-02-03 16:56:14 +00:00
serial_no = params [ :serial_no ]
2016-02-18 17:22:50 +00:00
pairing_request = JamblasterPairingRequest . where ( jamblaster_client_id : jbid ) . where ( user_id : user_id ) . where ( vtoken : vtoken ) . first
2016-02-03 16:56:14 +00:00
jamblaster = Jamblaster . find_by_serial_no ( serial_no )
if jamblaster . nil?
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " No jamblaster found with serial_no #{ serial_no } " , reason : " serial_no " } , :status = > 404
2016-02-03 16:56:14 +00:00
return
end
if pairing_request . nil?
2016-02-18 17:22:50 +00:00
render :json = > { :message = > " No pairing request found with jbid= #{ jbid } && user_id= #{ user_id } && vtoken= #{ vtoken } " , reason : " no_pairing_request " } , :status = > 404
2016-02-03 16:56:14 +00:00
return
end
2016-02-18 12:12:28 +00:00
render :json = > { } , :status = > 200
2016-02-03 16:56:14 +00:00
end
def store_token
vtoken = params [ :vtoken ]
scid = params [ :scid ]
jbid = params [ :jbid ]
key = params [ :key ]
pairing_request = JamblasterPairingRequest . where ( jamblaster_client_id : jbid ) . where ( sibling_client_id : scid ) . where ( sibling_key : key ) . first
if pairing_request . nil?
2016-02-18 12:12:28 +00:00
render :json = > { :message = > " No pairing request found with jbid= #{ jbid } && sibling_client_id= #{ scid } && sibling_key= #{ key } " , reason : " no_pairing_request " } , :status = > 404
2016-02-03 16:56:14 +00:00
return
end
if vtoken . blank?
2016-02-18 12:12:28 +00:00
render :json = > { :errors = > { vtoken : [ 'is empty' ] } } , :status = > 422
2016-02-03 16:56:14 +00:00
return
end
@jamblaster = pairing_request . jamblaster
@jamblaster . vtoken = vtoken
if ! @jamblaster . save
respond_with_model ( @jamblaster )
else
end
end
def pair
2016-02-18 12:12:28 +00:00
key = params [ :key ]
2016-02-03 16:56:14 +00:00
vtoken = params [ :vtoken ]
2016-02-18 17:22:50 +00:00
user_id = params [ :user_id ]
2016-02-03 16:56:14 +00:00
jbid = params [ :jbid ]
2016-02-18 12:12:28 +00:00
jamblaster = Jamblaster . find_by_client_id! ( jbid )
2016-02-03 16:56:14 +00:00
if jamblaster . nil?
2016-02-18 12:12:28 +00:00
render :json = > { reason : " no_jbid " , message : " No jamblaster found with jbid: #{ jbid } " } , status : 404
2016-02-03 16:56:14 +00:00
return
end
2016-02-18 12:12:28 +00:00
pairing_request = JamblasterPairingRequest . find_by_vtoken ( vtoken )
if pairing_request . nil?
render :json = > { :message = > " No pairing request found with vtoken= #{ vtoken } " , reason : " no_pairing_request " } , :status = > 404
return
end
2017-01-30 03:41:33 +00:00
# allow multiples users to control a single jamblaster
#if jamblaster.users.length > 0 && !pairing_request.user.jamblasters.include?(jamblaster)
# render :json => {reason: "jamblaster_access", message: "current user does not have access to jamblaster #{jamblaster.id} with vtoken #{vtoken}"}, status: 403
# return
#end
2016-02-03 16:56:14 +00:00
2016-02-26 15:04:00 +00:00
if ! jamblaster . users . include? ( pairing_request . user )
jamblaster . users << pairing_request . user
jamblaster . save!
end
2016-02-29 17:35:18 +00:00
pairing_request . activate ( key )
2016-02-26 15:04:00 +00:00
2016-02-29 17:35:18 +00:00
if pairing_request . errors . any?
2016-02-18 12:12:28 +00:00
respond_with_model ( pairing_request )
else
2016-02-18 17:22:50 +00:00
Jamblaster . send_pair_attempt ( jbid , user_id , key )
2016-02-18 12:12:28 +00:00
@jamblaster = jamblaster
end
2016-02-03 16:56:14 +00:00
end
end