diff --git a/.deployment b/.deployment deleted file mode 100644 index 3f3f33f2..00000000 --- a/.deployment +++ /dev/null @@ -1,2 +0,0 @@ -[config] -project = Oqtane.Server/Oqtane.Server.csproj diff --git a/Oqtane.Client/Installer/Controls/AzureSqlConfig.razor b/Oqtane.Client/Installer/Controls/AzureSqlConfig.razor new file mode 100644 index 00000000..18bb881f --- /dev/null +++ b/Oqtane.Client/Installer/Controls/AzureSqlConfig.razor @@ -0,0 +1,119 @@ +@namespace Oqtane.Installer.Controls +@implements Oqtane.Interfaces.IDatabaseConfigControl +@inject IStringLocalizer Localizer +@inject IStringLocalizer SharedLocalizer + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+@if (_security == "custom") +{ +
+ +
+ +
+
+
+ +
+
+ + +
+
+
+} +
+ +
+ +
+
+@if (_encryption == "true") +{ +
+ +
+ +
+
+} + +@code { + private string _server = "tcp:{SQL Server Name}.database.windows.net,1433"; + private string _database = "{SQL Database Name}"; + private string _security = "custom"; + private string _uid = "{SQL Administrator Login}"; + private string _pwd = String.Empty; + private string _passwordType = "password"; + private string _togglePassword = string.Empty; + private string _encryption = "true"; + private string _trustservercertificate = "false"; + + protected override void OnInitialized() + { + _togglePassword = SharedLocalizer["ShowPassword"]; + } + + public string GetConnectionString() + { + var connectionString = String.Empty; + + if (!String.IsNullOrEmpty(_server) && !String.IsNullOrEmpty(_database)) + { + connectionString = $"Data Source={_server};Initial Catalog={_database};"; + } + + if (_security == "integrated") + { + connectionString += "Integrated Security=SSPI;"; + } + else + { + connectionString += $"User ID={_uid};Password={_pwd};"; + } + connectionString += $"Encrypt={_encryption};"; + connectionString += $"TrustServerCertificate={_trustservercertificate};"; + + return connectionString; + } + + private void TogglePassword() + { + if (_passwordType == "password") + { + _passwordType = "text"; + _togglePassword = SharedLocalizer["HidePassword"]; + } + else + { + _passwordType = "password"; + _togglePassword = SharedLocalizer["ShowPassword"]; + } + } +} \ No newline at end of file diff --git a/Oqtane.Client/Installer/Controls/SqlServerConfig.razor b/Oqtane.Client/Installer/Controls/SqlServerConfig.razor index 0f96c9ff..5dcc6423 100644 --- a/Oqtane.Client/Installer/Controls/SqlServerConfig.razor +++ b/Oqtane.Client/Installer/Controls/SqlServerConfig.razor @@ -4,7 +4,7 @@ @inject IStringLocalizer SharedLocalizer
- +
diff --git a/Oqtane.Client/Installer/Installer.razor b/Oqtane.Client/Installer/Installer.razor index c00a0d7e..5d2a487a 100644 --- a/Oqtane.Client/Installer/Installer.razor +++ b/Oqtane.Client/Installer/Installer.razor @@ -15,7 +15,7 @@
-
@SharedLocalizer["Version"] @Constants.Version (.NET 9)
+
@SharedLocalizer["Version"] @Constants.Version (.NET @Environment.Version.Major)

