From a95d012d69603a08b0e7d563810e1b789e01147b Mon Sep 17 00:00:00 2001 From: Moonbase Date: Sun, 21 Sep 2025 14:16:41 -0700 Subject: [PATCH] Update Packages That Could Be Updated Rework Missed Refresh Token Code Minor Version Bump --- QtCNETAPI/QtCNETAPI.csproj | 5 ++-- QtCNETAPI/Services/ApiService/ApiService.cs | 16 +++++++----- QtCNETAPI/Services/CredentialService.cs | 26 +++++++++++++++++++ qtc-net-client-2/Forms/Login.Designer.cs | 4 +-- qtc-net-client-2/Forms/Login.cs | 5 ++-- qtc-net-client-2/Forms/Main.cs | 4 +-- .../Properties/Resources.Designer.cs | 2 +- qtc-net-client-2/Properties/Resources.resx | 2 +- .../Services/CredentialService.cs | 17 ------------ qtc-net-client-2/qtc-net-client-2.csproj | 1 - 10 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 QtCNETAPI/Services/CredentialService.cs delete mode 100644 qtc-net-client-2/Services/CredentialService.cs diff --git a/QtCNETAPI/QtCNETAPI.csproj b/QtCNETAPI/QtCNETAPI.csproj index 0edb883..9ee6acb 100644 --- a/QtCNETAPI/QtCNETAPI.csproj +++ b/QtCNETAPI/QtCNETAPI.csproj @@ -7,10 +7,11 @@ + - + - + diff --git a/QtCNETAPI/Services/ApiService/ApiService.cs b/QtCNETAPI/Services/ApiService/ApiService.cs index 67a2cb3..f13bc6d 100644 --- a/QtCNETAPI/Services/ApiService/ApiService.cs +++ b/QtCNETAPI/Services/ApiService/ApiService.cs @@ -15,6 +15,8 @@ namespace QtCNETAPI.Services.ApiService private RestClient _client; private LoggingService _loggingService; + private CredentialService _credService = new(); + internal string? sessionToken; internal string apiUri; @@ -411,21 +413,23 @@ namespace QtCNETAPI.Services.ApiService public async Task> RefreshSessionIfInvalid() { var tokenHandler = new JwtSecurityTokenHandler(); - var refToken = await File.ReadAllTextAsync("./session.token"); + var refToken = _credService.GetAccessToken(); // fuck CA1416, if this is being ran on linux it should just crash (theoretically) + + if (refToken == null) + { + // treat as session expired + return new ServiceResponse { Success = false, Message = "Refresh Token Not Found. Session Expired." }; + } JwtSecurityToken token = tokenHandler.ReadJwtToken(SessionToken); if(DateTime.Compare(DateTime.UtcNow, token.ValidTo) > 0) { - if (!File.Exists("./session.token")) { return new ServiceResponse { Success = false, Message = "Session File Not Found. Session Expired." }; } - var result = await RefreshLogin(refToken); if (result == null || result.Success == false) { - File.Delete("./session.token"); - - return new ServiceResponse { Success = false, Message = "Session Expired." }; + return new ServiceResponse { Success = false, Message = "Session Expired." }; // logging in again should overwrite old token } else return new ServiceResponse { Success = true, Data = refToken }; } else return new ServiceResponse { Success = true, Data = refToken }; } diff --git a/QtCNETAPI/Services/CredentialService.cs b/QtCNETAPI/Services/CredentialService.cs new file mode 100644 index 0000000..e89c636 --- /dev/null +++ b/QtCNETAPI/Services/CredentialService.cs @@ -0,0 +1,26 @@ +using Meziantou.Framework.Win32; + +namespace QtCNETAPI.Services +{ + public class CredentialService() + { + public void SaveAccessToken(string username, string accessToken) + { + string applicationName = "QtC.NET"; + if (System.Diagnostics.Debugger.IsAttached) applicationName = "QtC.NET.Development"; + + CredentialManager.WriteCredential(applicationName, username, accessToken, $"Access Token For User {username} On QtC.NET", CredentialPersistence.LocalMachine); + } + + public string? GetAccessToken() + { + string applicationName = "QtC.NET"; + if (System.Diagnostics.Debugger.IsAttached) applicationName = "QtC.NET.Development"; + + var credential = CredentialManager.ReadCredential(applicationName); + if (credential == null) return null; + + return credential.Password; + } + } +} diff --git a/qtc-net-client-2/Forms/Login.Designer.cs b/qtc-net-client-2/Forms/Login.Designer.cs index a26fa0d..f5be2e5 100644 --- a/qtc-net-client-2/Forms/Login.Designer.cs +++ b/qtc-net-client-2/Forms/Login.Designer.cs @@ -1,6 +1,6 @@ namespace qtc_net_client_2.Forms { - partial class llblForgotPassword + partial class Login { /// /// Required designer variable. @@ -28,7 +28,7 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(llblForgotPassword)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Login)); pbLoginBanner = new PictureBox(); tbEmail = new TextBox(); lblEmail = new Label(); diff --git a/qtc-net-client-2/Forms/Login.cs b/qtc-net-client-2/Forms/Login.cs index e5922cc..3f47ab3 100644 --- a/qtc-net-client-2/Forms/Login.cs +++ b/qtc-net-client-2/Forms/Login.cs @@ -1,4 +1,5 @@ using QtCNETAPI.Services.ApiService; +using QtCNETAPI.Services; using QtCNETAPI.Dtos.User; using System; using System.Collections.Generic; @@ -13,11 +14,11 @@ using qtc_net_client_2.Services; namespace qtc_net_client_2.Forms { - public partial class llblForgotPassword : Form + public partial class Login : Form { private IApiService _apiService; private CredentialService _credService = new(); - public llblForgotPassword(IApiService apiService) + public Login(IApiService apiService) { _apiService = apiService; diff --git a/qtc-net-client-2/Forms/Main.cs b/qtc-net-client-2/Forms/Main.cs index c5377de..75b50ae 100644 --- a/qtc-net-client-2/Forms/Main.cs +++ b/qtc-net-client-2/Forms/Main.cs @@ -49,7 +49,7 @@ namespace qtc_net_client_2 if (_apiService.CurrentUser == null) { // not logged in, load the login form - llblForgotPassword frmLogin = new llblForgotPassword(_apiService); + Login frmLogin = new Login(_apiService); var result = frmLogin.ShowDialog(); if (result == DialogResult.OK) @@ -60,7 +60,7 @@ namespace qtc_net_client_2 private async void llblSignIn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { // just reshow the login dialog lol - llblForgotPassword frmLogin = new llblForgotPassword(_apiService); + Login frmLogin = new Login(_apiService); var result = frmLogin.ShowDialog(); if (result == DialogResult.OK) diff --git a/qtc-net-client-2/Properties/Resources.Designer.cs b/qtc-net-client-2/Properties/Resources.Designer.cs index 821d928..f2cc722 100644 --- a/qtc-net-client-2/Properties/Resources.Designer.cs +++ b/qtc-net-client-2/Properties/Resources.Designer.cs @@ -81,7 +81,7 @@ namespace qtc_net_client_2.Properties { } /// - /// Looks up a localized string similar to 6.3.3. + /// Looks up a localized string similar to 6.3.4. /// internal static string AssemblyVersion { get { diff --git a/qtc-net-client-2/Properties/Resources.resx b/qtc-net-client-2/Properties/Resources.resx index acfd7b5..8cde07c 100644 --- a/qtc-net-client-2/Properties/Resources.resx +++ b/qtc-net-client-2/Properties/Resources.resx @@ -173,7 +173,7 @@ ..\Icons\MessageIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - 6.3.3 + 6.3.4 ..\Resources\cobalt_sittingatputer.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/qtc-net-client-2/Services/CredentialService.cs b/qtc-net-client-2/Services/CredentialService.cs deleted file mode 100644 index 3b31574..0000000 --- a/qtc-net-client-2/Services/CredentialService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Meziantou.Framework.Win32; - -namespace qtc_net_client_2.Services -{ - public class CredentialService() - { - public void SaveAccessToken(string username, string accessToken) => CredentialManager.WriteCredential("QtC.NET", username, accessToken, $"Access Token For User {username} On QtC.NET", CredentialPersistence.LocalMachine); - - public string? GetAccessToken() - { - var credential = CredentialManager.ReadCredential("QtC.NET"); - if (credential == null) return null; - - return credential.Password; - } - } -} diff --git a/qtc-net-client-2/qtc-net-client-2.csproj b/qtc-net-client-2/qtc-net-client-2.csproj index d5283ce..4b9aa01 100644 --- a/qtc-net-client-2/qtc-net-client-2.csproj +++ b/qtc-net-client-2/qtc-net-client-2.csproj @@ -18,7 +18,6 @@ -