diff --git a/.gitignore b/.gitignore
index 33f113a8..9df21979 100644
--- a/.gitignore
+++ b/.gitignore
@@ -350,7 +350,7 @@ MigrationBackup/
.ionide/
*.sqlite3
!/build/*
-/src/swagger.json
+/src/BUTR.Site.NexusMods.Server/BUTR.Site.NexusMods.Server.json
/src/BUTR.Site.NexusMods.Server/.config/dotnet-tools.json
/**/*.g.cs
/src/BUTR.Site.NexusMods.ServerClient/.config/dotnet-tools.json
diff --git a/src/BUTR.Site.NexusMods.Client/BUTR.Site.NexusMods.Client.csproj b/src/BUTR.Site.NexusMods.Client/BUTR.Site.NexusMods.Client.csproj
index c20c974d..e9c0e8b8 100644
--- a/src/BUTR.Site.NexusMods.Client/BUTR.Site.NexusMods.Client.csproj
+++ b/src/BUTR.Site.NexusMods.Client/BUTR.Site.NexusMods.Client.csproj
@@ -17,25 +17,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridPaging.razor b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridPaging.razor
index 19004352..244aea78 100644
--- a/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridPaging.razor
+++ b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridPaging.razor
@@ -8,12 +8,11 @@
SelectedRowChanged="@(model => { DataGridUtils.SelectDeselect(model, ref Value, ref _dataGridRef); })"
ReadData="@OnReadData"
TotalItems="@Metadata.TotalCount"
- PageSize="@Metadata.PageSize"
+ PageSizes="@PageSizes"
SelectionMode="@DataGridSelectionMode.Single"
ShowPager
ShowPageSizes
PagerOptions="@(new DataGridPagerOptions { PaginationPosition = PagerElementPosition.Center, ButtonRowPosition = PagerElementPosition.Start, TotalItemsPosition = PagerElementPosition.End })"
- PageSizes="@PageSizes"
Filterable="@Filterable"
Sortable="@Sortable"
Responsive
@@ -133,6 +132,7 @@
.Select(x => new Sorting(x.SortField, x.SortDirection.ToSortingType()))
.ToArray();
var filterings = GetFilters is not null ? GetFilters(e.Columns).ToArray() : Array.Empty();
+
await LoadItems(e.Page, e.PageSize, filterings, sortings, CancellationToken.None);
}
}
diff --git a/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridStreamingPaging.razor b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridStreamingPaging.razor
index dfddb6ed..329c1fc5 100644
--- a/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridStreamingPaging.razor
+++ b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridStreamingPaging.razor
@@ -8,7 +8,6 @@
SelectedRowChanged="@(model => { DataGridUtils.SelectDeselect(model, ref Value, ref _dataGridRef); })"
ReadData="@OnReadData"
CurrentPage="@Metadata.CurrentPage"
- PageSize="@Metadata.PageSize"
PageSizes="@PageSizes"
TotalItems="@Metadata.TotalCount"
SelectionMode="@DataGridSelectionMode.Single"
diff --git a/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridVirtual.razor b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridVirtual.razor
new file mode 100644
index 00000000..c2c0a316
--- /dev/null
+++ b/src/BUTR.Site.NexusMods.Client/Components/Grid/DataGridVirtual.razor
@@ -0,0 +1,136 @@
+@typeparam TItem where TItem : class
+
+@inject ILocalStorageService _localStorage
+
+
+
+
+@code {
+
+ public sealed record ItemsResponse(PagingMetadata Metadata, ICollection Items, PagingAdditionalMetadata AdditionalMetadata);
+
+ [Parameter]
+ public bool Resizable { get; set; } = false;
+ [Parameter]
+ public TableResizeMode ResizeMode { get; set; }
+
+ [Parameter]
+ public bool Editable { get; set; } = false;
+ [Parameter]
+ public DataGridEditMode EditMode { get; set; }
+
+ [Parameter]
+ public bool Filterable { get; set; } = false;
+
+ [Parameter]
+ public bool Sortable { get; set; } = false;
+
+ [Parameter]
+ public bool FixedHeader { get; set; } = false;
+
+ [Parameter(CaptureUnmatchedValues = true)]
+ public Dictionary? AdditionalAttributes { get; set; }
+
+ [Parameter]
+ public RenderFragment? DataGridColumns { get; set; }
+
+ [Parameter]
+ public RenderFragment>? ButtonRowTemplate { get; set; }
+
+ [Parameter]
+ public RenderFragment? DetailRowTemplate { get; set; }
+
+ [Parameter]
+ public Func, bool>? DetailRowTrigger { get; set; }
+
+ [Parameter]
+ public Func, IEnumerable>? GetFilters { get; set; }
+
+ [Parameter]
+ public Func, ICollection, CancellationToken, Task>? GetItems { get; set; }
+
+ [Parameter]
+ public int DefaultPageSize { get; set; } = UserSettings.DefaultPageSize;
+
+ [Parameter]
+ public IEnumerable PageSizes { get; set; } = UserSettings.AvailablePageSizes;
+
+ [Parameter]
+ public Func? GetPageSize { get; set; } = (settings => settings.PageSize);
+
+ [Parameter]
+ public PagingMetadata Metadata { get; set; }
+
+ [Parameter]
+ public PagingAdditionalMetadata AdditionalMetadata { get; set; }
+
+ public TItem? Value;
+ public ICollection Values = default!;
+
+ private int _progressValue = default!;
+
+ private DataGrid _dataGridRef = default!;
+ private VirtualizeOptions virtualizeOptions;
+
+ public DataGridVirtual()
+ {
+ Metadata = new PagingMetadata(1, 0, DefaultPageSize, 0);
+ AdditionalMetadata = PagingAdditionalMetadata.Empty;
+ }
+
+ protected override async Task OnInitializedAsync()
+ {
+ virtualizeOptions = new() { DataGridHeight = "500px" };
+ Metadata = new(1, 0, 0, 0);
+ }
+
+ public Task Reload() => _dataGridRef.Reload();
+
+ private async Task OnReadData(DataGridReadDataEventArgs e)
+ {
+ if (!e.CancellationToken.IsCancellationRequested)
+ {
+ var sortings = e.Columns
+ .Where(x => x.SortIndex != -1)
+ .OrderBy(x => x.SortIndex)
+ .Select(x => new Sorting(x.SortField, x.SortDirection.ToSortingType()))
+ .ToArray();
+ var filterings = GetFilters is not null ? GetFilters(e.Columns).ToArray() : Array.Empty();
+
+ var page = e.VirtualizeOffset / e.VirtualizeCount + 1;
+ var pageSize = e.VirtualizeCount;
+ await LoadItems(page, pageSize, filterings, sortings, CancellationToken.None);
+ }
+ }
+
+ private async Task LoadItems(int page, int pageSize, ICollection filterings, ICollection sortings, CancellationToken ct = default)
+ {
+ var response = (GetItems is not null ? await GetItems(page, pageSize, filterings, sortings, ct) : null) ?? new(PagingMetadata.Empty, Array.Empty(), PagingAdditionalMetadata.Empty);
+ Metadata = response.Metadata;
+ Values = response.Items;
+ AdditionalMetadata = response.AdditionalMetadata;
+ }
+
+}
\ No newline at end of file
diff --git a/src/BUTR.Site.NexusMods.Client/Models/DemoUser.cs b/src/BUTR.Site.NexusMods.Client/Models/DemoUser.cs
index 41c3711b..eecc98ca 100644
--- a/src/BUTR.Site.NexusMods.Client/Models/DemoUser.cs
+++ b/src/BUTR.Site.NexusMods.Client/Models/DemoUser.cs
@@ -22,23 +22,23 @@ public static class DemoUser
isSupporter: true,
isPremium: true,
role: ApplicationRoles.User,
- steamUserId: null,
- gogUserId: null,
- discordUserId: null,
- gitHubUserId: null,
+ steamUserId: null!,
+ gogUserId: null!,
+ discordUserId: null!,
+ gitHubUserId: null!,
hasTenantGame: true,
availableTenants: new List { new(tenantId: 1, name: "Bannerlord") });
- private static readonly List _mods = new()
+ private static readonly List _mods = new()
{
- new(nexusModsModId: 1, name: "Demo Mod 1", allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
- new(nexusModsModId: 2, name: "Demo Mod 2", allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
- new(nexusModsModId: 3, name: "Demo Mod 3", allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
- new(nexusModsModId: 4, name: "Demo Mod 4", allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
+ new(nexusModsModId: 1, name: "Demo Mod 1", ownerNexusModsUserIds: Array.Empty(), allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
+ new(nexusModsModId: 2, name: "Demo Mod 2", ownerNexusModsUserIds: Array.Empty(), allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
+ new(nexusModsModId: 3, name: "Demo Mod 3", ownerNexusModsUserIds: Array.Empty(), allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
+ new(nexusModsModId: 4, name: "Demo Mod 4", ownerNexusModsUserIds: Array.Empty(), allowedNexusModsUserIds: Array.Empty(), manuallyLinkedNexusModsUserIds: Array.Empty(), knownModuleIds: Array.Empty(), manuallyLinkedModuleIds: Array.Empty()),
};
private static List? _crashReports;
public static Task GetProfile() => Task.FromResult(_profile);
- public static IAsyncEnumerable GetMods() => _mods.ToAsyncEnumerable();
+ public static IAsyncEnumerable GetMods() => _mods.ToAsyncEnumerable();
public static async IAsyncEnumerable GetCrashReports(IHttpClientFactory factory)
{
static string GetException(ExceptionModel? exception, bool inner = false) => exception is null ? string.Empty : $"""
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Administration/QuartzManager.razor b/src/BUTR.Site.NexusMods.Client/Pages/Administration/QuartzManager.razor
index 458c0b69..23828899 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Administration/QuartzManager.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Administration/QuartzManager.razor
@@ -34,7 +34,7 @@
-
+
@@ -86,7 +86,7 @@
-
+
@@ -99,11 +99,11 @@
private string _jobId = string.Empty;
- private DataGridPaging? _dataGridRef;
+ private DataGridVirtual? _dataGridRef;
- private async Task.ItemsResponse?> Paging(int page, int pageSize, ICollection filters, ICollection sortings, CancellationToken ct)
+ private async Task.ItemsResponse?> Paging(int page, int pageSize, ICollection filters, ICollection sortings, CancellationToken ct)
{
- var response = await _quartzClient.HistoryPaginatedAsync(new(page: page, pageSize: pageSize, filters: filters, sortings: sortings), cancellationToken: ct);
+ var response = await _quartzClient.JobsPaginatedAsync(new(page: page, pageSize: pageSize, filters: filters, sortings: sortings), cancellationToken: ct);
return response is { Value: { } data } ? new(data.Metadata, data.Items, data.AdditionalMetadata) : null;
}
@@ -111,7 +111,7 @@
{
if (string.IsNullOrEmpty(_jobId)) return;
- await _quartzClient.TriggerJobAsync(jobId: _jobId);
+ await _quartzClient.AddTriggerAsync(_jobId);
await Task.Delay(1000);
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Administration/RoleManager.razor b/src/BUTR.Site.NexusMods.Client/Pages/Administration/RoleManager.razor
index a0866dc5..0b95ac0f 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Administration/RoleManager.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Administration/RoleManager.razor
@@ -53,7 +53,7 @@
{
try
{
- if (await _userClient.SetRoleAsync(nexusModsUserId: (int) _model.UserId, role: _model.Role) is { Error: not null })
+ if (await _userClient.SetRoleAsync(userId: (int) _model.UserId, role: _model.Role) is { Error: not null })
{
await _notificationService.Success(
$"Assigned '{_model.Role}' to user with id '{_model.UserId}'!",
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/Login.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/Login.razor
index 85221e0b..b9bf2aa6 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Basic/Login.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/Login.razor
@@ -45,7 +45,7 @@
TextColor="@TextColor.White"
Type="@ButtonType.Link"
To="@NexusModsTokenUrl">
- Log In via NexusMods Token
+ Log In via NexusMods API Key
@@ -67,11 +67,11 @@
private string NexusModsSSOUrl => $"login-nexusmods-sso{new Uri(_navigationManager.Uri).Query}";
- private string NexusModsTokenUrl => $"login-nexusmods-token{new Uri(_navigationManager.Uri).Query}";
+ private string NexusModsTokenUrl => $"login-nexusmods-apikey{new Uri(_navigationManager.Uri).Query}";
private async void OnDemoLogin()
{
- if (await _authenticationProvider.AuthenticateAsync("", "demo") is not null)
+ if (await _authenticationProvider.AuthenticateWithApiKeyAsync("", "demo") is not null)
{
_navigationManager.NavigateTo(_navigationManager.QueryString("returnUrl") ?? "");
}
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsToken.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsApiKey.razor
similarity index 93%
rename from src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsToken.razor
rename to src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsApiKey.razor
index 35372413..b85429cb 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsToken.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsApiKey.razor
@@ -1,5 +1,5 @@
@attribute [Authorize(Roles = $"{ApplicationRoles.Anonymous}")]
-@page "/login-nexusmods-token"
+@page "/login-nexusmods-apikey"
@inject NavigationManager _navigationManager
@inject AuthenticationProvider _authenticationProvider
@@ -46,7 +46,7 @@
try
{
- if (await _authenticationProvider.AuthenticateAsync(_model.Input, "nexusmods") is null)
+ if (await _authenticationProvider.AuthenticateWithApiKeyAsync(_model.Input, "nexusmods") is null)
{
_isLoading = false;
StateHasChanged();
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2.razor
new file mode 100644
index 00000000..9003a2c7
--- /dev/null
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2.razor
@@ -0,0 +1,25 @@
+@attribute [Authorize(Roles = $"{ApplicationRoles.Anonymous}")]
+@page "/login-nexusmods-oauth2"
+
+@inject IAuthenticationClient _authenticationClient;
+@inject ILocalStorageService _localStorage;
+@inject NavigationManager _navigationManager;
+
+@code {
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ var response = await _authenticationClient.GetOAuthUrlAsync();
+ if (response.Value?.Url is null)
+ {
+ _navigationManager.NavigateTo("login");
+ return;
+ }
+
+ await _localStorage.SetItemAsync("nexusmods_state", response.Value.State);
+ _navigationManager.NavigateTo(response.Value.Url);
+ }
+
+}
\ No newline at end of file
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2Manual.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2Manual.razor
new file mode 100644
index 00000000..3aa87cd3
--- /dev/null
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsOAuth2Manual.razor
@@ -0,0 +1,66 @@
+@attribute [Authorize(Roles = $"{ApplicationRoles.Anonymous}")]
+@page "/login-nexusmods-oauth2-manual"
+
+@inject IAuthenticationClient _authenticationClient;
+@inject ILocalStorageService _localStorage;
+@inject NavigationManager _navigationManager;
+
+
+ @if (!string.IsNullOrEmpty(Url))
+ {
+
+
+
+ NexusMods OAuth2 auth is partially supported.
+
+ Please login to NexusMods by clicking the Login button and paste the url after redirect to here
+
+
+
+
+ Callback Url
+
+
+
+
+
+ }
+
+
+@code {
+
+ private string Url = string.Empty;
+ private string CallbackUrl = string.Empty;
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ var response = await _authenticationClient.GetOAuthUrlAsync();
+ if (response.Value?.Url is null)
+ {
+ _navigationManager.NavigateTo("login");
+ return;
+ }
+
+ Url = response.Value.Url;
+ await _localStorage.SetItemAsync("nexusmods_state", response.Value.State);
+ }
+
+ private void Callback()
+ {
+ var url = new Uri(CallbackUrl);
+ _navigationManager.NavigateTo($"oauth-callback{url.Query}");
+ }
+
+}
\ No newline at end of file
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsSSO.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsSSO.razor
index 7d91bbbc..5c43f3a8 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsSSO.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/LoginNexusModsSSO.razor
@@ -114,7 +114,7 @@
try
{
- var result = await _authenticationProvider.AuthenticateAsync(response.Data.ApiKey, "nexusmods");
+ var result = await _authenticationProvider.AuthenticateWithApiKeyAsync(response.Data.ApiKey, "nexusmods");
if (result is null)
{
await _notificationService.Error("Failed to authorize!");
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/OAuthCallback.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/OAuthCallback.razor
new file mode 100644
index 00000000..193c089d
--- /dev/null
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/OAuthCallback.razor
@@ -0,0 +1,56 @@
+@attribute [Authorize(Roles = $"{ApplicationRoles.Anonymous}")]
+@page "/oauth-callback"
+
+@inject NavigationManager _navigationManager;
+@inject AuthenticationProvider _authenticationProvider;
+@inject ILocalStorageService _localStorage;
+@inject INotificationService _notificationService
+
+@code {
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ if (!await _localStorage.ContainKeyAsync("nexusmods_state"))
+ {
+ await _notificationService.Error("Failed to authenticate! State verification failed", "Error!");
+ return;
+ }
+
+ var queries = _navigationManager.QueryString();
+ var queryStatRaw = queries["state"];
+ var queryCode = queries["code"];
+
+ try
+ {
+ var state = await _localStorage.GetItemAsync("nexusmods_state");
+ if (!Guid.TryParse(queryStatRaw, out var queryState) || state != queryState)
+ {
+ await _notificationService.Error("Failed to authenticate! State verification failed", "Error!");
+ return;
+ }
+
+ try
+ {
+ if (await _authenticationProvider.AuthenticateWithOAuth2Async(queryCode, queryState, "nexusmods") is null)
+ {
+ await _notificationService.Error("Failed to authenticate!", "Error!");
+ }
+ else
+ {
+ _navigationManager.NavigateTo(_navigationManager.QueryString("returnUrl") ?? "");
+ }
+ }
+ catch
+ {
+ await _notificationService.Error("Failed to authenticate!", "Error!");
+ }
+ }
+ finally
+ {
+ await _localStorage.RemoveItemAsync("nexusmods_state");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Basic/Profile.razor b/src/BUTR.Site.NexusMods.Client/Pages/Basic/Profile.razor
index 7b929226..54a0a61b 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Basic/Profile.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Basic/Profile.razor
@@ -194,7 +194,7 @@ else
//var base64Token = Convert.ToBase64String(JsonSerializer.SerializeToUtf8Bytes(token));
//_tokenUrl = $"{_navigationManager.BaseUri}/{base64Token}";
- var userResponse = await _userClient.ProfileAsync();
+ var userResponse = await _userClient.GetProfileAsync();
_user = userResponse.Value;
if (_user?.GitHubUserId is not null)
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Discord/OAuthCallback.razor b/src/BUTR.Site.NexusMods.Client/Pages/Discord/OAuthCallback.razor
index 2a304115..8a8d9d66 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Discord/OAuthCallback.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Discord/OAuthCallback.razor
@@ -102,7 +102,7 @@
return;
}
- await _discordClient.LinkAsync(code: queryCode);
+ await _discordClient.AddLinkAsync(code: queryCode);
_ = await _authenticationProvider.ValidateAsync();
if (await _discordClient.GetUserInfoAsync() is { Value: var userInfo })
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/GOG/OAuthCallback.razor b/src/BUTR.Site.NexusMods.Client/Pages/GOG/OAuthCallback.razor
index ebf8cde8..b242d0c6 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/GOG/OAuthCallback.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/GOG/OAuthCallback.razor
@@ -61,7 +61,7 @@
var queries = _navigationManager.QueryString();
var queryCode = queries["code"];
- await _gogClient.LinkAsync(code: queryCode);
+ await _gogClient.AddLinkAsync(code: queryCode);
_ = await _authenticationProvider.ValidateAsync();
if (await _gogClient.GetUserInfoAsync() is { Value: var userInfo })
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/GitHub/OAuthCallback.razor b/src/BUTR.Site.NexusMods.Client/Pages/GitHub/OAuthCallback.razor
index 379b5cf6..b949eef0 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/GitHub/OAuthCallback.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/GitHub/OAuthCallback.razor
@@ -102,7 +102,7 @@
return;
}
- await _gitHubClient.LinkAsync(code: queryCode);
+ await _gitHubClient.AddLinkAsync(code: queryCode);
_ = await _authenticationProvider.ValidateAsync();
if (await _gitHubClient.GetUserInfoAsync() is { Value: var userInfo })
diff --git a/src/BUTR.Site.NexusMods.Client/Pages/Moderator/AllowUserModuleId.razor b/src/BUTR.Site.NexusMods.Client/Pages/Moderator/AllowUserModuleId.razor
index 9876e981..a84e8062 100644
--- a/src/BUTR.Site.NexusMods.Client/Pages/Moderator/AllowUserModuleId.razor
+++ b/src/BUTR.Site.NexusMods.Client/Pages/Moderator/AllowUserModuleId.razor
@@ -4,7 +4,7 @@
@inject INotificationService _notificationService
@inject INexusModsUserClient _userClient
-
+
Remove Allowed Module Id
@@ -17,10 +17,10 @@
Module Id to Remove
-