From e1e567c42734817e05fed65b95817e41e3615c0c Mon Sep 17 00:00:00 2001 From: vnugent Date: Sun, 18 Aug 2024 01:22:24 -0400 Subject: testing and updates --- back-end/src/Endpoints/WidgetEndpoint.cs | 76 +++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/back-end/src/Endpoints/WidgetEndpoint.cs b/back-end/src/Endpoints/WidgetEndpoint.cs index ad2fa39..13694e3 100644 --- a/back-end/src/Endpoints/WidgetEndpoint.cs +++ b/back-end/src/Endpoints/WidgetEndpoint.cs @@ -15,8 +15,10 @@ using System; using System.Net; +using System.Linq; using System.Threading.Tasks; using System.Text; +using System.Collections.Generic; using VNLib.Utils.IO; using VNLib.Utils.Memory; @@ -43,7 +45,14 @@ namespace SimpleBookmark.Endpoints private readonly BookmarkStore bookmarks = plugin.GetOrCreateSingleton(); private readonly WidgetAuthManager authManager = plugin.GetOrCreateSingleton(); private readonly bool Enabled = config.GetValueOrDefault("enabled", false); - private readonly string? CorsAclHeaerDomains = config.GetValueOrDefault("cors-urls", null); + private readonly string? CorsAclHeaderDomains = config.GetValueOrDefault("cors-urls", null); + + protected override ProtectionSettings EndpointProtectionSettings { get; } = new() + { + DisableSessionsRequired = true, + DisabledTlsRequired = true, + DisableRefererMatch = true, + }; protected override async ValueTask GetAsync(HttpEntity entity) { @@ -52,15 +61,44 @@ namespace SimpleBookmark.Endpoints return VfReturnType.NotFound; } + string limitStr = entity.QueryArgs.GetValueOrDefault("l", "25"); + string pageStr = entity.QueryArgs.GetValueOrDefault("p", "1"); + + //Get any query arguments + if (entity.QueryArgs.TryGetNonEmptyValue("q", out string? query)) + { + //Replace percent encoding with spaces + query = query.Replace('+', ' '); + } + + string[] tags = []; + + //Get tags + if (entity.QueryArgs.TryGetNonEmptyValue("t", out string? tagsS)) + { + //Split tags at spaces and remove empty entries + tags = tagsS.Split('+') + .Where(static t => !string.IsNullOrWhiteSpace(t)) + .ToArray(); + } + + if (!int.TryParse(limitStr, out int limit) || !int.TryParse(pageStr, out int page)) + { + return VirtualClose(entity, HttpStatusCode.BadRequest); + } + + limit = Math.Clamp(limit, 0, 100); + page = Math.Clamp(page, 0, 100); + /* if (!await authManager.IsTokenValidAsync(entity)) { return VirtualClose(entity, HttpStatusCode.Unauthorized); }*/ //Widgets might be loaded in an iframe, so we need to allow cross-site requests - if (CorsAclHeaerDomains is not null && entity.Server.IsCrossSite()) + if (CorsAclHeaderDomains is not null && entity.Server.IsCrossSite()) { - entity.Server.Headers.Append("Access-Control-Allow-Origin", CorsAclHeaerDomains); + entity.Server.Headers.Append("Access-Control-Allow-Origin", CorsAclHeaderDomains); } /* @@ -69,11 +107,11 @@ namespace SimpleBookmark.Endpoints */ BookmarkEntry[] boomarks = await bookmarks.SearchBookmarksAsync( - entity.Session.UserID, - query: null, - tags: ["favorite"], - limit: 25, - page: 1, + userId: entity.Session.UserID, + query: query, + tags: tags, + limit: limit, + page: page, entity.EventCancellation ); @@ -87,7 +125,7 @@ namespace SimpleBookmark.Endpoints CompileGlanceTemplate(baseUrl, output, boomarks); //Assign glance template - entity.Server.Headers["Widget-Title"] = "Simple-Bookmark Widget"; + entity.Server.Headers["Widget-Title"] = "Simple-Bookmark"; entity.Server.Headers["Widget-Content-Type"] = "html"; return VirtualClose(entity, HttpStatusCode.OK, ContentType.Html, output); @@ -96,7 +134,7 @@ namespace SimpleBookmark.Endpoints { output.Dispose(); - Log.Error(ex, "Failed to complie glance template"); + Log.Error(ex, "Failed to complie glance widget template"); return VirtualClose(entity, HttpStatusCode.InternalServerError); } } @@ -117,27 +155,35 @@ namespace SimpleBookmark.Endpoints writer.Append("

"); writer.Append("Favorites:"); + writer.Append("'>Favorites"); writer.Append("

"); writer.Append("
"); //Start bookmarks list - writer.Append("
    "); + writer.Append("
      "); + writer.Append("
    • "); + writer.Append("
        "); foreach (BookmarkEntry entry in bookmarks) { - writer.Append("
      • "); + ReadOnlySpan nameSpan = entry.Name.AsSpan(); + + nameSpan = nameSpan[..Math.Min(nameSpan.Length, 20)]; + + writer.Append("
      • "); //Enable the built-in bookmarks link (makes it prettier) - writer.Append(""); - writer.Append(entry.Name); + writer.Append(nameSpan); writer.Append(""); writer.Append("
      • "); } + writer.Append("
      "); + writer.Append("
    • "); writer.Append("
    "); //Close the document -- cgit