/* * Copyright (c) 2022 Vaughn Nugent * * Library: VNLib * Package: VNLib.Data.Caching.Extensions * File: BrokerRegistrationRequest.cs * * BrokerRegistrationRequest.cs is part of VNLib.Data.Caching.Extensions which is part of the larger * VNLib collection of libraries and utilities. * * VNLib.Data.Caching.Extensions is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * VNLib.Data.Caching.Extensions is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see https://www.gnu.org/licenses/. */ using VNLib.Utils; using VNLib.Hashing.IdentityUtility; namespace VNLib.Data.Caching.Extensions { /// /// A broker registration request message in a fluent api /// format. This message may be disposed when no longer in use /// public sealed class BrokerRegistrationRequest : VnDisposeable { private bool ownsKey; private ReadOnlyJsonWebKey? SigningKey; /// /// The cache server node id /// public string? NodeId { get; private set; } /// /// The broker server's address /// public Uri? BrokerAddress { get; private set; } /// /// The security token used by the broker server to /// authenticate during heartbeat connections /// public string? HeartbeatToken { get; private set; } /// /// The address for remote clients to use to /// connect to this server /// public string? RegistrationAddress { get; private set; } /// /// Recovers the private key from the supplied certificate /// /// The private key used to sign messages /// A value that indicates if the current instance owns the key /// /// public BrokerRegistrationRequest WithSigningKey(ReadOnlyJsonWebKey jwk, bool ownsKey) { this.ownsKey = ownsKey; SigningKey = jwk ?? throw new ArgumentNullException(nameof(jwk)); return this; } public BrokerRegistrationRequest WithBroker(Uri brokerUri) { BrokerAddress = brokerUri; return this; } public BrokerRegistrationRequest WithRegistrationAddress(string address) { RegistrationAddress = address; return this; } public BrokerRegistrationRequest WithHeartbeatToken(string token) { HeartbeatToken = token; return this; } public BrokerRegistrationRequest WithNodeId(string nodeId) { NodeId = nodeId; return this; } internal void SignJwt(JsonWebToken jwt) { jwt.SignFromJwk(SigningKey); } internal IReadOnlyDictionary JsonHeader => SigningKey!.JwtHeader; /// protected override void Free() { if (ownsKey) { SigningKey?.Dispose(); } } } }