Partial implementation of SecretService

This commit is contained in:
2025-10-28 11:36:13 +01:00
parent 0e01b34ea8
commit 2910421d48
5 changed files with 46 additions and 1 deletions

View File

@@ -29,6 +29,7 @@ class Program
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddSingleton<IPasswordStoreService, PasswordStoreService>(); services.AddSingleton<IPasswordStoreService, PasswordStoreService>();
services.AddSingleton<IRepository, JsonRepository>(); services.AddSingleton<IRepository, JsonRepository>();
services.AddSingleton<ISecretService, SecretService>();
return services.BuildServiceProvider(); return services.BuildServiceProvider();
} }
} }

View File

@@ -0,0 +1,7 @@
namespace Logic;
public interface ISecretService
{
public List<Secret.Collection> GetCollections();
public void CreateCollection(string label);
}

View File

@@ -11,4 +11,8 @@
<ProjectReference Include="../Repository/Repository.csproj" /> <ProjectReference Include="../Repository/Repository.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="GirCore.Secret-1" Version="0.7.0-preview.2" />
</ItemGroup>
</Project> </Project>

View File

@@ -6,14 +6,17 @@ namespace Logic;
public class PasswordStoreService : IPasswordStoreService public class PasswordStoreService : IPasswordStoreService
{ {
private readonly IRepository repository; private readonly IRepository repository;
private readonly ISecretService secretService;
public PasswordStoreService(IRepository repository) public PasswordStoreService(IRepository repository, ISecretService secretService)
{ {
this.repository = repository; this.repository = repository;
this.secretService = secretService;
} }
public void Create(PasswordStore item) public void Create(PasswordStore item)
{ {
secretService.CreateCollection(item.DisplayName ?? item.Path);
repository.Create(item); repository.Create(item);
} }

View File

@@ -0,0 +1,30 @@
namespace Logic;
public class SecretService : ISecretService
{
Secret.Service service;
public SecretService()
{
Secret.Module.Initialize();
service = Secret.Service.GetSync(Secret.ServiceFlags.LoadCollections, null);
}
public List<Secret.Collection> GetCollections()
{
GLib.List collections = service.GetCollections() ?? throw new Exception("No collections found");
List<Secret.Collection> result = new List<Secret.Collection>();
GLib.List.Foreach(collections, data =>
{
Secret.Collection collection = (Secret.Collection)GObject.Internal.InstanceWrapper.WrapHandle<Secret.Collection>(data, false);
result.Add(collection);
Console.WriteLine($" - {collection.Label}");
});
return result;
}
public void CreateCollection(string label)
{
Secret.Collection.CreateSync(service, label, null, Secret.CollectionCreateFlags.None, null);
}
}