Some checks failed
Build Test Deploy / build-test (push) Has been cancelled
Build Test Deploy / authority-container (push) Has been cancelled
Build Test Deploy / docs (push) Has been cancelled
Build Test Deploy / deploy (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
48 lines
1.3 KiB
C#
48 lines
1.3 KiB
C#
using Microsoft.AspNetCore.DataProtection.Repositories;
|
|
using StackExchange.Redis;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Ablera.Serdica.Authentication.Utilities;
|
|
|
|
// Move this to ...Authentication.Redis or something
|
|
public sealed class RedisAndFileSystemXmlRepository : IXmlRepository
|
|
{
|
|
private readonly IDatabase _db;
|
|
private readonly string _prefix;
|
|
|
|
public RedisAndFileSystemXmlRepository(IDatabase db, string prefix)
|
|
{
|
|
_db = db;
|
|
_prefix = prefix;
|
|
}
|
|
|
|
public IReadOnlyCollection<XElement> GetAllElements()
|
|
{
|
|
var keys = _db.SetMembers(_prefix);
|
|
var list = new List<XElement>();
|
|
|
|
foreach (var redisValue in keys)
|
|
{
|
|
var xml = redisValue.ToString();
|
|
try { list.Add(XElement.Parse(xml)); }
|
|
catch { /* ignore corrupted entry */ }
|
|
}
|
|
return list;
|
|
}
|
|
|
|
public void StoreElement(XElement element, string friendlyName)
|
|
{
|
|
var xml = element.ToString(SaveOptions.DisableFormatting);
|
|
|
|
/* 1) write to Redis (set-add = idempotent) */
|
|
_db.SetAdd(_prefix, xml);
|
|
}
|
|
}
|
|
|