diff --git a/.gitignore b/.gitignore index 8b66a5f3..258c0c62 100644 --- a/.gitignore +++ b/.gitignore @@ -12,9 +12,7 @@ msbuild.binlog *.idea Oqtane.Server/appsettings.json -Oqtane.Server/Data/*.mdf -Oqtane.Server/Data/*.ldf -Oqtane.Server/Data/*.db +Oqtane.Server/Data /Oqtane.Server/Properties/PublishProfiles/FolderProfile.pubxml Oqtane.Server/Content @@ -22,3 +20,10 @@ Oqtane.Server/Packages Oqtane.Server/wwwroot/Content Oqtane.Server/wwwroot/Packages/*.log +Oqtane.Server/wwwroot/Modules +!Oqtane.Server/wwwroot/Modules/Oqtane.Modules.* +!Oqtane.Server/wwwroot/Modules/Templates + +Oqtane.Server/wwwroot/Themes +!Oqtane.Server/wwwroot/Themes/Oqtane.Themes.* +!Oqtane.Server/wwwroot/Themes/Templates diff --git a/Oqtane.Client/Installer/Controls/MySQLConfig.razor b/Oqtane.Client/Installer/Controls/MySQLConfig.razor index 7de576b0..735285d4 100644 --- a/Oqtane.Client/Installer/Controls/MySQLConfig.razor +++ b/Oqtane.Client/Installer/Controls/MySQLConfig.razor @@ -28,7 +28,7 @@
- +
diff --git a/Oqtane.Client/Installer/Controls/PostgreSQLConfig.razor b/Oqtane.Client/Installer/Controls/PostgreSQLConfig.razor index d3ff4eca..652e55dc 100644 --- a/Oqtane.Client/Installer/Controls/PostgreSQLConfig.razor +++ b/Oqtane.Client/Installer/Controls/PostgreSQLConfig.razor @@ -40,7 +40,7 @@
- +
} diff --git a/Oqtane.Client/Installer/Controls/SqlServerConfig.razor b/Oqtane.Client/Installer/Controls/SqlServerConfig.razor index 021ba776..12c4b981 100644 --- a/Oqtane.Client/Installer/Controls/SqlServerConfig.razor +++ b/Oqtane.Client/Installer/Controls/SqlServerConfig.razor @@ -35,7 +35,7 @@
- +
} diff --git a/Oqtane.Client/Installer/Installer.razor b/Oqtane.Client/Installer/Installer.razor index fc404d7f..5630b592 100644 --- a/Oqtane.Client/Installer/Installer.razor +++ b/Oqtane.Client/Installer/Installer.razor @@ -62,13 +62,19 @@
- +
+ + +
- +
+ + +
@@ -104,6 +110,8 @@ private string _hostUsername = string.Empty; private string _hostPassword = string.Empty; + private string _passwordtype = "password"; + private string _togglepassword = string.Empty; private string _confirmPassword = string.Empty; private string _hostEmail = string.Empty; private bool _register = true; @@ -112,6 +120,7 @@ protected override async Task OnInitializedAsync() { + _togglepassword = SharedLocalizer["ShowPassword"]; _databases = await DatabaseService.GetDatabasesAsync(); if (_databases.Exists(item => item.IsDefault)) { @@ -218,4 +227,18 @@ _message = Localizer["Message.Require.DbInfo"]; } } + + private void TogglePassword() + { + if (_passwordtype == "password") + { + _passwordtype = "text"; + _togglepassword = SharedLocalizer["HidePassword"]; + } + else + { + _passwordtype = "password"; + _togglepassword = SharedLocalizer["ShowPassword"]; + } + } } diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor index 947cddc7..e98db7d9 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor @@ -84,7 +84,7 @@ else var package = _packages.Where(item => item.PackageId == (Constants.PackageId + ".Client." + code)).FirstOrDefault(); if (package != null) { - upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(Constants.Version)) > 0); + upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(Constants.Version)) == 0); } } diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 80d4f5e4..6b4d02e1 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -95,7 +95,7 @@ { try { - _togglepassword = Localizer["ShowPassword"]; + _togglepassword = SharedLocalizer["ShowPassword"]; if (PageState.Site.Settings.ContainsKey("LoginOptions:AllowSiteLogin") && !string.IsNullOrEmpty(PageState.Site.Settings["LoginOptions:AllowSiteLogin"])) { @@ -117,22 +117,47 @@ _username = PageState.QueryString["name"]; } - if (PageState.QueryString.ContainsKey("token")) + if (PageState.QueryString.ContainsKey("token") && !string.IsNullOrEmpty(_username)) { var user = new User(); user.SiteId = PageState.Site.SiteId; user.Username = _username; - user = await UserService.VerifyEmailAsync(user, PageState.QueryString["token"]); - if (user != null) + if (PageState.QueryString.ContainsKey("key")) { - await logger.LogInformation(LogFunction.Security, "Email Verified For For Username {Username}", _username); - AddModuleMessage(Localizer["Success.Account.Verified"], MessageType.Info); + user = await UserService.LinkUserAsync(user, PageState.QueryString["token"], PageState.Site.Settings["ExternalLogin:ProviderType"], PageState.QueryString["key"], PageState.Site.Settings["ExternalLogin:ProviderName"]); + if (user != null) + { + await logger.LogInformation(LogFunction.Security, "External Login Linkage Successful For Username {Username}", _username); + AddModuleMessage(Localizer["Success.Account.Linked"], MessageType.Info); + } + else + { + await logger.LogError(LogFunction.Security, "External Login Linkage Failed For Username {Username}", _username); + AddModuleMessage(Localizer["Message.Account.NotLinked"], MessageType.Warning); + } + _username = ""; } else { - await logger.LogError(LogFunction.Security, "Email Verification Failed For Username {Username}", _username); - AddModuleMessage(Localizer["Message.Account.NotVerfied"], MessageType.Warning); + user = await UserService.VerifyEmailAsync(user, PageState.QueryString["token"]); + if (user != null) + { + await logger.LogInformation(LogFunction.Security, "Email Verified For For Username {Username}", _username); + AddModuleMessage(Localizer["Success.Account.Verified"], MessageType.Info); + } + else + { + await logger.LogError(LogFunction.Security, "Email Verification Failed For Username {Username}", _username); + AddModuleMessage(Localizer["Message.Account.NotVerified"], MessageType.Warning); + } + } + } + else + { + if (PageState.QueryString.ContainsKey("status")) + { + AddModuleMessage(Localizer["ExternalLoginStatus." + PageState.QueryString["status"]], MessageType.Info); } } } @@ -163,7 +188,7 @@ if (!twofactor) { - user = await UserService.LoginUserAsync(user, false, false); + user = await UserService.LoginUserAsync(user); } else { @@ -174,23 +199,14 @@ { await logger.LogInformation(LogFunction.Security, "Login Successful For Username {Username}", _username); - if (PageState.Runtime == Oqtane.Shared.Runtime.Server) - { - // server-side Blazor needs to post to the Login page so that the cookies are set correctly - var fields = new { __RequestVerificationToken = SiteState.AntiForgeryToken, username = _username, password = _password, remember = _remember, returnurl = _returnUrl }; - string url = Utilities.TenantUrl(PageState.Alias, "/pages/login/"); - await interop.SubmitForm(url, fields); - } - else - { - var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); - authstateprovider.NotifyAuthenticationChanged(); - NavigationManager.NavigateTo(NavigateUrl(_returnUrl, true)); - } + // post back to the Login page so that the cookies are set correctly + var fields = new { __RequestVerificationToken = SiteState.AntiForgeryToken, username = _username, password = _password, remember = _remember, returnurl = _returnUrl }; + string url = Utilities.TenantUrl(PageState.Alias, "/pages/login/"); + await interop.SubmitForm(url, fields); } else { - if (user.TwoFactorRequired) + if (PageState.Site.Settings["LoginOptions:TwoFactor"] == "required" || user.TwoFactorRequired) { twofactor = true; validated = false; @@ -282,12 +298,12 @@ if (_passwordtype == "password") { _passwordtype = "text"; - _togglepassword = Localizer["HidePassword"]; + _togglepassword = SharedLocalizer["HidePassword"]; } else { _passwordtype = "password"; - _togglepassword = Localizer["ShowPassword"]; + _togglepassword = SharedLocalizer["ShowPassword"]; } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Create.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Create.razor index dda4087c..1af77986 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Create.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Create.razor @@ -81,7 +81,7 @@ private List