From d3a139feb5266f42acab97a8e279ef16bf457c26 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Tue, 15 Apr 2025 23:07:54 -0400 Subject: [PATCH] Increment View count misc fixes --- AobaCore/AobaService.cs | 5 ++++ AobaServer/AobaAuthenticationHandler.cs | 31 +++++------------------ AobaServer/Controllers/Api/AuthApi.cs | 4 +-- AobaServer/Controllers/MediaController.cs | 3 ++- AobaServer/Program.cs | 6 ++--- 5 files changed, 18 insertions(+), 31 deletions(-) diff --git a/AobaCore/AobaService.cs b/AobaCore/AobaService.cs index 6b5317d..51db6d2 100644 --- a/AobaCore/AobaService.cs +++ b/AobaCore/AobaService.cs @@ -23,4 +23,9 @@ public class AobaService(IMongoDatabase db) { return _media.UpdateOneAsync(m => m.Id == id, Builders.Update.Inc(m => m.ViewCount, 1)); } + + public Task IncrementFileViewCountAsync(ObjectId fileId) + { + return _media.UpdateOneAsync(m => m.MediaId == fileId, Builders.Update.Inc(m => m.ViewCount, 1)); + } } diff --git a/AobaServer/AobaAuthenticationHandler.cs b/AobaServer/AobaAuthenticationHandler.cs index 757378e..3404200 100644 --- a/AobaServer/AobaAuthenticationHandler.cs +++ b/AobaServer/AobaAuthenticationHandler.cs @@ -1,45 +1,28 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.Options; + using System.Text.Encodings.Web; namespace AobaServer; -internal class AobaAuthenticationHandler : AuthenticationHandler +internal class AobaAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder) : AuthenticationHandler(options, logger, encoder) { - public AobaAuthenticationHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder) : base(options, logger, encoder) - { - } - protected override Task HandleAuthenticateAsync() { - throw new System.NotImplementedException(); + throw new NotImplementedException(); } protected override Task HandleChallengeAsync(AuthenticationProperties properties) { - //Don't challenge API requests - if (OriginalPath.StartsWithSegments("/api")) - { - Response.StatusCode = StatusCodes.Status401Unauthorized; - Response.BodyWriter.Complete(); - return Task.CompletedTask; - } - //Redirect to login page - Response.Redirect($"/auth/login?ReturnUrl={Uri.EscapeDataString(OriginalPath)}"); + Response.StatusCode = StatusCodes.Status401Unauthorized; + Response.BodyWriter.Complete(); return Task.CompletedTask; } protected override Task HandleForbiddenAsync(AuthenticationProperties properties) { - //Don't show error page for api requests - if (OriginalPath.StartsWithSegments("/api")) - { - Response.StatusCode = StatusCodes.Status403Forbidden; - Response.BodyWriter.Complete(); - return Task.CompletedTask; - } - //Show Error page - Response.Redirect($"/error/{StatusCodes.Status403Forbidden}"); + Response.StatusCode = StatusCodes.Status403Forbidden; + Response.BodyWriter.Complete(); return Task.CompletedTask; } } \ No newline at end of file diff --git a/AobaServer/Controllers/Api/AuthApi.cs b/AobaServer/Controllers/Api/AuthApi.cs index d9e82a9..f323e83 100644 --- a/AobaServer/Controllers/Api/AuthApi.cs +++ b/AobaServer/Controllers/Api/AuthApi.cs @@ -6,13 +6,13 @@ namespace AobaServer.Controllers.Api; public class AuthApi : ControllerBase { [HttpGet("login")] - public async Task LoginAsync() + public Task LoginAsync() { throw new NotImplementedException(); } [HttpGet("register")] - public async Task RegisterAsync() + public Task RegisterAsync() { throw new NotImplementedException(); } diff --git a/AobaServer/Controllers/MediaController.cs b/AobaServer/Controllers/MediaController.cs index 25b5f69..c1124e4 100644 --- a/AobaServer/Controllers/MediaController.cs +++ b/AobaServer/Controllers/MediaController.cs @@ -10,7 +10,7 @@ using MongoDB.Driver; namespace AobaServer.Controllers; [Route("/m")] -public class MediaController(MediaService mediaService, ILogger logger) : Controller +public class MediaController(MediaService mediaService, AobaService aobaService, ILogger logger) : Controller { [HttpGet("{id}")] [ResponseCache(Duration = int.MaxValue)] @@ -23,6 +23,7 @@ public class MediaController(MediaService mediaService, ILogger return NotFound(); } var mime = MimeTypesMap.GetMimeType(file.Value.FileInfo.Filename); + _ = aobaService.IncrementFileViewCountAsync(id); return File(file, mime, true); } diff --git a/AobaServer/Program.cs b/AobaServer/Program.cs index a9b4435..08b7593 100644 --- a/AobaServer/Program.cs +++ b/AobaServer/Program.cs @@ -42,9 +42,7 @@ builder.Services.AddAuthentication(options => OnMessageReceived = ctx => //Retreive token from cookie if not found in headers { if (string.IsNullOrWhiteSpace(ctx.Token)) - ctx.Token = ctx.Request.Cookies["token"]; - if (string.IsNullOrWhiteSpace(ctx.Token)) - ctx.Token = ctx.Request.Headers["Authorization"].FirstOrDefault()?.Replace("Bearer ", ""); + ctx.Token = ctx.Request.Headers.Authorization.FirstOrDefault()?.Replace("Bearer ", ""); return Task.CompletedTask; }, OnAuthenticationFailed = ctx => @@ -59,7 +57,7 @@ builder.Services.AddAuthentication(options => return Task.CompletedTask; } }; -}).AddScheme("Aoba", cfg => { }); +}).AddScheme("Aoba", null); builder.Services.AddAoba(); builder.Services.Configure(opt =>