Skip to content
Snippets Groups Projects
Commit b58c2d84 authored by azul's avatar azul
Browse files

Merge branch 'feature/different-keytypes' into 'master'

couch: add identity view to get all keys

See merge request !61
parents a6e03786 a55cc365
No related branches found
No related tags found
1 merge request!61couch: add identity view to get all keys
Pipeline #
......@@ -5,14 +5,11 @@ class Api::KeysController < ApiController
# get /keys
def index
keys = identity.keys.map do |k,v|
[k, JSON.parse(v)]
end
render json: keys.to_h
render json: identity.keys
end
def show
render json: JSON.parse(identity.keys[params[:id]])
render json: identity.keys[params[:id]]
end
def create
......
......@@ -112,7 +112,7 @@ module Api
PgpKey.new(key).tap do |key|
if key.valid?
identity = Identity.for(@user)
identity.set_key(:pgp, key)
identity.set_key(:pgp, key.to_s)
identity.save
end
end
......
function(doc) {
if (doc.type != 'Identity') {
return;
}
if (typeof doc.keys === "object") {
emit(doc.address, doc.keys);
}
}
......@@ -131,9 +131,10 @@ class Identity < CouchRest::Model::Base
read_attribute('keys') || HashWithIndifferentAccess.new
end
def set_key(type, key)
return if keys[type] == key.to_s
write_attribute('keys', keys.merge(type => key.to_s))
def set_key(type, key_hash)
key_hash.stringify_keys! if key_hash.respond_to? :stringify_keys!
return if keys[type] == key_hash
write_attribute('keys', keys.merge(type => key_hash))
end
def delete_key(type)
......
......@@ -20,13 +20,13 @@ class Keyring
def create(type, value)
raise Error, "key already exists" if storage.keys[type].present?
storage.set_key type, {type: type, value: value, rev: new_rev}.to_json
storage.set_key type, {type: type, value: value, rev: new_rev}
storage.save
end
def update(type, rev:, value:)
check_rev type, rev
storage.set_key type, {type: type, value: value, rev: new_rev}.to_json
storage.set_key type, {type: type, value: value, rev: new_rev}
storage.save
end
......@@ -37,7 +37,7 @@ class Keyring
end
def key_of_type(type)
JSON.parse(storage.keys[type]) if storage.keys[type]
storage.keys[type]
end
protected
......@@ -46,6 +46,9 @@ class Keyring
def check_rev(type, rev)
old = key_of_type(type)
raise NotFound, type unless old
# We used to store plain strings. It's deprecated now.
# If we happen to run into them do not check their revision.
return if old.is_a? String
raise Error, "wrong revision: #{rev}" unless old['rev'] == rev
end
......
......@@ -16,7 +16,7 @@ Then /^I should have published an? "([^"]*)" key(?: with value "([^"]*)")?$/ do
identity = Identity.for(@user)
keys = identity.keys
assert_includes keys.keys, type
assert_equal value, JSON.parse(keys[type])['value'] if value
assert_equal value, keys[type]['value'] if value
end
Then /^I should not have published an? "([^"]*)" key$/ do |type|
......
......@@ -82,8 +82,8 @@ class KeyringTest < ActiveSupport::TestCase
def teststorage
@teststorage ||= Hash.new.tap do |dummy|
def dummy.set_key(type, value)
self[type] = value
def dummy.set_key(type, hash)
self[type] = hash.stringify_keys
end
def dummy.keys
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment