| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef BIOD_CROS_FP_SESSION_MANAGER_H_ | |
| #define BIOD_CROS_FP_SESSION_MANAGER_H_ | |
| #include <memory> | |
| #include <optional> | |
| #include <string> | |
| #include <vector> | |
| #include "biod/biod_storage.h" | |
| #include "biod/cros_fp_record_manager.h" | |
| namespace biod { | |
| class CrosFpSessionManager { | |
| public: | |
| struct SessionRecord { | |
| BiodStorageInterface::RecordMetadata record_metadata; | |
| VendorTemplate tmpl; | |
| }; | |
| virtual ~CrosFpSessionManager() = default; | |
| // Get the user id of the current session. | |
| virtual const std::optional<std::string>& GetUser() const = 0; | |
| // Start a user session for the specified user id. Old session will be wiped. | |
| virtual bool LoadUser(std::string user_id) = 0; | |
| // Wipe the current user session. | |
| virtual void UnloadUser() = 0; | |
| // Return the record with |record_id|, if exists for the current user. | |
| virtual std::optional<SessionRecord> GetRecordWithId( | |
| const std::string& record_id) = 0; | |
| // Add a record to the current user session. It should persist the record both | |
| // on disk and in memory. It will fail if no user session exists. | |
| virtual bool CreateRecord(const BiodStorageInterface::RecordMetadata& record, | |
| std::unique_ptr<VendorTemplate> templ) = 0; | |
| // Update a record that belongs to the current user session. It should modify | |
| // the record both on disk and in memory. It will fail if no user session | |
| // exists. | |
| virtual bool UpdateRecord( | |
| const BiodStorageInterface::RecordMetadata& record_metadata, | |
| std::unique_ptr<VendorTemplate> templ) = 0; | |
| // Return whether a record with |record_id| exists for the current user. | |
| virtual bool HasRecordId(const std::string& record_id) = 0; | |
| // Delete the record with |record_id|. It will fail if no user session exists. | |
| virtual bool DeleteRecord(const std::string& record_id) = 0; | |
| // Delete a record from persistent storage directly. The record mustn't be in | |
| // the in-memory records, so that we don't lose sync with disk. | |
| virtual bool DeleteNotLoadedRecord(const std::string& user_id, | |
| const std::string& record_id) = 0; | |
| // Get all of the templates that belong to the current user session. It will | |
| // return an empty list if no user session exists. | |
| virtual const std::vector<SessionRecord>& GetRecords() const = 0; | |
| // Get the idx-th record metadata. | |
| virtual std::optional<BiodStorageInterface::RecordMetadata> GetRecordMetadata( | |
| size_t idx) const = 0; | |
| // Get the number of templates that belong to the current user session. It | |
| // will return 0 no user session exists. | |
| virtual size_t GetNumOfTemplates() = 0; | |
| }; | |
| } // namespace biod | |
| #endif // BIOD_CROS_FP_SESSION_MANAGER_H_ |