Merge pull request #33 from AnonymusRaccoon/fix

Fixing public url with double '/'
This commit is contained in:
Zoe Roux 2021-08-13 12:43:23 +02:00 committed by GitHub
commit 1d114cc91f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 16 deletions

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -12,17 +13,17 @@ namespace Kyoo.Models
/// <summary> /// <summary>
/// The link of the current page. /// The link of the current page.
/// </summary> /// </summary>
public string This { get; } public Uri This { get; }
/// <summary> /// <summary>
/// The link of the first page. /// The link of the first page.
/// </summary> /// </summary>
public string First { get; } public Uri First { get; }
/// <summary> /// <summary>
/// The link of the next page. /// The link of the next page.
/// </summary> /// </summary>
public string Next { get; } public Uri Next { get; }
/// <summary> /// <summary>
/// The number of items in the current page. /// The number of items in the current page.
@ -42,7 +43,7 @@ namespace Kyoo.Models
/// <param name="this">The link of the current page.</param> /// <param name="this">The link of the current page.</param>
/// <param name="next">The link of the next page.</param> /// <param name="next">The link of the next page.</param>
/// <param name="first">The link of the first page.</param> /// <param name="first">The link of the first page.</param>
public Page(ICollection<T> items, string @this, string next, string first) public Page(ICollection<T> items, Uri @this, Uri next, Uri first)
{ {
Items = items; Items = items;
This = @this; This = @this;
@ -58,21 +59,21 @@ namespace Kyoo.Models
/// <param name="query">The list of query strings of the current page</param> /// <param name="query">The list of query strings of the current page</param>
/// <param name="limit">The number of items requested for the current page.</param> /// <param name="limit">The number of items requested for the current page.</param>
public Page(ICollection<T> items, public Page(ICollection<T> items,
string url, Uri url,
Dictionary<string, string> query, Dictionary<string, string> query,
int limit) int limit)
{ {
Items = items; Items = items;
This = url + query.ToQueryString(); This = new Uri(url + query.ToQueryString());
if (items.Count == limit && limit > 0) if (items.Count == limit && limit > 0)
{ {
query["afterID"] = items.Last().ID.ToString(); query["afterID"] = items.Last().ID.ToString();
Next = url + query.ToQueryString(); Next = new Uri(url + query.ToQueryString());
} }
query.Remove("afterID"); query.Remove("afterID");
First = url + query.ToQueryString(); First = new Uri(url + query.ToQueryString());
} }
} }
} }

View File

@ -15,9 +15,9 @@ namespace Kyoo.CommonApi
public class CrudApi<T> : ControllerBase where T : class, IResource public class CrudApi<T> : ControllerBase where T : class, IResource
{ {
private readonly IRepository<T> _repository; private readonly IRepository<T> _repository;
protected readonly string BaseURL; protected readonly Uri BaseURL;
public CrudApi(IRepository<T> repository, string baseURL) public CrudApi(IRepository<T> repository, Uri baseURL)
{ {
_repository = repository; _repository = repository;
BaseURL = baseURL; BaseURL = baseURL;
@ -82,8 +82,8 @@ namespace Kyoo.CommonApi
protected Page<TResult> Page<TResult>(ICollection<TResult> resources, int limit) protected Page<TResult> Page<TResult>(ICollection<TResult> resources, int limit)
where TResult : IResource where TResult : IResource
{ {
return new(resources, return new Page<TResult>(resources,
BaseURL + Request.Path, new Uri(BaseURL, Request.Path),
Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase), Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase),
limit); limit);
} }

View File

@ -1,3 +1,5 @@
using System;
namespace Kyoo.Models.Options namespace Kyoo.Models.Options
{ {
/// <summary> /// <summary>
@ -11,14 +13,14 @@ namespace Kyoo.Models.Options
public const string Path = "Basics"; public const string Path = "Basics";
/// <summary> /// <summary>
/// The internal url where the server will listen /// The internal url where the server will listen. It supports globing.
/// </summary> /// </summary>
public string Url { get; set; } = "http://*:5000"; public string Url { get; set; } = "http://*:5000";
/// <summary> /// <summary>
/// The public url that will be used in items response and in authentication server host. /// The public url that will be used in items response and in authentication server host.
/// </summary> /// </summary>
public string PublicUrl { get; set; } = "http://localhost:5000/"; public Uri PublicUrl { get; set; } = new("http://localhost:5000");
/// <summary> /// <summary>
/// The path of the plugin directory. /// The path of the plugin directory.

View File

@ -20,7 +20,7 @@ namespace Kyoo.Api
public class LibraryItemApi : ControllerBase public class LibraryItemApi : ControllerBase
{ {
private readonly ILibraryItemRepository _libraryItems; private readonly ILibraryItemRepository _libraryItems;
private readonly string _baseURL; private readonly Uri _baseURL;
public LibraryItemApi(ILibraryItemRepository libraryItems, IOptions<BasicOptions> options) public LibraryItemApi(ILibraryItemRepository libraryItems, IOptions<BasicOptions> options)
@ -44,7 +44,7 @@ namespace Kyoo.Api
new Pagination(limit, afterID)); new Pagination(limit, afterID));
return new Page<LibraryItem>(resources, return new Page<LibraryItem>(resources,
_baseURL + Request.Path, new Uri(_baseURL + Request.Path),
Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase), Request.Query.ToDictionary(x => x.Key, x => x.Value.ToString(), StringComparer.InvariantCultureIgnoreCase),
limit); limit);
} }