129 lines
2.8 KiB
C#
129 lines
2.8 KiB
C#
// Copyright 2023-2026 The NATS Authors
|
|
// Licensed under the Apache License, Version 2.0
|
|
|
|
using ZB.MOM.NatsNet.Server.Auth.CertificateIdentityProvider;
|
|
using ZB.MOM.NatsNet.Server.Auth.Ocsp;
|
|
|
|
namespace ZB.MOM.NatsNet.Server;
|
|
|
|
public sealed partial class NatsServer
|
|
{
|
|
internal void InitOCSPResponseCache()
|
|
{
|
|
_mu.EnterReadLock();
|
|
try
|
|
{
|
|
if (!_ocspPeerVerify)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
_mu.ExitReadLock();
|
|
}
|
|
|
|
var opts = GetOpts();
|
|
opts.OcspCacheConfig ??= OcspHandler.NewOCSPResponseCacheConfig();
|
|
var config = opts.OcspCacheConfig;
|
|
|
|
IOcspResponseCache cache;
|
|
var cacheType = (config.Type ?? string.Empty).Trim().ToLowerInvariant();
|
|
switch (cacheType)
|
|
{
|
|
case "":
|
|
case OcspHandler.OcspResponseCacheTypeLocal:
|
|
config.Type = OcspHandler.OcspResponseCacheTypeLocal;
|
|
cache = new LocalDirCache(config);
|
|
break;
|
|
|
|
case OcspHandler.OcspResponseCacheTypeNone:
|
|
cache = new NoOpCache(config);
|
|
break;
|
|
|
|
default:
|
|
Fatalf(OcspMessages.ErrBadCacheTypeConfig, config.Type);
|
|
return;
|
|
}
|
|
|
|
_mu.EnterWriteLock();
|
|
try
|
|
{
|
|
_ocsprc = cache;
|
|
}
|
|
finally
|
|
{
|
|
_mu.ExitWriteLock();
|
|
}
|
|
}
|
|
|
|
internal void StartOCSPResponseCache()
|
|
{
|
|
IOcspResponseCache? cache;
|
|
|
|
_mu.EnterReadLock();
|
|
try
|
|
{
|
|
if (!_ocspPeerVerify)
|
|
{
|
|
return;
|
|
}
|
|
|
|
cache = _ocsprc;
|
|
}
|
|
finally
|
|
{
|
|
_mu.ExitReadLock();
|
|
}
|
|
|
|
if (cache == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (cache)
|
|
{
|
|
case NoOpCache noOpCache:
|
|
noOpCache.Start(this);
|
|
Noticef("OCSP peer cache online [{0}]", noOpCache.Type());
|
|
break;
|
|
|
|
case LocalDirCache localDirCache:
|
|
localDirCache.Start(this);
|
|
Noticef("OCSP peer cache online [{0}]", localDirCache.Type());
|
|
break;
|
|
}
|
|
}
|
|
|
|
internal void StopOCSPResponseCache()
|
|
{
|
|
IOcspResponseCache? cache;
|
|
|
|
_mu.EnterReadLock();
|
|
try
|
|
{
|
|
cache = _ocsprc;
|
|
}
|
|
finally
|
|
{
|
|
_mu.ExitReadLock();
|
|
}
|
|
|
|
if (cache == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (cache)
|
|
{
|
|
case NoOpCache noOpCache:
|
|
noOpCache.Stop(this);
|
|
break;
|
|
|
|
case LocalDirCache localDirCache:
|
|
localDirCache.Stop(this);
|
|
break;
|
|
}
|
|
}
|
|
}
|