blob: 2882861edf9df556ed4a8879777296982c628e19 [file] [log] [blame]
// 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_