@@ -20,7 +20,7 @@ namespace NATS.Jwt;
2020/// <summary>
2121/// Class for managing NATS JWT encoding and decoding.
2222/// </summary>
23- public class NatsJwt
23+ public static class NatsJwt
2424{
2525 /// <summary>
2626 /// Represents the JSON Web Token (JWT) header used for encoding NATS JWT claims.
@@ -106,7 +106,7 @@ public class NatsJwt
106106 /// <param name="seed">The seed.</param>
107107 /// <returns>The formatted user configuration.</returns>
108108 /// <exception cref="NatsJwtException">Thrown when the seed is not an operator, account, or user seed.</exception>
109- public string FormatUserConfig ( string jwt , string seed )
109+ public static string FormatUserConfig ( string jwt , string seed )
110110 {
111111 // TODO: Decode JWT and validate
112112 var parts = jwt . Split ( '.' ) ;
@@ -147,49 +147,49 @@ NKEYs are sensitive and should be treated as secrets.
147147 /// </summary>
148148 /// <param name="subject">The subject for the activation claims.</param>
149149 /// <returns>A new instance of NatsActivationClaims with the specified subject.</returns>
150- public NatsActivationClaims NewActivationClaims ( string subject ) => new ( ) { Subject = subject } ;
150+ public static NatsActivationClaims NewActivationClaims ( string subject ) => new ( ) { Subject = subject } ;
151151
152152 /// <summary>
153153 /// Creates a new instance of the NatsAuthorizationRequestClaims class with the specified subject.
154154 /// </summary>
155155 /// <param name="subject">The subject of the authorization request.</param>
156156 /// <returns>A new instance of the NatsAuthorizationRequestClaims class.</returns>
157- public NatsAuthorizationRequestClaims NewAuthorizationRequestClaims ( string subject ) => new ( ) { Subject = subject } ;
157+ public static NatsAuthorizationRequestClaims NewAuthorizationRequestClaims ( string subject ) => new ( ) { Subject = subject } ;
158158
159159 /// <summary>
160160 /// Creates a new instance of NatsAuthorizationResponseClaims with the specified subject.
161161 /// </summary>
162162 /// <param name="subject">The subject of the claims.</param>
163163 /// <returns>A new instance of NatsAuthorizationResponseClaims.</returns>
164- public NatsAuthorizationResponseClaims NewAuthorizationResponseClaims ( string subject ) => new ( ) { Subject = subject } ;
164+ public static NatsAuthorizationResponseClaims NewAuthorizationResponseClaims ( string subject ) => new ( ) { Subject = subject } ;
165165
166166 /// <summary>
167167 /// Creates a new instance of NatsGenericClaims with the specified subject.
168168 /// </summary>
169169 /// <param name="subject">The subject of the claim.</param>
170170 /// <returns>A new instance of NatsGenericClaims.</returns>
171- public NatsGenericClaims NewGenericClaims ( string subject ) => new ( ) { Subject = subject } ;
171+ public static NatsGenericClaims NewGenericClaims ( string subject ) => new ( ) { Subject = subject } ;
172172
173173 /// <summary>
174174 /// Creates new operator claims for generating a NATS JWT token.
175175 /// </summary>
176176 /// <param name="subject">The subject of the operator claims.</param>
177177 /// <returns>A new instance of the <see cref="NatsOperatorClaims"/> class.</returns>
178- public NatsOperatorClaims NewOperatorClaims ( string subject ) => new ( ) { Subject = subject , Issuer = subject } ;
178+ public static NatsOperatorClaims NewOperatorClaims ( string subject ) => new ( ) { Subject = subject , Issuer = subject } ;
179179
180180 /// <summary>
181181 /// Creates a new instance of the NatsUserClaims class with the specified subject.
182182 /// </summary>
183183 /// <param name="subject">The subject of the user claims.</param>
184184 /// <returns>A new instance of the NatsUserClaims class.</returns>
185- public NatsUserClaims NewUserClaims ( string subject ) => new ( ) { Subject = subject } ;
185+ public static NatsUserClaims NewUserClaims ( string subject ) => new ( ) { Subject = subject } ;
186186
187187 /// <summary>
188188 /// Creates a new instance of the NatsAccountClaims class with the specified subject.
189189 /// </summary>
190190 /// <param name="subject">The subject for the account claims.</param>
191191 /// <returns>A new instance of NatsAccountClaims.</returns>
192- public NatsAccountClaims NewAccountClaims ( string subject ) => new ( ) { Subject = subject } ;
192+ public static NatsAccountClaims NewAccountClaims ( string subject ) => new ( ) { Subject = subject } ;
193193
194194 /// <summary>
195195 /// Encodes the activation claims into a JWT token.
@@ -198,7 +198,7 @@ NKEYs are sensitive and should be treated as secrets.
198198 /// <param name="keyPair">The key pair used for signing the JWT token.</param>
199199 /// <param name="issuedAt">The optional issued at timestamp. If not provided, the current time will be used.</param>
200200 /// <returns>The encoded JWT token.</returns>
201- public string EncodeActivationClaims ( NatsActivationClaims activationClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
201+ public static string EncodeActivationClaims ( NatsActivationClaims activationClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
202202 {
203203 SetVersion ( activationClaims . Activation , ActivationClaim ) ;
204204 return DoEncode ( NatsJwtHeader , keyPair , activationClaims , JsonContext . Default . NatsActivationClaims , issuedAt ) ;
@@ -211,7 +211,7 @@ public string EncodeActivationClaims(NatsActivationClaims activationClaims, KeyP
211211 /// <param name="keyPair">The key pair used for signing the token.</param>
212212 /// <param name="issuedAt">The optional issued At timestamp for the token. If not provided, the current timestamp will be used.</param>
213213 /// <returns>The encoded JWT token.</returns>
214- public string EncodeAuthorizationRequestClaims ( NatsAuthorizationRequestClaims authorizationRequestClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
214+ public static string EncodeAuthorizationRequestClaims ( NatsAuthorizationRequestClaims authorizationRequestClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
215215 {
216216 SetVersion ( authorizationRequestClaims . AuthorizationRequest , AuthorizationRequestClaim ) ;
217217 return DoEncode ( NatsJwtHeader , keyPair , authorizationRequestClaims , JsonContext . Default . NatsAuthorizationRequestClaims , issuedAt ) ;
@@ -224,7 +224,7 @@ public string EncodeAuthorizationRequestClaims(NatsAuthorizationRequestClaims au
224224 /// <param name="keyPair">The key pair to use for encryption.</param>
225225 /// <param name="issuedAt">The optional issued at date and time.</param>
226226 /// <returns>The encoded string representation of the authorization response claims.</returns>
227- public string EncodeAuthorizationResponseClaims ( NatsAuthorizationResponseClaims authorizationResponseClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
227+ public static string EncodeAuthorizationResponseClaims ( NatsAuthorizationResponseClaims authorizationResponseClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
228228 {
229229 SetVersion ( authorizationResponseClaims . AuthorizationResponse , AuthorizationResponseClaim ) ;
230230 return DoEncode ( NatsJwtHeader , keyPair , authorizationResponseClaims , JsonContext . Default . NatsAuthorizationResponseClaims , issuedAt ) ;
@@ -237,7 +237,7 @@ public string EncodeAuthorizationResponseClaims(NatsAuthorizationResponseClaims
237237 /// <param name="keyPair">The key pair used for encoding.</param>
238238 /// <param name="issuedAt">The optional issued at datetime offset.</param>
239239 /// <returns>The encoded JWT token.</returns>
240- public string EncodeGenericClaims ( NatsGenericClaims genericClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
240+ public static string EncodeGenericClaims ( NatsGenericClaims genericClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
241241 {
242242 return DoEncode ( NatsJwtHeader , keyPair , genericClaims , JsonContext . Default . NatsGenericClaims , issuedAt ) ;
243243 }
@@ -249,7 +249,7 @@ public string EncodeGenericClaims(NatsGenericClaims genericClaims, KeyPair keyPa
249249 /// <param name="keyPair">The key pair used for signing the token.</param>
250250 /// <param name="issuedAt">The optional issued at timestamp.</param>
251251 /// <returns>The encoded JWT token.</returns>
252- public string EncodeOperatorClaims ( NatsOperatorClaims operatorClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
252+ public static string EncodeOperatorClaims ( NatsOperatorClaims operatorClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
253253 {
254254 SetVersion ( operatorClaims . Operator , OperatorClaim ) ;
255255 return DoEncode ( NatsJwtHeader , keyPair , operatorClaims , JsonContext . Default . NatsOperatorClaims , issuedAt ) ;
@@ -262,7 +262,7 @@ public string EncodeOperatorClaims(NatsOperatorClaims operatorClaims, KeyPair ke
262262 /// <param name="keyPair">The key pair to sign the JWT token.</param>
263263 /// <param name="issuedAt">The optional issued at datetime offset.</param>
264264 /// <returns>The encoded JWT token.</returns>
265- public string EncodeUserClaims ( NatsUserClaims userClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
265+ public static string EncodeUserClaims ( NatsUserClaims userClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
266266 {
267267 SetVersion ( userClaims . User , UserClaim ) ;
268268 return DoEncode ( NatsJwtHeader , keyPair , userClaims , JsonContext . Default . NatsUserClaims , issuedAt ) ;
@@ -275,7 +275,7 @@ public string EncodeUserClaims(NatsUserClaims userClaims, KeyPair keyPair, DateT
275275 /// <param name="keyPair">The key pair used for signing the token.</param>
276276 /// <param name="issuedAt">The optional time when the token was issued. If not specified, the current time will be used.</param>
277277 /// <returns>The encoded JWT token.</returns>
278- public string EncodeAccountClaims ( NatsAccountClaims accountClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
278+ public static string EncodeAccountClaims ( NatsAccountClaims accountClaims , KeyPair keyPair , DateTimeOffset ? issuedAt = null )
279279 {
280280 SetVersion ( accountClaims . Account , AccountClaim ) ;
281281 accountClaims . Account . Imports ? . Sort ( ImportComparer ) ;
@@ -295,7 +295,7 @@ public string EncodeAccountClaims(NatsAccountClaims accountClaims, KeyPair keyPa
295295 /// The payload is base64-encoded JSON representing the claims data.
296296 /// The method verifies the signature by comparing it against the signing input generated from the header and payload.
297297 /// </remarks>
298- public T DecodeClaims < T > ( string jwt )
298+ public static T DecodeClaims < T > ( string jwt )
299299 where T : JwtClaimsData
300300 {
301301 return DecodeClaims ( jwt , ( JsonTypeInfo < T > ) JsonContext . Default . GetTypeInfo ( typeof ( T ) ) ! ) ;
@@ -307,7 +307,7 @@ public T DecodeClaims<T>(string jwt)
307307 /// <param name="jwt">The JWT token to decode.</param>
308308 /// <returns>The decoded operator claims.</returns>
309309 /// <exception cref="NatsJwtException">Thrown when the operator claim type is invalid.</exception>
310- public NatsOperatorClaims DecodeOperatorClaims ( string jwt )
310+ public static NatsOperatorClaims DecodeOperatorClaims ( string jwt )
311311 {
312312 var claims = DecodeClaims ( jwt , JsonContext . Default . NatsOperatorClaims ) ;
313313 if ( claims . Operator . Type != OperatorClaim )
@@ -324,7 +324,7 @@ public NatsOperatorClaims DecodeOperatorClaims(string jwt)
324324 /// <param name="jwt">The JWT token.</param>
325325 /// <returns>The decoded account claims.</returns>
326326 /// <exception cref="NatsJwtException">Thrown when the account claims type is not as expected.</exception>
327- public NatsAccountClaims DecodeAccountClaims ( string jwt )
327+ public static NatsAccountClaims DecodeAccountClaims ( string jwt )
328328 {
329329 var claims = DecodeClaims ( jwt , JsonContext . Default . NatsAccountClaims ) ;
330330 if ( claims . Account . Type != AccountClaim )
@@ -341,7 +341,7 @@ public NatsAccountClaims DecodeAccountClaims(string jwt)
341341 /// <param name="jwt">The JWT token.</param>
342342 /// <returns>The decoded user claims.</returns>
343343 /// <exception cref="NatsJwtException">Thrown when the user claim is not found or has an invalid type.</exception>
344- public NatsUserClaims DecodeUserClaims ( string jwt )
344+ public static NatsUserClaims DecodeUserClaims ( string jwt )
345345 {
346346 var claims = DecodeClaims ( jwt , JsonContext . Default . NatsUserClaims ) ;
347347 if ( claims . User . Type != UserClaim )
@@ -358,7 +358,7 @@ public NatsUserClaims DecodeUserClaims(string jwt)
358358 /// <param name="jwt">The JWT token.</param>
359359 /// <returns>The decoded activation claims.</returns>
360360 /// <exception cref="NatsJwtException">Thrown when the activation type in the claims is not as expected.</exception>
361- public NatsActivationClaims DecodeActivationClaims ( string jwt )
361+ public static NatsActivationClaims DecodeActivationClaims ( string jwt )
362362 {
363363 var claims = DecodeClaims ( jwt , JsonContext . Default . NatsActivationClaims ) ;
364364 if ( claims . Activation . Type != ActivationClaim )
@@ -382,7 +382,7 @@ public NatsActivationClaims DecodeActivationClaims(string jwt)
382382 /// The payload is base64-encoded JSON representing the claims data.
383383 /// The method verifies the signature by comparing it against the signing input generated from the header and payload.
384384 /// </remarks>
385- private T DecodeClaims < T > ( string jwt , JsonTypeInfo < T > jsonTypeInfo )
385+ private static T DecodeClaims < T > ( string jwt , JsonTypeInfo < T > jsonTypeInfo )
386386 where T : JwtClaimsData
387387 {
388388 string [ ] parts = jwt . Split ( '.' ) ;
@@ -451,14 +451,14 @@ static void VerifyClaims(JwtClaimsData claimsData, string payload, byte[] signat
451451 }
452452 }
453453
454- private void SetVersion < T > ( T claims , string type )
454+ private static void SetVersion < T > ( T claims , string type )
455455 where T : NatsGenericFields
456456 {
457457 claims . Type = type ;
458458 claims . Version = LibraryVersion ;
459459 }
460460
461- private string DoEncode < T > ( JwtHeader jwtHeader , KeyPair keyPair , T claim , JsonTypeInfo < T > typeInfo , DateTimeOffset ? now )
461+ private static string DoEncode < T > ( JwtHeader jwtHeader , KeyPair keyPair , T claim , JsonTypeInfo < T > typeInfo , DateTimeOffset ? now )
462462 where T : JwtClaimsData
463463 {
464464 using var writer = new NatsBufferWriter < byte > ( ) ;
@@ -494,7 +494,7 @@ private string DoEncode<T>(JwtHeader jwtHeader, KeyPair keyPair, T claim, JsonTy
494494 return $ "{ toSign } .{ eSig } ";
495495 }
496496
497- private string Hash < T > ( T c , JsonTypeInfo < T > typeInfo )
497+ private static string Hash < T > ( T c , JsonTypeInfo < T > typeInfo )
498498 {
499499 using var writer = new NatsBufferWriter < byte > ( ) ;
500500 var jsonWriter = new Utf8JsonWriter ( writer ) ;
0 commit comments