From 8613a03d00f809d68ebf5f29ba8ab65aa55c390a Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 16 Feb 2026 09:05:12 -0600 Subject: [PATCH] ok fix the API more --- admin/app/controllers/arses_controller.rb | 121 +++++++++++----------- ruby/lib/jam_ruby/models/ars.rb | 5 +- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/admin/app/controllers/arses_controller.rb b/admin/app/controllers/arses_controller.rb index a04ee43b2..38cc365ee 100644 --- a/admin/app/controllers/arses_controller.rb +++ b/admin/app/controllers/arses_controller.rb @@ -8,7 +8,7 @@ class ArsesController < ApplicationController return end - @arses = Ars.all + @arses = JamRuby::Ars.all render :json => @arses end @@ -18,75 +18,78 @@ class ArsesController < ApplicationController return end - @ars = Ars.find_by_id(params[:id]) - if @ars.nil? - render :json => {error: "Not Found"}, :status => 404 - 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] - 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.nil? + render :json => {error: "Not Found"}, :status => 404 + return + end - if @ars.update_attributes(update_hash, as: :admin) - render :json => @ars, :status => :ok - else - render :json => @ars.errors, :status => :unprocessable_entity + 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 - 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] - puts "TOPOLOGY #{topology}" + 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] - if ars_id - ars = Ars.find_by_id_int(ars_id) - end - if ars.nil? - ars = Ars.new - ars.name = name - ars.id_int = ars_id if !ars_id.nil? - end + # 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 - 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 - unless @ars.errors.any? - if ars_id.nil? - ars.reload - ars_id = ars.id_int + if ars.nil? + ars = JamRuby::Ars.new + ars.name = name end - @ars = Ars.find_by_id_int(ars_id) - render :json => {id_int: @ars.id_int, id: @ars.id, name: @ars.name, provider: @ars.provider, active: @ars.active, ip: @ars.ip}, :status => :ok - else - response.status = :unprocessable_entity - respond_with @ars - 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 diff --git a/ruby/lib/jam_ruby/models/ars.rb b/ruby/lib/jam_ruby/models/ars.rb index 148ef8b30..0916bf27e 100644 --- a/ruby/lib/jam_ruby/models/ars.rb +++ b/ruby/lib/jam_ruby/models/ars.rb @@ -1,8 +1,7 @@ - module JamRuby class Ars < ActiveRecord::Base - attr_accessible :active, :name, :id_int, :ip, as: :admin + attr_accessible :password, :username, :active, :beta, :name, :provider, :id_int, :ip, :port, :continent, :country, :city, :subdivision, :latitude, :longitude, as: :admin self.table_name = "arses" @@log = Logging.logger[Ars] @@ -11,4 +10,4 @@ module JamRuby Ars.where(active: true, beta: beta).where('ip is not NULL').where("ip != ''").all end end -end \ No newline at end of file +end