class ArsesController < ApplicationController respond_to :json def index if params[:code] != Rails.application.config.data_dump_code render :json => {error: "Unauthorized"}, :status => 401 return end @arses = JamRuby::Ars.all render :json => @arses end def update if params[:code] != Rails.application.config.data_dump_code render :json => {error: "Unauthorized"}, :status => 401 return end begin # Primary ID lookup @ars = JamRuby::Ars.find_by_id(params[:id]) # Explicit secondary lookups if primary ID fails @ars ||= JamRuby::Ars.find_by_id_int(params[:id_int]) if params[:id_int] @ars ||= JamRuby::Ars.find_by_name(params[:name]) if params[:name] if @ars.nil? render :json => {error: "Not Found"}, :status => 404 return end allowed = [:password, :username, :active, :beta, :name, :provider, :id_int, :ip, :port, :continent, :country, :city, :subdivision, :latitude, :longitude] update_hash = {} allowed.each do |attr| update_hash[attr] = params[attr] if params.has_key?(attr) end if @ars.update_attributes(update_hash, as: :admin) render :json => @ars, :status => :ok else render :json => @ars.errors, :status => :unprocessable_entity end rescue => e render :json => {error: e.message, backtrace: e.backtrace.first(5)}, :status => 500 end end # create or update a client_artifact row def get_or_create begin name = params[:name] provider = params[:provider] active = params[:active] ip = params[:ip] username = params[:username] password = params[:password] topology = params[:topology] ars_id = params[:ars_id] # Explicit field-based lookups ars = nil ars = JamRuby::Ars.find_by_id_int(ars_id) if ars_id ars ||= JamRuby::Ars.find_by_name(name) if name if ars.nil? ars = JamRuby::Ars.new ars.name = name end ars.id_int = ars_id if !ars_id.nil? ars.provider = provider ars.active = active ars.ip = ip ars.password = password ars.username = username if topology ars.city = topology['city'] ars.country = topology['country'] ars.continent = topology['continent'] ars.latitude = topology['latitude'] ars.longitude = topology['longitude'] ars.subdivision = topology['subdivision'] end ars.save! @ars = ars render :json => {id_int: @ars.id_int, id: @ars.id, name: @ars.name, provider: @ars.provider, active: @ars.active, ip: @ars.ip}, :status => :ok rescue => e render :json => {error: e.message, backtrace: e.backtrace.first(5)}, :status => 500 end end end