| // Copyright 2022 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "hermes/euicc_cache.h" |
| |
| #include <string> |
| |
| #include <base/logging.h> |
| |
| namespace { |
| |
| constexpr std::string_view kCachePath = "/var/cache/hermes/"; |
| |
| base::FilePath GetCachePath(int physical_slot) { |
| return base::FilePath(std::string(kCachePath)) |
| .Append(std::to_string(physical_slot)); |
| } |
| |
| } // namespace |
| |
| namespace hermes { |
| |
| bool EuiccCache::CacheExists(int physical_slot) { |
| return base::PathExists(GetCachePath(physical_slot)); |
| } |
| |
| bool EuiccCache::Read(int physical_slot, CachedEuicc* cached_euicc) { |
| base::File journal_file(GetCachePath(physical_slot), |
| base::File::FLAG_OPEN | base::File::FLAG_READ); |
| |
| if (!journal_file.IsValid()) { |
| LOG(ERROR) << "Could not open cache file"; |
| return false; |
| } |
| return brillo::ReadTextProtobuf(journal_file.GetPlatformFile(), cached_euicc); |
| } |
| |
| bool EuiccCache::Write(int physical_slot, CachedEuicc euicc) { |
| base::File journal_file( |
| GetCachePath(physical_slot), |
| base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); |
| if (!journal_file.IsValid()) { |
| LOG(ERROR) << "Could not open journal file"; |
| return false; |
| } |
| journal_file.Seek(base::File::FROM_BEGIN, 0); |
| return brillo::WriteTextProtobuf(journal_file.GetPlatformFile(), euicc); |
| } |
| |
| } // namespace hermes |