diff --git a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor index 848ab8e5..1d359f66 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor @@ -45,7 +45,7 @@
- +
diff --git a/Oqtane.Client/Modules/Admin/Jobs/Log.razor b/Oqtane.Client/Modules/Admin/Jobs/Log.razor index 7dbc6a3f..f5453315 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Log.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Log.razor @@ -44,14 +44,12 @@ else private async Task GetJobLogs() { - _jobLogs = await JobLogService.GetJobLogsAsync(); - + var jobId = -1; if (PageState.QueryString.ContainsKey("id")) { - _jobLogs = _jobLogs.Where(item => item.JobId == Int32.Parse(PageState.QueryString["id"])).ToList(); + jobId = int.Parse(PageState.QueryString["id"]); } - - _jobLogs = _jobLogs.OrderByDescending(item => item.JobLogId).ToList(); + _jobLogs = await JobLogService.GetJobLogsAsync(jobId); } private string DisplayStatus(bool isExecuting, bool? succeeded) diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor index 803f2437..ef8bbc95 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -73,7 +73,7 @@
- +
diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index 89b10381..fcfe6114 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -13,32 +13,32 @@ } else { -
-
-
- - @((MarkupString)" ") - -
-
- -
-
-
- - +
+
+
+ + + +
+
+ +
+
+
+ +
    @@ -61,17 +61,17 @@ else @context.Name @context.Version - @if (context.IsEnabled) - { - @SharedLocalizer["Yes"] - } - else - { - @SharedLocalizer["No"] - } + @if (context.IsEnabled) + { + @SharedLocalizer["Yes"] + } + else + { + @SharedLocalizer["No"] + } - @if (context.AssemblyName == Constants.ClientId || _modules.Where(m => m.ModuleDefinition?.ModuleDefinitionId == context.ModuleDefinitionId).FirstOrDefault() != null) + @if (context.AssemblyName == Constants.ClientId || _modules.Where(m => m.ModuleDefinition?.ModuleDefinitionId == context.ModuleDefinitionId).FirstOrDefault() != null) { @SharedLocalizer["Yes"] } @@ -87,9 +87,9 @@ else @((MarkupString)PurchaseLink(context.PackageName)) - @{ - var version = UpgradeAvailable(context.PackageName, context.Version); - } + @{ + var version = UpgradeAvailable(context.PackageName, context.Version); + } @if (version != context.Version) { @@ -153,10 +153,10 @@ else link = "" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + ""; } } - } - } - return link; - } + } + } + return link; + } private string SupportLink(string packagename, string version) { @@ -172,52 +172,75 @@ else return link; } - private string UpgradeAvailable(string packagename, string version) - { - if (!string.IsNullOrEmpty(packagename) && _packages != null) - { - var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault(); - if (package != null && Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0) - { - return package.Version; - } - } - return version; - } + private string UpgradeAvailable(string packagename, string version) + { + if (!string.IsNullOrEmpty(packagename) && _packages != null) + { + var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault(); + if (package != null && Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0) + { + return package.Version; + } + } + return version; + } - private async Task DownloadModule(string packagename, string version) - { - try - { - await PackageService.DownloadPackageAsync(packagename, version); - await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", packagename, version); - AddModuleMessage(string.Format(Localizer["Success.Module.Install"], NavigateUrl("admin/system")), MessageType.Success); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Downloading Module {ModuleDefinitionName} {Version} {Error}", packagename, version, ex.Message); - AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); - } - } + private async Task DownloadModule(string packagename, string version) + { + try + { + await PackageService.DownloadPackageAsync(packagename, version); + await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", packagename, version); + AddModuleMessage(string.Format(Localizer["Success.Module.Install"], NavigateUrl("admin/system")), MessageType.Success); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Downloading Module {ModuleDefinitionName} {Version} {Error}", packagename, version, ex.Message); + AddModuleMessage(Localizer["Error.Module.Download"], MessageType.Error); + } + } - private async Task DeleteModule(ModuleDefinition moduleDefinition) - { - try - { - await ModuleDefinitionService.DeleteModuleDefinitionAsync(moduleDefinition.ModuleDefinitionId, moduleDefinition.SiteId); - AddModuleMessage(Localizer["Success.Module.Delete"], MessageType.Success); - NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Deleting Module {ModuleDefinition} {Error}", moduleDefinition, ex.Message); - AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error); - } - } + private async Task DeleteModule(ModuleDefinition moduleDefinition) + { + try + { + await ModuleDefinitionService.DeleteModuleDefinitionAsync(moduleDefinition.ModuleDefinitionId, moduleDefinition.SiteId); + AddModuleMessage(Localizer["Success.Module.Delete"], MessageType.Success); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Deleting Module {ModuleDefinition} {Error}", moduleDefinition, ex.Message); + AddModuleMessage(Localizer["Error.Module.Delete"], MessageType.Error); + } + } - private async Task CategoryChanged(ChangeEventArgs e) - { - _category = (string)e.Value; + private async Task CategoryChanged(ChangeEventArgs e) + { + _category = (string)e.Value; await LoadModuleDefinitions(); - } + } + + private async Task Synchronize() + { + try + { + ShowProgressIndicator(); + foreach (var moduleDefinition in _moduleDefinitions) + { + if (!string.IsNullOrEmpty(moduleDefinition.PackageName) && !_packages.Any(item => item.PackageId == moduleDefinition.PackageName)) + { + var package = await PackageService.GetPackageAsync(moduleDefinition.PackageName, moduleDefinition.Version, false); + } + } + HideProgressIndicator(); + AddModuleMessage(Localizer["Success.Module.Synchronize"], MessageType.Success); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Synchronizing Modules {Error}", ex.Message); + AddModuleMessage(Localizer["Error.Module.Synchronize"], MessageType.Error); + } + } } diff --git a/Oqtane.Client/Modules/Admin/Themes/Edit.razor b/Oqtane.Client/Modules/Admin/Themes/Edit.razor index ed324ebf..125e2846 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Edit.razor @@ -55,7 +55,7 @@
- +
diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index b6b25345..2d8f83a8 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -15,8 +15,8 @@ else { - @((MarkupString)" ") - + +
@@ -173,4 +173,27 @@ else AddModuleMessage(Localizer["Error.Theme.Delete"], MessageType.Error); } } + + private async Task Synchronize() + { + try + { + ShowProgressIndicator(); + foreach (var theme in _themes) + { + if (!string.IsNullOrEmpty(theme.PackageName) && !_packages.Any(item => item.PackageId == theme.PackageName)) + { + await PackageService.GetPackageAsync(theme.PackageName, theme.Version, false); + } + } + HideProgressIndicator(); + AddModuleMessage(Localizer["Success.Theme.Synchronize"], MessageType.Success); + NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, true)); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Synchronizing Themes {Error}", ex.Message); + AddModuleMessage(Localizer["Error.Theme.Synchronize"], MessageType.Error); + } + } } \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor index c43ae566..31fee382 100644 --- a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor +++ b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor @@ -13,9 +13,21 @@ @if (_package != null && _upgradeavailable) { - +
+
+ +
+ +
+
+
+

+ } else { @@ -23,7 +35,6 @@ }
-
@@ -31,8 +42,19 @@
+
+ +
+ +
+
+

