diff --git a/internal/platform/implementation/credential_storage.h b/internal/platform/implementation/credential_storage.h index 5c0af512..b8fb2459 100644 --- a/internal/platform/implementation/credential_storage.h +++ b/internal/platform/implementation/credential_storage.h @@ -21,6 +21,7 @@ #include "absl/strings/string_view.h" #include "internal/platform/implementation/credential_callbacks.h" #include "internal/proto/credential.pb.h" +#include "internal/proto/local_credential.pb.h" namespace nearby { namespace api { diff --git a/presence/implementation/credential_manager.h b/presence/implementation/credential_manager.h index a758ae20..01cadc6c 100644 --- a/presence/implementation/credential_manager.h +++ b/presence/implementation/credential_manager.h @@ -95,6 +95,18 @@ class CredentialManager { virtual std::string DecryptMetadata(absl::string_view metadata_encryption_key, absl::string_view key_seed, absl::string_view metadata_string) = 0; + + // Sets the NP service's device metadata, regenerating credentials if + // `regen_credentials` is set to true. + virtual void SetLocalDeviceMetadata( + const ::nearby::internal::Metadata& metadata, bool regen_credentials, + absl::string_view manager_app_id, + const std::vector& identity_types, + int credential_life_cycle_days, int contiguous_copy_of_credentials, + GenerateCredentialsResultCallback credentials_generated_cb) = 0; + + // Gets the NP service's device metadata. + virtual ::nearby::internal::Metadata GetLocalDeviceMetadata() = 0; }; } // namespace presence diff --git a/presence/implementation/credential_manager_impl.h b/presence/implementation/credential_manager_impl.h index 673de9f8..25f96ac2 100644 --- a/presence/implementation/credential_manager_impl.h +++ b/presence/implementation/credential_manager_impl.h @@ -31,6 +31,7 @@ #include "internal/platform/runnable.h" #include "internal/platform/single_thread_executor.h" #include "internal/proto/credential.pb.h" +#include "internal/proto/metadata.proto.h" #include "presence/implementation/credential_manager.h" namespace nearby { @@ -127,6 +128,24 @@ class CredentialManagerImpl : public CredentialManager { std::vector ExtendMetadataEncryptionKey( absl::string_view metadata_encryption_key); + void SetLocalDeviceMetadata( + const Metadata& metadata, bool regen_credentials, + absl::string_view manager_app_id, + const std::vector& identity_types, + int credential_life_cycle_days, int contiguous_copy_of_credentials, + GenerateCredentialsResultCallback credentials_generated_cb) override { + metadata_ = metadata; + if (regen_credentials) { + GenerateCredentials( + metadata, manager_app_id, identity_types, credential_life_cycle_days, + contiguous_copy_of_credentials, std::move(credentials_generated_cb)); + } + } + + ::nearby::internal::Metadata GetLocalDeviceMetadata() override { + return metadata_; + } + private: struct SubscriberKey { CredentialSelector credential_selector; @@ -185,6 +204,7 @@ class CredentialManagerImpl : public CredentialManager { ABSL_GUARDED_BY(*executor_); SingleThreadExecutor* executor_; std::unique_ptr credential_storage_ptr_; + Metadata metadata_; }; } // namespace presence