diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/contact.cpp | 14 | ||||
-rw-r--r-- | src/identity.h | 31 |
2 files changed, 9 insertions, 36 deletions
diff --git a/src/contact.cpp b/src/contact.cpp index 01aa710..9ab5699 100644 --- a/src/contact.cpp +++ b/src/contact.cpp @@ -91,7 +91,7 @@ Digest Contact::leastRoot() const void Contact::Priv::init() { std::call_once(initFlag, [this]() { - vector<Stored<Signed<IdentityData>>> idata; + vector<StoredIdentityPart> idata; for (const auto & c : findPropertyComponents<Contact>(data, "identity")) for (const auto & i : c->identity) idata.push_back(i); @@ -111,9 +111,13 @@ ContactData ContactData::load(const Ref & ref) if (!rec) return ContactData(); + vector<StoredIdentityPart> identity; + for (const auto & r : rec->items("identity").asRef()) + identity.push_back(StoredIdentityPart::load(r)); + return ContactData { .prev = rec->items("PREV").as<ContactData>(), - .identity = rec->items("identity").as<Signed<IdentityData>>(), + .identity = move(identity), .name = rec->item("name").asText(), }; } @@ -125,7 +129,7 @@ Ref ContactData::store(const Storage & st) const for (const auto & prev : prev) items.emplace_back("PREV", prev.ref()); for (const auto & idt : identity) - items.emplace_back("identity", idt); + items.emplace_back("identity", idt.ref()); if (name) items.emplace_back("name", *name); @@ -155,7 +159,7 @@ Stored<ContactAccepted> ContactService::handlePairingComplete(const Peer & peer) server.localHead().update([&] (const Stored<LocalState> & local) { auto cdata = local.ref().storage().store(ContactData { .prev = {}, - .identity = peer.identity()->finalOwner().data(), + .identity = peer.identity()->finalOwner().extData(), .name = std::nullopt, }); @@ -176,7 +180,7 @@ void ContactService::handlePairingResult(Context & ctx, Stored<ContactAccepted>) { auto cdata = ctx.local().ref().storage().store(ContactData { .prev = {}, - .identity = ctx.peer().identity()->finalOwner().data(), + .identity = ctx.peer().identity()->finalOwner().extData(), .name = std::nullopt, }); diff --git a/src/identity.h b/src/identity.h index c3d9e2c..1653f51 100644 --- a/src/identity.h +++ b/src/identity.h @@ -15,37 +15,6 @@ using std::vector; namespace erebos { -struct IdentityData; -struct IdentityExtension; - -struct StoredIdentityPart -{ - using Part = variant< - Stored<Signed<IdentityData>>, - Stored<Signed<IdentityExtension>>>; - - StoredIdentityPart(Part p): part(move(p)) {} - - static StoredIdentityPart load(const Ref &); - Ref store(const Storage & st) const; - - bool operator==(const StoredIdentityPart & other) const - { return part == other.part; } - bool operator<(const StoredIdentityPart & other) const - { return part < other.part; } - - const Ref & ref() const; - const Stored<Signed<IdentityData>> & base() const; - - vector<StoredIdentityPart> previous() const; - vector<Digest> roots() const; - optional<string> name() const; - optional<StoredIdentityPart> owner() const; - bool isSignedBy(const Stored<PublicKey> &) const; - - Part part; -}; - struct IdentityData { static IdentityData load(const Ref &); |