jam-cloud/web/app/controllers/api_jamblasters_controller.rb

196 lines
5.8 KiB
Ruby

class ApiJamblastersController < ApiController
before_filter :api_signed_in_user, except: [:login, :store_token, :auth_users, :can_pair, :is_allowed]
respond_to :json
# called from jamblaster
def can_pair
cid_a = params[:cid_a]
cid_b = params[:cid_b]
connection_a = nil
connection_b = nil
connection_a = Connection.find_by_client_id(cid_a) if cid_a
connection_b = Connection.find_by_client_id(cid_b) if cid_b
if connection_a.nil?
render :json => {:message => 'No connection found with client_id ' + cid_a, reason: "cid_a"}, :status => 404
return
end
if connection_b.nil?
render :json => {:message => 'No connection found with client_id ' + cid_b, reason: "cid_b"}, :status => 404
return
end
user_a = connection_a.user
user_b = connection_b.user
if user_a.nil?
render :json => {:message => 'No connection found with client_id ' + user_a, reason: "user_a"}, :status => 404
return
end
if user_b.nil?
render :json => {:message => 'No connection found with client_id ' + user_b, reason: "user_b"}, :status => 404
return
end
if user_a.id == user_b.id
render :json => {}, :status => 200
else
render :json => {:message => 'Users do not match for both client IDs', reason: "can_not_pair"}, :status => 403
end
end
def is_allowed
#Pass the jbid & cbid. Reply is no error on true, else error
jbid = params[:jbid]
cbid = params[:cbid]
jamblaster = Jamblaster.find_by_client_id!(jbid)
connection = Connection.find_by_client_id(cbid)
if connection.nil?
render :json => {:message => 'No connection found with client_id ' + cbid, reason: "cbid"}, :status => 404
return
end
user = connection.user
if user.nil?
render :json => {:message => 'No user associated with the connection ' + cbid, reason: "cbid"}, :status => 404
return
end
if jamblaster && !user.jamblasters.include?(jamblaster)
render :json => {reason: "jamblaster_access", message: "current user does not have access to jamblaster #{jamblaster.id}"}, status: 403
return
end
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?
render :json => {:message => 'No jamblaster found with serial_no ' + serial_no + ' and jbid' + jbid, reason: "serial_no"}, :status => 404
return
end
end
def get_tokens
@jamblasters = current_user.jamblasters
end
def start_pairing
jamblaster = Jamblaster.find_by_client_id(params[:jbid])
if jamblaster && !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
@pairing = JamblasterPairingRequest.new
@pairing.user = current_user
@pairing.jamblaster_client_id = params[:jbid]
@pairing.jamblaster = jamblaster
@pairing.sibling_client_id = params[:scid]
@pairing.vtoken = params[:vtoken]
if !@pairing.save
respond_with_model(@pairing)
else
end
end
def login
scid = params[:scid]
jbid = params[:jbid]
vtoken = params[:vtoken]
serial_no = params[:serial_no]
pairing_request = JamblasterPairingRequest.where(jamblaster_client_id: jbid).where(sibling_client_id: scid).where(vtoken: vtoken).first
jamblaster = Jamblaster.find_by_serial_no(serial_no)
if jamblaster.nil?
render :json => {:message => 'No jamblaster found with serial_no ' + serial_no, reason: "serial_no"}, :status => 404
return
end
if pairing_request.nil?
render :json => {:message => "No pairing request found with jbid=#{jbid} && sibling_client_id=#{scid} && vtoken=#{vtokne}", reason: "no_pairing_request"}, :status => 404
return
end
render :json => {}, :status => 200
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?
render :json => {:message => "No pairing request found with jbid=#{jbid} && sibling_client_id=#{scid} && sibling_key=#{key}", reason: "no_pairing_request"}, :status => 404
return
end
if vtoken.blank?
render :json => {:errors => {vtoken: ['is empty']}}, :status => 422
return
end
@jamblaster = pairing_request.jamblaster
@jamblaster.vtoken = vtoken
if !@jamblaster.save
respond_with_model(@jamblaster)
else
end
end
def pair
key = params[:key]
vtoken = params[:vtoken]
scid = params[:scid]
jbid = params[:jbid]
jamblaster = Jamblaster.find_by_client_id!(jbid)
if jamblaster.nil?
render :json => {reason: "no_jbid", message: "No jamblaster found with jbid:#{jbid}"}, status: 404
return
end
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
if !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
pairing_request.sibling_key = key
if !pairing_request.save
respond_with_model(pairing_request)
else
Jamblaster.send_pair_attempt(jbid, scid, key)
@jamblaster = jamblaster
end
end
end