From b8ba4f27a82868e0b3338b4af761f7c44226e729 Mon Sep 17 00:00:00 2001 From: Azul Date: Mon, 15 Jan 2018 18:21:44 +0100 Subject: (WIP) first steps towards implementing keys API --- app/controllers/api/keys_controller.rb | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 app/controllers/api/keys_controller.rb (limited to 'app/controllers/api/keys_controller.rb') diff --git a/app/controllers/api/keys_controller.rb b/app/controllers/api/keys_controller.rb new file mode 100644 index 0000000..d4cb759 --- /dev/null +++ b/app/controllers/api/keys_controller.rb @@ -0,0 +1,63 @@ +class Api::KeysController < ApiController + + before_filter :require_login + before_filter :require_enabled + + # get /keys + def index + keys = identity.keys.map do |k,v| + [k, JSON.parse(v)] + end + render json: keys.to_h + end + + def show + render json: JSON.parse(identity.keys[params[:id]]) + end + + def create + keyring.create type, value + head :no_content + rescue Keyring::Error, ActionController::ParameterMissing => e + render status: 422, json: {error: e.message} + end + + def update + keyring.update type, rev: rev, value: value + head :no_content + rescue Keyring::Error, ActionController::ParameterMissing => e + render status: 422, json: {error: e.message} + end + + protected + + def require_enabled + if !current_user.enabled? + access_denied + end + end + + def service_level + current_user.effective_service_level + end + + def type + params.require :type + end + + def value + params.require :value + end + + def rev + params.require :rev + end + + def keyring + @keyring ||= Keyring.new identity + end + + def identity + @identity ||= Identity.for(current_user) + end +end -- cgit v1.2.3 From 54653f75cf44890310a06c3a8a6be59625629d2a Mon Sep 17 00:00:00 2001 From: Azul Date: Fri, 19 Jan 2018 14:11:24 +0100 Subject: API: implement deleting keys through new keys api --- app/controllers/api/keys_controller.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'app/controllers/api/keys_controller.rb') diff --git a/app/controllers/api/keys_controller.rb b/app/controllers/api/keys_controller.rb index d4cb759..7eb76ee 100644 --- a/app/controllers/api/keys_controller.rb +++ b/app/controllers/api/keys_controller.rb @@ -25,10 +25,22 @@ class Api::KeysController < ApiController def update keyring.update type, rev: rev, value: value head :no_content + rescue Keyring::NotFound => e + render status: 404, json: {error: e.message} rescue Keyring::Error, ActionController::ParameterMissing => e render status: 422, json: {error: e.message} end + def destroy + keyring.delete type, rev: rev + head :no_content + rescue Keyring::NotFound => e + render status: 404, json: {error: e.message} + rescue Keyring::Error, ActionController::ParameterMissing => e + render status: 422, json: {error: e.message} + end + + protected def require_enabled -- cgit v1.2.3