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
	 Shaun Walker
					Shaun Walker