+ } @@ -41,6 +63,7 @@ private bool _initialized = false; private Package _package; private bool _upgradeavailable = false; + private string _backup = "True"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; @@ -86,7 +109,7 @@ ShowProgressIndicator(); var interop = new Interop(JSRuntime); await interop.RedirectBrowser(NavigateUrl(), 10); - await InstallationService.Upgrade(); + await InstallationService.Upgrade(bool.Parse(_backup)); } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index e0d895c8..a73350f0 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -421,6 +421,18 @@ else + @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) + { +
+ +
+ +
+
+ } }
@@ -520,6 +532,7 @@ else private string _domainfilter; private string _createusers; private string _verifyusers; + private string _allowhostrole; private string _secret; private string _secrettype = "password"; @@ -602,6 +615,7 @@ else _domainfilter = SettingService.GetSetting(settings, "ExternalLogin:DomainFilter", ""); _createusers = SettingService.GetSetting(settings, "ExternalLogin:CreateUsers", "true"); _verifyusers = SettingService.GetSetting(settings, "ExternalLogin:VerifyUsers", "true"); + _allowhostrole = SettingService.GetSetting(settings, "ExternalLogin:AllowHostRole", "false"); } private async Task LoadUsersAsync(bool load) @@ -705,6 +719,7 @@ else settings = SettingService.SetSetting(settings, "ExternalLogin:DomainFilter", _domainfilter, true); settings = SettingService.SetSetting(settings, "ExternalLogin:CreateUsers", _createusers, true); settings = SettingService.SetSetting(settings, "ExternalLogin:VerifyUsers", _verifyusers, true); + settings = SettingService.SetSetting(settings, "ExternalLogin:AllowHostRole", _allowhostrole, true); settings = SettingService.SetSetting(settings, "JwtOptions:Secret", _secret, true); settings = SettingService.SetSetting(settings, "JwtOptions:Issuer", _issuer, true); diff --git a/Oqtane.Client/Modules/Admin/Visitors/Index.razor b/Oqtane.Client/Modules/Admin/Visitors/Index.razor index ea5510c0..1cb46d3e 100644 --- a/Oqtane.Client/Modules/Admin/Visitors/Index.razor +++ b/Oqtane.Client/Modules/Admin/Visitors/Index.razor @@ -100,6 +100,18 @@ else
+ +
+
+ +
+ +
+
+
+
+ +
} @@ -113,6 +125,7 @@ else private string _filter = ""; private int _retention = 30; private string _correlation = "true"; + private string _robots = ""; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; @@ -139,7 +152,8 @@ else _filter = SettingService.GetSetting(settings, "VisitorFilter", Constants.DefaultVisitorFilter); _retention = int.Parse(SettingService.GetSetting(settings, "VisitorRetention", "30")); _correlation = SettingService.GetSetting(settings, "VisitorCorrelation", "true"); - } + _robots = SettingService.GetSetting(settings, "Robots", ""); + } private async void TypeChanged(ChangeEventArgs e) { @@ -191,6 +205,7 @@ else settings = SettingService.SetSetting(settings, "VisitorFilter", _filter, true); settings = SettingService.SetSetting(settings, "VisitorRetention", _retention.ToString(), true); settings = SettingService.SetSetting(settings, "VisitorCorrelation", _correlation, true); + settings = SettingService.SetSetting(settings, "Robots", _robots, true); await SettingService.UpdateSiteSettingsAsync(settings, PageState.Site.SiteId); AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index 6a2b979d..1e5fa1c5 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -163,6 +163,13 @@ [Parameter] public EventCallback OnUpload { get; set; } // optional - executes a method in the calling component when a file is uploaded + [Parameter] + public EventCallback OnSelectFolder { get; set; } // optional - executes a method in the calling component when a folder is selected + + [Parameter] + public EventCallback OnSelectFile { get; set; } // optional - executes a method in the calling component when a file is selected + + [Obsolete("Use OnSelectFile instead.")] [Parameter] public EventCallback OnSelect { get; set; } // optional - executes a method in the calling component when a file is selected @@ -300,6 +307,8 @@ FileId = -1; _file = null; _image = string.Empty; + + await OnSelectFolder.InvokeAsync(FolderId); StateHasChanged(); } catch (Exception ex) @@ -315,7 +324,10 @@ _message = string.Empty; FileId = int.Parse((string)e.Value); await SetImage(); + #pragma warning disable CS0618 await OnSelect.InvokeAsync(FileId); + #pragma warning restore CS0618 + await OnSelectFile.InvokeAsync(FileId); StateHasChanged(); } @@ -438,7 +450,10 @@ { FileId = file.FileId; await SetImage(); +#pragma warning disable CS0618 await OnSelect.InvokeAsync(FileId); +#pragma warning restore CS0618 + await OnSelectFile.InvokeAsync(FileId); await OnUpload.InvokeAsync(FileId); } await GetFiles(); @@ -489,7 +504,10 @@ await GetFiles(); FileId = -1; await SetImage(); +#pragma warning disable CS0618 await OnSelect.InvokeAsync(FileId); +#pragma warning restore CS0618 + await OnSelectFile.InvokeAsync(FileId); StateHasChanged(); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Controls/PermissionGrid.razor b/Oqtane.Client/Modules/Controls/PermissionGrid.razor index 6bd700bd..a1f6e094 100644 --- a/Oqtane.Client/Modules/Controls/PermissionGrid.razor +++ b/Oqtane.Client/Modules/Controls/PermissionGrid.razor @@ -60,7 +60,7 @@ @foreach (User user in _users) { - @user.DisplayName + @user.DisplayName (@user.Username) @foreach (var permissionname in _permissionnames) { @@ -270,8 +270,8 @@ private async Task> GetUsers(string filter) { var users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); - return users.Where(item => item.User.DisplayName.Contains(filter, StringComparison.OrdinalIgnoreCase)) - .ToDictionary(item => item.UserId.ToString(), item => item.User.DisplayName); + return users.Where(item => item.User.DisplayName.Contains(filter, StringComparison.OrdinalIgnoreCase) || item.User.Username.Contains(filter, StringComparison.OrdinalIgnoreCase)) + .ToDictionary(item => item.UserId.ToString(), item => item.User.DisplayName + " (" + item.User.Username + ")"); } private async Task AddUser() diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj index d8fca67b..c974f27a 100644 --- a/Oqtane.Client/Oqtane.Client.csproj +++ b/Oqtane.Client/Oqtane.Client.csproj @@ -4,7 +4,7 @@ net9.0 Exe Debug;Release - 6.1.1 + 6.1.2 Oqtane Shaun Walker .NET Foundation @@ -12,7 +12,7 @@ .NET Foundation https://www.oqtane.org https://github.com/oqtane/oqtane.framework/blob/dev/LICENSE - https://github.com/oqtane/oqtane.framework/releases/tag/v6.1.1 + https://github.com/oqtane/oqtane.framework/releases/tag/v6.1.2 https://github.com/oqtane/oqtane.framework Git Oqtane @@ -22,16 +22,22 @@ - - - - + + + + + + + true + + + false false diff --git a/Oqtane.Client/Resources/Installer/Controls/SqlServerConfig.resx b/Oqtane.Client/Resources/Installer/Controls/SqlServerConfig.resx index 7909364d..6f249723 100644 --- a/Oqtane.Client/Resources/Installer/Controls/SqlServerConfig.resx +++ b/Oqtane.Client/Resources/Installer/Controls/SqlServerConfig.resx @@ -121,7 +121,7 @@ Server: - Enter the database server name. This might include a port number as well if you are using a cloud service (ie. servername.database.windows.net,1433) + Enter the database server name. This might include a port number as well if you are using a cloud service. Database: diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx index 186fdd65..4421b90a 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Edit.resx @@ -147,8 +147,8 @@ The owner or creator of the module - - The reference url of the module + + The url of the module The contact for the module @@ -171,8 +171,8 @@ Owner: - - Reference Url: + + Url: Contact: diff --git a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx index ce91ee3b..90ffbe18 100644 --- a/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/ModuleDefinitions/Index.resx @@ -159,4 +159,13 @@ Enabled? + + Synchronize + + + Modules Have Been Successfully Synchronized With The Marketplace + + + Error Synchronizing Modules With The Marketplace + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Themes/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Themes/Edit.resx index c18f9761..69f9bdd8 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Themes/Edit.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Themes/Edit.resx @@ -132,8 +132,8 @@ Owner: - - Reference Url: + + Url: Contact: @@ -153,8 +153,8 @@ The owner or creator of the theme - - The reference url of the theme + + The url of the theme The contact for the theme diff --git a/Oqtane.Client/Resources/Modules/Admin/Themes/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Themes/Index.resx index 7ff1b618..4edc516c 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Themes/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Themes/Index.resx @@ -159,4 +159,13 @@ Assign + + Synchronize + + + Themes Have Been Successfully Synchronized With The Marketplace + + + Error Synchronizing Themes With The Marketplace + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Upgrade/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Upgrade/Index.resx index a833fa20..e609f42a 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Upgrade/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Upgrade/Index.resx @@ -151,6 +151,12 @@ You Cannot Perform A System Update In A Development Environment - Please Note That The System Update Capability Is A Simplified Upgrade Process Intended For Small To Medium Sized Installations. For Larger Enterprise Installations You Will Want To Use A Manual Upgrade Process. Also Note That The System Update Capability Is Not Recommended When Using Microsoft Azure Due To Environmental Limitations. + Please Note That The System Update Capability Is A Simplified Upgrade Process Intended For Small To Medium Sized Installations. For Larger Enterprise Installations You Will Want To Use A Manual Upgrade Process. + + + Backup Files? + + + Specify if you want to backup files during the upgrade process. Disabling this option will result in a better experience in some environments. \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx index 3b0bda17..a0a7c1f4 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Users/Index.resx @@ -513,4 +513,10 @@ Do you want users to be logged out of every active session on any device, or only their current session? + + Allow Host Role? + + + Indicate if host roles are supported from the identity provider. Please use caution with this option as it allows the host user to administrate every site within your installation. + \ No newline at end of file diff --git a/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx index 37599ccb..a6dab428 100644 --- a/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/Visitors/Index.resx @@ -198,4 +198,13 @@ Session Duration: + + Robots.txt + + + Instructions: + + + Specify your robots.txt instructions to provide bots with guidance on which parts of your site should be indexed + \ No newline at end of file diff --git a/Oqtane.Client/Services/InstallationService.cs b/Oqtane.Client/Services/InstallationService.cs index f1fbd057..e0c388c8 100644 --- a/Oqtane.Client/Services/InstallationService.cs +++ b/Oqtane.Client/Services/InstallationService.cs @@ -47,9 +47,9 @@ namespace Oqtane.Services return await PostJsonAsync(ApiUrl, config); } - public async Task Upgrade() + public async Task Upgrade(bool backup) { - return await GetJsonAsync($"{ApiUrl}/upgrade"); + return await GetJsonAsync($"{ApiUrl}/upgrade/?backup={backup}"); } public async Task RestartAsync() diff --git a/Oqtane.Client/Services/Interfaces/IInstallationService.cs b/Oqtane.Client/Services/Interfaces/IInstallationService.cs index e8a433c7..1e2311ce 100644 --- a/Oqtane.Client/Services/Interfaces/IInstallationService.cs +++ b/Oqtane.Client/Services/Interfaces/IInstallationService.cs @@ -26,8 +26,9 @@ namespace Oqtane.Services /// /// Starts the upgrade process /// + /// indicates if files should be backed up during upgrade /// internal status/message object - Task Upgrade(); + Task Upgrade(bool backup); /// /// Restarts the installation diff --git a/Oqtane.Client/Services/Interfaces/IJobLogService.cs b/Oqtane.Client/Services/Interfaces/IJobLogService.cs index 3f56473b..e6a10a20 100644 --- a/Oqtane.Client/Services/Interfaces/IJobLogService.cs +++ b/Oqtane.Client/Services/Interfaces/IJobLogService.cs @@ -10,10 +10,11 @@ namespace Oqtane.Services public interface IJobLogService { /// - /// Return a list of all entries + /// Return a list of entries /// + /// /// - Task> GetJobLogsAsync(); + Task> GetJobLogsAsync(int jobId); /// /// Return a entry for the given Id diff --git a/Oqtane.Client/Services/JobLogService.cs b/Oqtane.Client/Services/JobLogService.cs index 04c9c534..0d1d3359 100644 --- a/Oqtane.Client/Services/JobLogService.cs +++ b/Oqtane.Client/Services/JobLogService.cs @@ -15,10 +15,9 @@ namespace Oqtane.Services private string Apiurl => CreateApiUrl("JobLog"); - public async Task> GetJobLogsAsync() + public async Task> GetJobLogsAsync(int jobId) { - List joblogs = await GetJsonAsync>(Apiurl); - return joblogs.OrderBy(item => item.StartDate).ToList(); + return await GetJsonAsync>($"{Apiurl}?jobid={jobId}"); } public async Task GetJobLogAsync(int jobLogId) diff --git a/Oqtane.Client/Themes/Controls/Theme/CookieConsent.razor b/Oqtane.Client/Themes/Controls/Theme/CookieConsent.razor index db39b44f..66626cbc 100644 --- a/Oqtane.Client/Themes/Controls/Theme/CookieConsent.razor +++ b/Oqtane.Client/Themes/Controls/Theme/CookieConsent.razor @@ -6,8 +6,7 @@ @if (_enabled && !Hidden) { - -