diff options
Diffstat (limited to 'Libs/VNLib.Plugins.Essentials.Oauth/src/Applications')
-rw-r--r-- | Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/ApplicationStore.cs | 30 | ||||
-rw-r--r-- | Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/UserAppContext.cs | 4 |
2 files changed, 17 insertions, 17 deletions
diff --git a/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/ApplicationStore.cs b/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/ApplicationStore.cs index 67488f6..92ced51 100644 --- a/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/ApplicationStore.cs +++ b/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/ApplicationStore.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Essentials.Oauth @@ -97,7 +97,7 @@ namespace VNLib.Plugins.Essentials.Oauth.Applications /// <param name="userId">The user-id of that owns the application</param> /// <param name="appId">The id of the application to update</param> /// <returns>A task that resolves to the raw secret that was used to generate the hash, or null if the operation failed</returns> - public async Task<PrivateString?> UpdateSecretAsync(string userId, string appId) + public async Task<PrivateString?> UpdateSecretAsync(string userId, string appId, CancellationToken cancellation) { /* * Delete open apps first, incase there are any issues, worse case @@ -107,33 +107,34 @@ namespace VNLib.Plugins.Essentials.Oauth.Applications * secret and may lose access to the updated app, not a big deal * but avoidable. */ - await TokenStore.RevokeTokensForAppAsync(appId, CancellationToken.None); + await TokenStore.RevokeTokensForAppAsync(appId, cancellation); + //Generate the new secret PrivateString secret = GenerateSecret(); //Hash the secret using PrivateString secretHash = SecretHashing.Hash(secret); //Open new db context await using UserAppContext Database = new(ConextOptions); - //Open transaction - await Database.OpenTransactionAsync(); + //Get the app to update the secret on UserApplication? app = await (from ap in Database.OAuthApps where ap.UserId == userId && ap.Id == appId select ap) - .SingleOrDefaultAsync(); - if (app == null) + .SingleOrDefaultAsync(cancellation); + if (app is null) { return null; } + //Store the new secret hash app.SecretHash = (string)secretHash; + //Save changes - if (await Database.SaveChangesAsync() <= 0) + if (await Database.SaveAndCloseAsync(true, cancellation) <= 0) { return null; } - //Commit transaction - await Database.CommitTransactionAsync(); + //return the raw secret return secret; } @@ -145,22 +146,21 @@ namespace VNLib.Plugins.Essentials.Oauth.Applications /// <param name="clientId">The clientid of the application to search</param> /// <param name="secret">The secret to compare against</param> /// <returns>True if the application was found and the secret matches the stored secret, false if the appliation was not found or the secret does not match</returns> - public async Task<UserApplication?> VerifyAppAsync(string clientId, PrivateString secret) + public async Task<UserApplication?> VerifyAppAsync(string clientId, PrivateString secret, CancellationToken cancellation) { UserApplication? app; //Open new db context await using (UserAppContext Database = new(ConextOptions)) { - //Open transaction - await Database.OpenTransactionAsync(); //Get the application with its secret app = await (from userApp in Database.OAuthApps where userApp.ClientId == clientId select userApp) - .FirstOrDefaultAsync(); + .FirstOrDefaultAsync(cancellation); + //commit the transaction - await Database.CommitTransactionAsync(); + await Database.SaveAndCloseAsync(true, cancellation); } //make sure app exists diff --git a/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/UserAppContext.cs b/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/UserAppContext.cs index e4d98e6..cc38800 100644 --- a/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/UserAppContext.cs +++ b/Libs/VNLib.Plugins.Essentials.Oauth/src/Applications/UserAppContext.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Essentials.Oauth @@ -29,7 +29,7 @@ using VNLib.Plugins.Essentials.Oauth.Tokens; namespace VNLib.Plugins.Essentials.Oauth.Applications { - public class UserAppContext : TransactionalDbContext + public class UserAppContext : DBContextBase { public DbSet<UserApplication> OAuthApps { get; set; } |