summaryrefslogtreecommitdiff
path: root/app/controllers/api/keys_controller.rb
diff options
context:
space:
mode:
authorazul <azul@riseup.net>2018-01-28 08:37:45 -0800
committerazul <azul@riseup.net>2018-01-28 08:37:45 -0800
commit19606ec31d7a1606b5e9fc4df2440a6b470e9d97 (patch)
tree3a1c851033c46e1a140de3e3b5a17ad4b7f2647e /app/controllers/api/keys_controller.rb
parentf77e48b1ffdc2350c454ced2fe1eba6446f7bc76 (diff)
parent54653f75cf44890310a06c3a8a6be59625629d2a (diff)
Merge branch 'feature/different-keytypes' into 'master'
initial feature description for key uploads See merge request leap/webapp!58
Diffstat (limited to 'app/controllers/api/keys_controller.rb')
-rw-r--r--app/controllers/api/keys_controller.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/app/controllers/api/keys_controller.rb b/app/controllers/api/keys_controller.rb
new file mode 100644
index 0000000..7eb76ee
--- /dev/null
+++ b/app/controllers/api/keys_controller.rb
@@ -0,0 +1,75 @@
+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::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
+ 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