diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor index 72892e51..19b3be19 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor @@ -146,7 +146,7 @@ else { try { - _package = await PackageService.GetPackageAsync(Constants.PackageId + "." + code, version); + _package = await PackageService.GetPackageAsync(Constants.PackageId + "." + code, version, false); if (_package != null) { StateHasChanged(); @@ -168,7 +168,7 @@ else { try { - await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version, Constants.PackagesFolder); + await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version); await logger.LogInformation("Language Package {Name} {Version} Downloaded Successfully", _package.PackageId, _package.Version); AddModuleMessage(string.Format(Localizer["Success.Language.Download"], NavigateUrl("admin/system")), MessageType.Success); _package = null; diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 850072f1..5633a504 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -3,6 +3,7 @@ @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService +@inject ISettingService SettingService @inject IServiceProvider ServiceProvider @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @@ -92,23 +93,23 @@ { try { - _togglepassword = SharedLocalizer["ShowPassword"]; - - if (PageState.Site.Settings.ContainsKey("LoginOptions:AllowSiteLogin") && !string.IsNullOrEmpty(PageState.Site.Settings["LoginOptions:AllowSiteLogin"])) - { - _allowsitelogin = bool.Parse(PageState.Site.Settings["LoginOptions:AllowSiteLogin"]); - } - - if (PageState.Site.Settings.ContainsKey("ExternalLogin:ProviderType") && !string.IsNullOrEmpty(PageState.Site.Settings["ExternalLogin:ProviderType"])) - { - _allowexternallogin = true; - } - if (PageState.QueryString.ContainsKey("returnurl")) { _returnUrl = PageState.QueryString["returnurl"]; } + _allowexternallogin = (SettingService.GetSetting(PageState.Site.Settings, "ExternalLogin:ProviderType", "") != "") ? true : false; + _allowsitelogin = bool.Parse(SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:AllowSiteLogin", "true")); + + if (_allowexternallogin && !_allowsitelogin) + { + // redirect to external login + NavigationManager.NavigateTo(Utilities.TenantUrl(PageState.Alias, "/pages/external?returnurl=" + _returnUrl), true); + return; + } + + _togglepassword = SharedLocalizer["ShowPassword"]; + if (PageState.QueryString.ContainsKey("name")) { _username = PageState.QueryString["name"]; @@ -167,7 +168,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender && PageState.User == null) + if (firstRender && PageState.User == null && _allowsitelogin) { await username.FocusAsync(); } @@ -206,8 +207,7 @@ if (hybrid) { // hybrid apps utilize an interactive login - var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider - .GetService(typeof(IdentityAuthenticationStateProvider)); + var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); authstateprovider.NotifyAuthenticationChanged(); NavigationManager.NavigateTo(NavigateUrl(WebUtility.UrlDecode(_returnUrl), true)); } @@ -221,7 +221,7 @@ } else { - if ((PageState.Site.Settings.ContainsKey("LoginOptions:TwoFactor") && PageState.Site.Settings["LoginOptions:TwoFactor"] == "required") || user.TwoFactorRequired) + if (SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:TwoFactor", "false") == "required" || user.TwoFactorRequired) { twofactor = true; validated = false; diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index e1b6387a..8a4e2850 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -48,7 +48,10 @@ + @if (!string.IsNullOrEmpty(_packagename)) + { +
+ + @if (string.IsNullOrEmpty(_packageurl)) + { + + } + else + { + @SharedLocalizer["Download"] + } +
+ } + else + { + + }
@@ -191,7 +208,7 @@

@@ -213,6 +230,7 @@ private string _moduledefinitionname = ""; private string _version; private string _packagename = ""; + private string _packageurl = ""; private string _owner = ""; private string _url = ""; private string _contact = ""; @@ -364,7 +382,7 @@ var version = _packages.Where(item => item.PackageId == packagename).FirstOrDefault().Version; try { - _package = await PackageService.GetPackageAsync(packagename, version); + _package = await PackageService.GetPackageAsync(packagename, version, false); if (_package != null) { StateHasChanged(); @@ -382,11 +400,11 @@ } } - private async Task DownloadPackage() + private async Task DownloadTranslation() { try { - await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version, Constants.PackagesFolder); + await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version); await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _package.PackageId, _package.Version); AddModuleMessage(string.Format(Localizer["Success.Translation.Download"], NavigateUrl("admin/system")), MessageType.Success); _package = null; @@ -398,4 +416,28 @@ AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error); } } + + private async Task ValidatePackage() + { + try + { + var package = await PackageService.GetPackageAsync(_packagename, _version, true); + if (package == null || string.IsNullOrEmpty(package.PackageUrl)) + { + AddModuleMessage(Localizer["Message.Validate"], MessageType.Warning); + } + else + { + _packageurl = package.PackageUrl; + AddModuleMessage(Localizer["Message.Download"], MessageType.Info); + } + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version); + AddModuleMessage(Localizer["Error.Validate"], MessageType.Error); + } + } + } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index ee962a80..2d3b80a7 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -128,8 +128,7 @@ else private async Task LoadModuleDefinitions() { _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(_category)).ToList(); - var list = _moduleDefinitions.Where(item => !string.IsNullOrEmpty(item.PackageName)).Select(item => item.PackageName).Distinct().ToList(); - _packages = await PackageService.GetPackagesAsync(list); + _packages = await PackageService.GetPackageUpdatesAsync("module"); } private string PurchaseLink(string packagename) @@ -187,7 +186,7 @@ else { try { - await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder); + 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); } diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 78bdd021..c55d4ec0 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -40,9 +40,9 @@
@if (_children != null && _children.Count > 0 && (_insert == "<" || _insert == ">")) { @@ -209,7 +212,7 @@ @Localizer["ModuleDefinition"] - + @context.Title @context.ModuleDefinition?.Name @@ -292,6 +295,7 @@ private int _childid = -1; private string _isnavigation; private string _isclickable; + private string _actualpath; private string _path; private string _url; private string _ispersonalizable; @@ -323,7 +327,6 @@ { try { - _children = PageState.Pages.Where(item => item.ParentId == null).ToList(); _pageId = Int32.Parse(PageState.QueryString["id"]); _page = await PageService.GetPageAsync(_pageId); _icons = await SystemService.GetIconsAsync(); @@ -341,10 +344,19 @@ _parentid = _page.ParentId.ToString(); _parent = PageState.Pages.FirstOrDefault(item => item.PageId == _page.ParentId); } + _children = new List(); + foreach (Page p in PageState.Pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid)))) + { + if (p.PageId != _pageId && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) + { + _children.Add(p); + } + } _currentparentid = _parentid; _isnavigation = _page.IsNavigation.ToString(); _isclickable = _page.IsClickable.ToString(); - _path = _page.Path; + _actualpath = _page.Path; + _path = _actualpath; if (string.IsNullOrEmpty(_path)) { _path = "/"; @@ -363,10 +375,6 @@ // appearance _title = _page.Title; _themetype = _page.ThemeType; - if (string.IsNullOrEmpty(_themetype) || ThemeService.GetTheme(PageState.Site.Themes, _themetype)?.ThemeName != ThemeService.GetTheme(PageState.Site.Themes, PageState.Site.DefaultThemeType)?.ThemeName) - { - _themetype = PageState.Site.DefaultThemeType; - } _themes = ThemeService.GetThemeControls(PageState.Site.Themes); _containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype); _containertype = _page.DefaultContainerType; @@ -415,34 +423,14 @@ { _parentid = (string)e.Value; _children = new List(); - if (_parentid == "-1") + foreach (Page p in PageState.Pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid)))) { - foreach (Page p in PageState.Pages.Where(item => item.ParentId == null)) + if (p.PageId != _pageId && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) - { - _children.Add(p); - } + _children.Add(p); } } - else - { - foreach (Page p in PageState.Pages.Where(item => item.ParentId == int.Parse(_parentid))) - { - if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList)) - { - _children.Add(p); - } - } - } - if (_parentid == _currentparentid) - { - _insert = "="; - } - else - { - _insert = ">>"; - } + _insert = (_parentid == _currentparentid) ? "=" : ">>"; StateHasChanged(); } catch (Exception ex) @@ -672,5 +660,4 @@ { _icon = NewIcon; } - } diff --git a/Oqtane.Client/Modules/Admin/Profiles/Index.razor b/Oqtane.Client/Modules/Admin/Profiles/Index.razor index c6b7cb8a..f554c6c5 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Index.razor @@ -17,11 +17,17 @@ else     @SharedLocalizer["Name"] + @Localizer["Title"] + @Localizer["Category"] + @Localizer["Order"] @context.Name + @context.Title + @context.Category + @context.ViewOrder } diff --git a/Oqtane.Client/Modules/Admin/Reset/Index.razor b/Oqtane.Client/Modules/Admin/Reset/Index.razor index 0905bb62..151f4aa9 100644 --- a/Oqtane.Client/Modules/Admin/Reset/Index.razor +++ b/Oqtane.Client/Modules/Admin/Reset/Index.razor @@ -6,6 +6,7 @@ @inject IStringLocalizer SharedLocalizer
+
@@ -45,12 +46,14 @@ private string _passwordtype = "password"; private string _togglepassword = string.Empty; private string _confirm = string.Empty; + private string _passwordrequirements; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Anonymous; protected override async Task OnInitializedAsync() { _togglepassword = SharedLocalizer["ShowPassword"]; + _passwordrequirements = await UserService.GetPasswordRequirementsAsync(PageState.Site.SiteId); if (PageState.QueryString.ContainsKey("name") && PageState.QueryString.ContainsKey("token")) { diff --git a/Oqtane.Client/Modules/Admin/Site/Index.razor b/Oqtane.Client/Modules/Admin/Site/Index.razor index ce8a4fc4..c56b538f 100644 --- a/Oqtane.Client/Modules/Admin/Site/Index.razor +++ b/Oqtane.Client/Modules/Admin/Site/Index.razor @@ -49,9 +49,18 @@
- -
+ +
+
+ +
+ +
+
@@ -348,6 +357,7 @@ private string _homepageid = "-"; private string _isdeleted; private string _sitemap = ""; + private string _siteguid = ""; private string _version = ""; private int _logofileid = -1; private FileManager _logofilemanager; @@ -406,6 +416,7 @@ } _isdeleted = site.IsDeleted.ToString(); _sitemap = PageState.Alias.Protocol + PageState.Alias.Name + "/pages/sitemap.xml"; + _siteguid = site.SiteGuid; _version = site.Version; // appearance @@ -602,7 +613,7 @@ // SMTP var settings = await SettingService.GetSiteSettingsAsync(site.SiteId); - settings = SettingService.SetSetting(settings, "SMTPHost", _smtphost, true); + settings = SettingService.SetSetting(settings, "SMTPHost", _smtphost, true); settings = SettingService.SetSetting(settings, "SMTPPort", _smtpport, true); settings = SettingService.SetSetting(settings, "SMTPSSL", _smtpssl, true); settings = SettingService.SetSetting(settings, "SMTPUsername", _smtpusername, true); @@ -610,6 +621,7 @@ settings = SettingService.SetSetting(settings, "SMTPSender", _smtpsender, true); settings = SettingService.SetSetting(settings, "SMTPRelay", _smtprelay, true); settings = SettingService.SetSetting(settings, "SMTPEnabled", _smtpenabled, true); + settings = SettingService.SetSetting(settings, "SiteGuid", _siteguid, true); settings = SettingService.SetSetting(settings, "NotificationRetention", _retention, true); await SettingService.UpdateSiteSettingsAsync(settings, site.SiteId); diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index 03a973ca..3b22ef3c 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -48,7 +48,10 @@ -
+ @if (!string.IsNullOrEmpty(_packagename)) + { +
+ + @if (string.IsNullOrEmpty(_packageurl)) + { + + } + else + { + @SharedLocalizer["Download"] + } +
+ } + else + { + + } +
@@ -97,7 +115,8 @@ private string _isenabled; private string _name; private string _version; - private string _packagename; + private string _packagename = ""; + private string _packageurl = ""; private string _owner = ""; private string _url = ""; private string _contact = ""; @@ -166,4 +185,27 @@ AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning); } } + + private async Task ValidatePackage() + { + try + { + var package = await PackageService.GetPackageAsync(_packagename, _version, true); + if (package == null || string.IsNullOrEmpty(package.PackageUrl)) + { + AddModuleMessage(Localizer["Message.Validate"], MessageType.Warning); + } + else + { + _packageurl = package.PackageUrl; + AddModuleMessage(Localizer["Message.Download"], MessageType.Info); + } + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version); + AddModuleMessage(Localizer["Error.Validate"], MessageType.Error); + } + } } diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index 753451cc..3a7d64ae 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -79,8 +79,7 @@ else try { _themes = await ThemeService.GetThemesAsync(); - var list = _themes.Where(item => !string.IsNullOrEmpty(item.PackageName)).Select(item => item.PackageName).Distinct().ToList(); - _packages = await PackageService.GetPackagesAsync(list); + _packages = await PackageService.GetPackageUpdatesAsync("theme"); } catch (Exception ex) { @@ -147,7 +146,7 @@ else { try { - await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder); + await PackageService.DownloadPackageAsync(packagename, version); await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", packagename, version); AddModuleMessage(string.Format(Localizer["Success.Theme.Install"], NavigateUrl("admin/system")), MessageType.Success); } diff --git a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor index 5bf8d48e..2c91688e 100644 --- a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor +++ b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor @@ -7,34 +7,38 @@ @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer - - - @if (_package != null && _upgradeavailable) - { - - - - } - else - { - - } - - - -
-
- -
- +@if (_initialized) +{ + + + @if (_package != null && _upgradeavailable) + { + + + + } + else + { + + } + + + +
+
+ +
+ +
-
- - - + + + +} @code { + private bool _initialized = false; private Package _package; private bool _upgradeavailable = false; @@ -44,18 +48,26 @@ { try { - List packages = await PackageService.GetPackagesAsync("framework", "", "", ""); - if (packages != null) + if (NavigationManager.BaseUri.Contains("localhost:")) { - _package = packages.Where(item => item.PackageId.StartsWith(Constants.PackageId)).FirstOrDefault(); - if (_package != null) + AddModuleMessage(Localizer["Localhost.Text"], MessageType.Info); + } + else + { + List packages = await PackageService.GetPackagesAsync("framework", "", "", ""); + if (packages != null) { - _upgradeavailable = (Version.Parse(_package.Version).CompareTo(Version.Parse(Constants.Version)) > 0); - } - else - { - _package = new Package { Name = Constants.PackageId, Version = Constants.Version }; + _package = packages.Where(item => item.PackageId.StartsWith(Constants.PackageId)).FirstOrDefault(); + if (_package != null) + { + _upgradeavailable = (Version.Parse(_package.Version).CompareTo(Version.Parse(Constants.Version)) > 0); + } + else + { + _package = new Package { Name = Constants.PackageId, Version = Constants.Version }; + } } + _initialized = true; } } catch @@ -85,8 +97,8 @@ { try { - await PackageService.DownloadPackageAsync(packageid, version, Constants.PackagesFolder); - await PackageService.DownloadPackageAsync(Constants.UpdaterPackageId, version, Constants.PackagesFolder); + await PackageService.DownloadPackageAsync(packageid, version); + await PackageService.DownloadPackageAsync(Constants.UpdaterPackageId, version); AddModuleMessage(Localizer["Success.Framework.Download"], MessageType.Success); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor index b763b08b..a10202ee 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor @@ -299,10 +299,7 @@ else _togglepassword = SharedLocalizer["ShowPassword"]; - if (PageState.Site.Settings.ContainsKey("LoginOptions:TwoFactor") && !string.IsNullOrEmpty(PageState.Site.Settings["LoginOptions:TwoFactor"])) - { - allowtwofactor = (PageState.Site.Settings["LoginOptions:TwoFactor"] == "true"); - } + allowtwofactor = (SettingService.GetSetting(PageState.Site.Settings, "LoginOptions:TwoFactor", "false") == "true"); if (PageState.User != null) { diff --git a/Oqtane.Client/Modules/Admin/UserProfile/View.razor b/Oqtane.Client/Modules/Admin/UserProfile/View.razor index 58a3d211..905c94ef 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/View.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/View.razor @@ -55,7 +55,7 @@
-