Files
Keys/src/Logic/PasswordStoreService.cs

82 lines
2.2 KiB
C#
Raw Normal View History

2025-09-22 13:08:08 +02:00
using Models;
using Repository;
namespace Logic;
public class PasswordStoreService : IPasswordStoreService
{
private readonly IRepository repository;
private readonly ISecretService secretService;
2025-09-22 13:08:08 +02:00
public PasswordStoreService(IRepository repository, ISecretService secretService)
2025-09-30 11:31:38 +02:00
{
this.repository = repository;
this.secretService = secretService;
2025-09-30 11:31:38 +02:00
}
2025-09-22 15:35:31 +02:00
public void Create(PasswordStore item)
2025-09-22 13:08:08 +02:00
{
secretService.CreateCollection(item.DisplayName ?? item.Path);
repository.Create(item);
2025-09-22 13:08:08 +02:00
}
2025-09-22 15:35:31 +02:00
public void Delete(uint ID)
2025-09-22 13:08:08 +02:00
{
repository.Delete(ID);
2025-09-22 13:08:08 +02:00
}
2025-09-22 15:35:31 +02:00
public void Delete(PasswordStore item)
2025-09-22 13:08:08 +02:00
{
2025-09-22 15:35:31 +02:00
Delete(item.ID);
2025-09-22 13:08:08 +02:00
}
2025-09-22 15:35:31 +02:00
public void Edit(uint ID, PasswordStore newItem)
2025-09-22 13:08:08 +02:00
{
repository.Delete(ID);
newItem.ID = ID;
repository.Create(newItem);
2025-09-22 13:08:08 +02:00
}
public PasswordStore Get(uint ID)
{
return repository.GetAll().FirstOrDefault(i => i.ID == ID) ?? throw new Exception("Item not found");
2025-09-22 13:08:08 +02:00
}
public IEnumerable<PasswordStore> GetAll()
{
List<PasswordStore> jsonResults = repository.GetAll();
//Validate against actual secret collections
var collections = secretService.GetCollections() ?? Enumerable.Empty<Secret.Collection>();
// Identify bookmarks that do NOT match any existing Secret collection.
var toDelete = new List<uint>();
foreach (var ps in jsonResults)
{
var key = string.IsNullOrWhiteSpace(ps.DisplayName) ? ps.Path : ps.DisplayName;
if (string.IsNullOrWhiteSpace(key))
{
// No reasonable key to match — schedule for deletion
toDelete.Add(ps.ID);
continue;
}
var exists = collections.Any(c => string.Equals(c.Label, key, StringComparison.OrdinalIgnoreCase));
if (!exists)
{
toDelete.Add(ps.ID);
}
}
// Perform deletions from repository for all missing bookmarks
foreach (var id in toDelete)
{
repository.Delete(id);
}
var remaining = jsonResults.Where(ps => !toDelete.Contains(ps.ID)).ToList();
return remaining;
2025-09-22 13:08:08 +02:00
}
}