refactoring, enhancements, and some fixes
This commit is contained in:
@ -3,8 +3,6 @@ using System.Threading.Tasks;
|
||||
using System.Net.Http;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Shared;
|
||||
|
||||
@ -40,13 +38,6 @@ namespace Oqtane.Services
|
||||
return await GetJsonAsync<Alias>($"{ApiUrl}/{aliasId}");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<Alias> GetAliasAsync(string path, DateTime lastSyncDate)
|
||||
{
|
||||
// tenant agnostic as SiteState does not exist
|
||||
return await GetJsonAsync<Alias>($"{CreateApiUrl("Alias", null)}/name/?path={WebUtility.UrlEncode(path)}&sync={lastSyncDate.ToString("yyyyMMddHHmmssfff")}");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<Alias> AddAliasAsync(Alias alias)
|
||||
{
|
||||
|
@ -3,19 +3,28 @@ using System.Threading.Tasks;
|
||||
using System.Net.Http;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Shared;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using System;
|
||||
using System.Net;
|
||||
|
||||
namespace Oqtane.Services
|
||||
{
|
||||
[PrivateApi("Don't show in the documentation, as everything should use the Interface")]
|
||||
public class InstallationService : ServiceBase, IInstallationService
|
||||
{
|
||||
public InstallationService(HttpClient http) : base(http) {}
|
||||
private readonly NavigationManager _navigationManager;
|
||||
|
||||
private string ApiUrl => CreateApiUrl("Installation", null); // tenant agnostic as SiteState does not exist
|
||||
public InstallationService(HttpClient http, NavigationManager navigationManager) : base(http)
|
||||
{
|
||||
_navigationManager = navigationManager;
|
||||
}
|
||||
|
||||
private string ApiUrl => CreateApiUrl("Installation", null, ControllerRoutes.ApiRoute); // tenant agnostic
|
||||
|
||||
public async Task<Installation> IsInstalled()
|
||||
{
|
||||
return await GetJsonAsync<Installation>($"{ApiUrl}/installed");
|
||||
var path = new Uri(_navigationManager.Uri).LocalPath.Substring(1);
|
||||
return await GetJsonAsync<Installation>($"{ApiUrl}/installed/?path={WebUtility.UrlEncode(path)}");
|
||||
}
|
||||
|
||||
public async Task<Installation> Install(InstallConfig config)
|
||||
|
@ -23,14 +23,6 @@ namespace Oqtane.Services
|
||||
/// <returns></returns>
|
||||
Task<Alias> GetAliasAsync(int aliasId);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieve the Alias object of a URL.
|
||||
/// </summary>
|
||||
/// <param name="url">The URL - todoc - is this only the root, or can it be a longer path?</param>
|
||||
/// <param name="lastSyncDate">todoc - unclear what this is for</param>
|
||||
/// <returns></returns>
|
||||
Task<Alias> GetAliasAsync(string url, DateTime lastSyncDate);
|
||||
|
||||
/// <summary>
|
||||
/// Save another <see cref="Oqtane.Models.Alias"/> in the DB. It must already contain all the information incl. <see cref="Oqtane.Models.Tenant"/> it belongs to.
|
||||
/// </summary>
|
||||
|
19
Oqtane.Client/Services/Interfaces/ISyncService.cs
Normal file
19
Oqtane.Client/Services/Interfaces/ISyncService.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using Oqtane.Models;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Oqtane.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Service to retrieve <see cref="Sync"/> information.
|
||||
/// </summary>
|
||||
public interface ISyncService
|
||||
{
|
||||
/// <summary>
|
||||
/// Get sync events
|
||||
/// </summary>
|
||||
/// <param name="lastSyncDate"></param>
|
||||
/// <returns></returns>
|
||||
Task<Sync> GetSyncAsync(DateTime lastSyncDate);
|
||||
}
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Models;
|
||||
using Oqtane.Shared;
|
||||
@ -15,10 +17,25 @@ namespace Oqtane.Services
|
||||
public class ServiceBase
|
||||
{
|
||||
private readonly HttpClient _http;
|
||||
private readonly SiteState _siteState;
|
||||
|
||||
protected ServiceBase(HttpClient client)
|
||||
protected ServiceBase(HttpClient client, SiteState siteState)
|
||||
{
|
||||
_http = client;
|
||||
_siteState = siteState;
|
||||
}
|
||||
|
||||
// should be used with new constructor
|
||||
public string CreateApiUrl(string serviceName)
|
||||
{
|
||||
if (_siteState != null)
|
||||
{
|
||||
return CreateApiUrl(serviceName, _siteState.Alias, ControllerRoutes.ApiRoute);
|
||||
}
|
||||
else // legacy support (before 2.1.0)
|
||||
{
|
||||
return CreateApiUrl(serviceName, null, ControllerRoutes.Default);
|
||||
}
|
||||
}
|
||||
|
||||
public string CreateApiUrl(string serviceName, Alias alias)
|
||||
@ -61,10 +78,10 @@ namespace Oqtane.Services
|
||||
return CreateAuthorizationPolicyUrl(url, new Dictionary<string, int>() { { entityName, entityId } });
|
||||
}
|
||||
|
||||
public string CreateAuthorizationPolicyUrl(string url, Dictionary<string, int> args)
|
||||
public string CreateAuthorizationPolicyUrl(string url, Dictionary<string, int> authEntityId)
|
||||
{
|
||||
string qs = "";
|
||||
foreach (KeyValuePair<string, int> kvp in args)
|
||||
foreach (KeyValuePair<string, int> kvp in authEntityId)
|
||||
{
|
||||
qs += (qs != "") ? "&" : "";
|
||||
qs += "auth" + kvp.Key.ToLower() + "id=" + kvp.Value.ToString();
|
||||
@ -80,6 +97,33 @@ namespace Oqtane.Services
|
||||
}
|
||||
}
|
||||
|
||||
protected void AddRequestHeader(string name, string value)
|
||||
{
|
||||
if (_http.DefaultRequestHeaders.Contains(name))
|
||||
{
|
||||
_http.DefaultRequestHeaders.Remove(name);
|
||||
}
|
||||
_http.DefaultRequestHeaders.Add(name, value);
|
||||
}
|
||||
|
||||
protected void AddAntiForgeryToken()
|
||||
{
|
||||
AddRequestHeader(Constants.AntiForgeryTokenHeaderName, _siteState.AntiForgeryToken);
|
||||
}
|
||||
|
||||
public void AddAuthorizationPolicyHeader(string entityName, int entityId)
|
||||
{
|
||||
AddAuthorizationPolicyHeader(new Dictionary<string, int>() { { entityName, entityId } });
|
||||
}
|
||||
|
||||
public void AddAuthorizationPolicyHeader(Dictionary<string, int> authEntityId)
|
||||
{
|
||||
foreach (KeyValuePair<string, int> kvp in authEntityId)
|
||||
{
|
||||
AddRequestHeader("auth" + kvp.Key.ToLower() + "id", kvp.Value.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task GetAsync(string uri)
|
||||
{
|
||||
var response = await _http.GetAsync(uri);
|
||||
@ -194,10 +238,11 @@ namespace Oqtane.Services
|
||||
return mediaType != null && mediaType.Equals("application/json", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
[Obsolete("This method is obsolete. Use CreateApiUrl(string serviceName, Alias alias) in conjunction with ControllerRoutes.ApiRoute in Controllers instead.", false)]
|
||||
public string CreateApiUrl(string serviceName)
|
||||
//[Obsolete("This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.", false)]
|
||||
// This constructor is obsolete. Use ServiceBase(HttpClient client, SiteState siteState) : base(http, siteState) {} instead.
|
||||
protected ServiceBase(HttpClient client)
|
||||
{
|
||||
return CreateApiUrl(serviceName, null, ControllerRoutes.Default);
|
||||
_http = client;
|
||||
}
|
||||
|
||||
[Obsolete("This method is obsolete. Use CreateApiUrl(string serviceName, Alias alias) in conjunction with ControllerRoutes.ApiRoute in Controllers instead.", false)]
|
||||
|
33
Oqtane.Client/Services/SyncService.cs
Normal file
33
Oqtane.Client/Services/SyncService.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using Oqtane.Models;
|
||||
using System.Threading.Tasks;
|
||||
using System.Net.Http;
|
||||
using System;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Shared;
|
||||
|
||||
namespace Oqtane.Services
|
||||
{
|
||||
/// <inheritdoc cref="ISyncService" />
|
||||
[PrivateApi("Don't show in the documentation, as everything should use the Interface")]
|
||||
public class SyncService : ServiceBase, ISyncService
|
||||
{
|
||||
|
||||
private readonly SiteState _siteState;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor - should only be used by Dependency Injection
|
||||
/// </summary>
|
||||
public SyncService(HttpClient http, SiteState siteState) : base(http)
|
||||
{
|
||||
_siteState = siteState;
|
||||
}
|
||||
|
||||
private string ApiUrl => CreateApiUrl("Sync", _siteState.Alias);
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task<Sync> GetSyncAsync(DateTime lastSyncDate)
|
||||
{
|
||||
return await GetJsonAsync<Sync>($"{ApiUrl}/{lastSyncDate.ToString("yyyyMMddHHmmssfff")}");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user