diff options
18 files changed, 102 insertions, 114 deletions
diff --git a/app/controllers/agents/files_controller.rb b/app/controllers/agents/files_controller.rb deleted file mode 100644 index 0f493fb..0000000 --- a/app/controllers/agents/files_controller.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Agents - class FilesController < ApplicationController - before_action :load_agent - before_action do - request.format = :json - end - - def index - end - - def show - @fingerprint = params[:id] - @file = Disposition.find_by(fingerprint: params[:id]) - message = { - agent_id: params[:id], - type: :lookup, - data: params[:data] - } - Publisher.publish("events.scanned.#{@agent.id}", message) - end - - private - - def load_agent - @agent = Agent.find(params[:agent_id]) - end - end -end diff --git a/app/controllers/agents_controller.rb b/app/controllers/agents_controller.rb index a76a7ae..4acef9d 100644 --- a/app/controllers/agents_controller.rb +++ b/app/controllers/agents_controller.rb @@ -1,74 +1,48 @@ class AgentsController < ApplicationController - before_action :set_agent, only: [:show, :edit, :update, :destroy] - - # GET /agents - # GET /agents.json def index @agents = Agent.all end - # GET /agents/1 - # GET /agents/1.json def show + @agent = Agent.find(params[:id]) end - # GET /agents/new def new @agent = Agent.new end - # GET /agents/1/edit def edit + @agent = Agent.find(params[:id]) end - # POST /agents - # POST /agents.json def create @agent = Agent.new(agent_params) - respond_to do |format| - if @agent.save - format.html { redirect_to @agent, notice: 'Agent was successfully created.' } - format.json { render :show, status: :created, location: @agent } - else - format.html { render :new } - format.json { render json: @agent.errors, status: :unprocessable_entity } - end + if @agent.save + redirect_to @agent, notice: 'Agent was successfully created.' + else + render :new end end - # PATCH/PUT /agents/1 - # PATCH/PUT /agents/1.json def update - respond_to do |format| - if @agent.update(agent_params) - format.html { redirect_to @agent, notice: 'Agent was successfully updated.' } - format.json { render :show, status: :ok, location: @agent } - else - format.html { render :edit } - format.json { render json: @agent.errors, status: :unprocessable_entity } - end + @agent = Agent.find(params[:id]) + if @agent.update(agent_params) + redirect_to @agent, notice: 'Agent was successfully updated.' + else + render :edit end end - # DELETE /agents/1 - # DELETE /agents/1.json def destroy + @agent = Agent.find(params[:id]) @agent.destroy - respond_to do |format| - format.html { redirect_to agents_url, notice: 'Agent was successfully destroyed.' } - format.json { head :no_content } - end + redirect_to agents_url, notice: 'Agent was successfully destroyed.' end private - # Use callbacks to share common setup or constraints between actions. - def set_agent - @agent = Agent.find(params[:id]) - end - # Never trust parameters from the scary internet, only allow the white list through. - def agent_params - params.require(:agent).permit(:hostname) - end + def agent_params + params.require(:agent).permit(:hostname) + end end diff --git a/app/controllers/api/agents/events_controller.rb b/app/controllers/api/agents/events_controller.rb new file mode 100644 index 0000000..255a5bc --- /dev/null +++ b/app/controllers/api/agents/events_controller.rb @@ -0,0 +1,19 @@ +module Api + module Agents + class EventsController < ApplicationController + def create + @agent = Agent.find(params[:agent_id]) + message = event_params.merge({agent_id: @agent.id}) + routing_key = "events.#{event_params[:type]}.#{@agent.id}" + Publisher.publish(routing_key, message) + render nothing: true + end + + private + + def event_params + params[:event] + end + end + end +end diff --git a/app/controllers/api/agents/files_controller.rb b/app/controllers/api/agents/files_controller.rb new file mode 100644 index 0000000..fd7410c --- /dev/null +++ b/app/controllers/api/agents/files_controller.rb @@ -0,0 +1,21 @@ +module Api + module Agents + class FilesController < ApplicationController + before_action do + request.format = :json + end + + def show + @agent = Agent.find(params[:agent_id]) + @fingerprint = params[:id] + @file = Disposition.find_by(fingerprint: params[:id]) + message = { + agent_id: params[:id], + type: :lookup, + data: params[:data] + } + Publisher.publish("events.scanned.#{@agent.id}", message) + end + end + end +end diff --git a/app/controllers/api/agents_controller.rb b/app/controllers/api/agents_controller.rb new file mode 100644 index 0000000..16174b1 --- /dev/null +++ b/app/controllers/api/agents_controller.rb @@ -0,0 +1,15 @@ +module Api + class AgentsController < ApplicationController + #before_action do + #request.format = :json + #end + + def create + @agent = Agent.create!(agent_params) + end + + def agent_params + params.require(:agent).permit(:hostname) + end + end +end diff --git a/app/controllers/dispositions_controller.rb b/app/controllers/dispositions_controller.rb index 116b7bb..17f8657 100644 --- a/app/controllers/dispositions_controller.rb +++ b/app/controllers/dispositions_controller.rb @@ -1,68 +1,46 @@ class DispositionsController < ApplicationController before_action :set_disposition, only: [:show, :edit, :update, :destroy] - # GET /dispositions - # GET /dispositions.json def index @dispositions = Disposition.all end - # GET /dispositions/1 - # GET /dispositions/1.json def show end - # GET /dispositions/new def new @disposition = Disposition.new @states = Disposition.states end - # GET /dispositions/1/edit def edit @states = Disposition.states end - # POST /dispositions - # POST /dispositions.json def create fingerprint = disposition_params[:fingerprint] Publisher.publish("commands.poke.#{fingerprint}", disposition_params) - respond_to do |format| - format.html { redirect_to dispositions_path, notice: 'Disposition was successfully created.' } - format.json { head :no_content } - end + redirect_to dispositions_path, notice: 'Disposition was successfully created.' end - # PATCH/PUT /dispositions/1 - # PATCH/PUT /dispositions/1.json def update Publisher.publish("poke", disposition_params) - respond_to do |format| - format.html { redirect_to dispositions_path, notice: 'Disposition was successfully updated.' } - format.json { head :no_content } - end + redirect_to dispositions_path, notice: 'Disposition was successfully updated.' end - # DELETE /dispositions/1 - # DELETE /dispositions/1.json def destroy @disposition.destroy - respond_to do |format| - format.html { redirect_to dispositions_url, notice: 'Disposition was successfully destroyed.' } - format.json { head :no_content } - end + redirect_to dispositions_url, notice: 'Disposition was successfully destroyed.' end private - # Use callbacks to share common setup or constraints between actions. - def set_disposition - @disposition = Disposition.find_by(fingerprint: params[:id]) - end - # Never trust parameters from the scary internet, only allow the white list through. - def disposition_params - params.require(:disposition).permit(:fingerprint, :state) - end + def set_disposition + @disposition = Disposition.find_by(fingerprint: params[:id]) + end + + def disposition_params + params.require(:disposition).permit(:fingerprint, :state) + end end diff --git a/app/models/agent.rb b/app/models/agent.rb index e5832da..d33a970 100644 --- a/app/models/agent.rb +++ b/app/models/agent.rb @@ -1,3 +1,3 @@ class Agent < ActiveRecord::Base - has_many :events + has_many :events, dependent: :destroy end diff --git a/app/models/event.rb b/app/models/event.rb index 3e55383..0377c25 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -1,3 +1,4 @@ class Event < ActiveRecord::Base belongs_to :agent + validates_presence_of :agent end diff --git a/app/views/agents/show.json.jbuilder b/app/views/api/agents/create.json.jbuilder index f156cb0..f156cb0 100644 --- a/app/views/agents/show.json.jbuilder +++ b/app/views/api/agents/create.json.jbuilder diff --git a/app/views/agents/files/index.json.jbuilder b/app/views/api/agents/files/index.json.jbuilder index 6551a44..6551a44 100644 --- a/app/views/agents/files/index.json.jbuilder +++ b/app/views/api/agents/files/index.json.jbuilder diff --git a/app/views/agents/files/show.json.jbuilder b/app/views/api/agents/files/show.json.jbuilder index 8c6f501..8c6f501 100644 --- a/app/views/agents/files/show.json.jbuilder +++ b/app/views/api/agents/files/show.json.jbuilder diff --git a/app/views/agents/index.json.jbuilder b/app/views/api/agents/index.json.jbuilder index 65f6f60..65f6f60 100644 --- a/app/views/agents/index.json.jbuilder +++ b/app/views/api/agents/index.json.jbuilder diff --git a/app/views/dispositions/index.json.jbuilder b/app/views/dispositions/index.json.jbuilder deleted file mode 100644 index d4350e1..0000000 --- a/app/views/dispositions/index.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.array!(@dispositions) do |disposition| - json.extract! disposition, :fingerprint, :state - json.url disposition_url(disposition, format: :json) -end diff --git a/app/views/dispositions/show.json.jbuilder b/app/views/dispositions/show.json.jbuilder deleted file mode 100644 index 7046781..0000000 --- a/app/views/dispositions/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.extract! @disposition, :fingerprint, :state diff --git a/config/routes.rb b/config/routes.rb index ae0a4cb..9092e9b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,13 @@ Rails.application.routes.draw do resources :files, only: [:index, :show], controller: 'agents/files' end + namespace :api do + resources :agents, only: [:create] do + resources :events, only: [:create], controller: 'agents/events' + resources :files, only: [:show], controller: 'agents/files' + end + end + resources :dispositions root 'agents#index' end diff --git a/db/migrate/20150204042612_add_agent_id_to_events.rb b/db/migrate/20150204042612_add_agent_id_to_events.rb index 40b4125..957473e 100644 --- a/db/migrate/20150204042612_add_agent_id_to_events.rb +++ b/db/migrate/20150204042612_add_agent_id_to_events.rb @@ -1,5 +1,6 @@ class AddAgentIdToEvents < ActiveRecord::Migration def change - add_reference :events, :agent, index: true + add_column :events, :agent_id, :uuid, null: false + add_index :events, :agent_id end end diff --git a/db/schema.rb b/db/schema.rb index d62cc41..2621851 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -30,12 +30,14 @@ ActiveRecord::Schema.define(version: 20150207194524) do t.datetime "updated_at", null: false end + add_index "dispositions", ["fingerprint"], name: "index_dispositions_on_fingerprint", unique: true, using: :btree + create_table "events", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t| t.string "type" t.json "data" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "agent_id" + t.uuid "agent_id", null: false end add_index "events", ["agent_id"], name: "index_events_on_agent_id", using: :btree diff --git a/lib/fake_agent.rb b/lib/fake_agent.rb index f5ce3db..ecc9e47 100644 --- a/lib/fake_agent.rb +++ b/lib/fake_agent.rb @@ -10,8 +10,7 @@ class FakeAgent end def register - url = "#{endpoint}/agents.json" - response = Typhoeus.post(url, body: { agent: { hostname: Socket.gethostname } }) + response = Typhoeus.post(registration_url, body: { agent: { hostname: Socket.gethostname } }) json = JSON.parse(response.body) @id = json["id"] end @@ -113,10 +112,14 @@ class FakeAgent end def file_query_url(fingerprint) - "#{endpoint}/agents/#{id}/files/#{fingerprint}" + "#{endpoint}/api/agents/#{id}/files/#{fingerprint}" end def event_url - "#{endpoint}/agents/#{id}/events/" + "#{endpoint}/api/agents/#{id}/events/" + end + + def registration_url + "#{endpoint}/api/agents" end end |
