-
-
+
+
-
+
+
+
+
+
@@ -19,23 +23,38 @@
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Anonymous; } }
- public string Email { get; set; } = "";
- public string Password { get; set; } = "";
+ string Username = "";
+ string Password = "";
+ string Email = "";
private async Task RegisterUser()
{
- User user = new User();
- user.SiteId = PageState.Site.SiteId;
- user.Username = Email;
- user.DisplayName = Email;
- user.Email = Email;
- user.Password = Password;
- await UserService.AddUserAsync(user);
- NavigationManager.NavigateTo("");
+ try
+ {
+ if (Username != "" && Password != "" && Email != "")
+ {
+ User user = new User();
+ user.SiteId = PageState.Site.SiteId;
+ user.Username = Username;
+ user.DisplayName = Username;
+ user.Email = Email;
+ user.Password = Password;
+ await UserService.AddUserAsync(user);
+ NavigationManager.NavigateTo(NavigateUrl(""));
+ }
+ else
+ {
+ ModuleInstance.AddModuleMessage("You Must Provide A Username, Password, and Email Address", MessageType.Warning);
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
}
private void Cancel()
{
- NavigationManager.NavigateTo(NavigateUrl("")); // navigate to home
+ NavigationManager.NavigateTo(NavigateUrl(""));
}
}
diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor
index 159753a3..2f1b447f 100644
--- a/Oqtane.Client/Modules/Admin/Sites/Add.razor
+++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor
@@ -121,6 +121,6 @@ else
alias.SiteId = site.SiteId;
await AliasService.AddAliasAsync(alias);
- NavigationManager.NavigateTo(url, true);
+ NavigationManager.NavigateTo("http://" + url, true);
}
}
diff --git a/Oqtane.Client/Modules/Admin/Sites/Delete.razor b/Oqtane.Client/Modules/Admin/Sites/Delete.razor
new file mode 100644
index 00000000..f57f6e00
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Sites/Delete.razor
@@ -0,0 +1,89 @@
+@namespace Oqtane.Modules.Admin.Sites
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject ISiteService SiteService
+@inject IThemeService ThemeService
+
+@if (themes == null)
+{
+
Loading...
+}
+else
+{
+
+
+
Cancel
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
+
+ Dictionary
themes = new Dictionary();
+ Dictionary panelayouts = new Dictionary();
+
+ string name = "";
+ string logo = "";
+ string themetype;
+ string layouttype;
+
+ protected override void OnInitialized()
+ {
+ themes = ThemeService.GetThemeTypes(PageState.Themes);
+ panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes);
+ name = PageState.Site.Name;
+ logo = PageState.Site.Logo;
+ themetype = PageState.Site.DefaultThemeType;
+ layouttype = PageState.Site.DefaultLayoutType;
+ }
+
+ private async Task DeleteSite()
+ {
+ await SiteService.DeleteSiteAsync(PageState.Site.SiteId);
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+}
diff --git a/Oqtane.Client/Modules/Admin/Sites/Edit.razor b/Oqtane.Client/Modules/Admin/Sites/Edit.razor
new file mode 100644
index 00000000..6ad50046
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Sites/Edit.razor
@@ -0,0 +1,95 @@
+@namespace Oqtane.Modules.Admin.Sites
+@inherits ModuleBase
+@inject NavigationManager NavigationManager
+@inject ISiteService SiteService
+@inject IThemeService ThemeService
+
+@if (themes == null)
+{
+ Loading...
+}
+else
+{
+
+
+ Cancel
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
+
+ Dictionary themes = new Dictionary();
+ Dictionary panelayouts = new Dictionary();
+
+ string name = "";
+ string logo = "";
+ string themetype;
+ string layouttype;
+
+ protected override void OnInitialized()
+ {
+ themes = ThemeService.GetThemeTypes(PageState.Themes);
+ panelayouts = ThemeService.GetPaneLayoutTypes(PageState.Themes);
+ name = PageState.Site.Name;
+ logo = PageState.Site.Logo;
+ themetype = PageState.Site.DefaultThemeType;
+ layouttype = PageState.Site.DefaultLayoutType;
+ }
+
+ private async Task SaveSite()
+ {
+ Site site = PageState.Site;
+ site.Name = name;
+ site.Logo = (logo == null ? "" : logo);
+ site.DefaultThemeType = themetype;
+ site.DefaultLayoutType = (layouttype == null ? "" : layouttype);
+ site = await SiteService.UpdateSiteAsync(site);
+
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+}
diff --git a/Oqtane.Client/Modules/Admin/Users/Add.razor b/Oqtane.Client/Modules/Admin/Users/Add.razor
index 140780bc..587eb406 100644
--- a/Oqtane.Client/Modules/Admin/Users/Add.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Add.razor
@@ -10,10 +10,18 @@
-
+
|
-
+
+ |
+
+
+
+
+ |
+
+
|
@@ -26,10 +34,10 @@
-
+
|
-
+
|
@@ -62,9 +70,10 @@
@code {
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
- string displayname = "";
- string email = "";
+ string username = "";
string password = "";
+ string email = "";
+ string displayname = "";
List profiles;
Dictionary settings;
string category = "";
@@ -87,13 +96,21 @@
try
{
User user = new User();
- user.DisplayName = displayname;
- user.Email = email;
+ user.SiteId = PageState.Site.SiteId;
+ user.Username = username;
user.Password = password;
+ user.Email = email;
+ user.DisplayName = displayname;
user = await UserService.AddUserAsync(user);
- await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
-
- NavigationManager.NavigateTo(NavigateUrl());
+ if (user != null)
+ {
+ await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ else
+ {
+ ModuleInstance.AddModuleMessage("Error Adding User. Please Ensure Password Meets Complexity Requirements And Username Is Not Already In Use.", MessageType.Error);
+ }
}
catch (Exception ex)
{
diff --git a/Oqtane.Client/Modules/Admin/Users/Delete.razor b/Oqtane.Client/Modules/Admin/Users/Delete.razor
index bbd65a9b..7bdef31d 100644
--- a/Oqtane.Client/Modules/Admin/Users/Delete.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Delete.razor
@@ -10,10 +10,10 @@
-
+
|
-
+
|
@@ -24,6 +24,14 @@
+
+
+
+ |
+
+
+ |
+
@foreach (Profile profile in profiles)
{
@@ -42,7 +50,7 @@
-
+
|
}
@@ -55,8 +63,9 @@
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
int userid;
- string displayname = "";
+ string username = "";
string email = "";
+ string displayname = "";
List profiles;
Dictionary settings;
string category = "";
@@ -71,8 +80,9 @@
User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
if (user != null)
{
- displayname = user.DisplayName;
+ username = user.Username;
email = user.Email;
+ displayname = user.DisplayName;
settings = await SettingService.GetUserSettingsAsync(user.UserId);
}
}
diff --git a/Oqtane.Client/Modules/Admin/Users/Edit.razor b/Oqtane.Client/Modules/Admin/Users/Edit.razor
index a7b35a38..9c232a7f 100644
--- a/Oqtane.Client/Modules/Admin/Users/Edit.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Edit.razor
@@ -10,10 +10,18 @@
-
+
|
-
+
+ |
+
+
+
+
+ |
+
+
|
@@ -26,10 +34,10 @@
-
+
|
-
+
|
@@ -63,9 +71,10 @@
public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
int userid;
- string displayname = "";
- string email = "";
+ string username = "";
string password = "";
+ string email = "";
+ string displayname = "";
List profiles;
Dictionary settings;
string category = "";
@@ -80,8 +89,9 @@
User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
if (user != null)
{
- displayname = user.DisplayName;
+ username = user.Username;
email = user.Email;
+ displayname = user.DisplayName;
settings = await SettingService.GetUserSettingsAsync(user.UserId);
}
}
@@ -100,10 +110,12 @@
{
try
{
- User user = new User();
- user.DisplayName = displayname;
- user.Email = email;
+ User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
+ user.SiteId = PageState.Site.SiteId;
+ user.Username = username;
user.Password = password;
+ user.Email = email;
+ user.DisplayName = displayname;
user = await UserService.UpdateUserAsync(user);
await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor
index a2a6b822..fbb3707c 100644
--- a/Oqtane.Client/Modules/Admin/Users/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Index.razor
@@ -15,11 +15,13 @@ else
Name |
|
|
+ |
@context.User.DisplayName |
|
|
+ |
}
diff --git a/Oqtane.Client/Modules/Admin/Users/Roles.razor b/Oqtane.Client/Modules/Admin/Users/Roles.razor
new file mode 100644
index 00000000..69eb316c
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/Users/Roles.razor
@@ -0,0 +1,168 @@
+@namespace Oqtane.Modules.Admin.Users
+@inherits ModuleBase
+@inject IRoleService RoleService
+@inject IUserRoleService UserRoleService
+
+@if (userroles == null)
+{
+ Loading...
+}
+else
+{
+
+
+ Cancel
+
+
+
+
+
+
+ @context.Role.Name |
+
+ @if (!context.Role.IsSystem)
+ {
+
+ }
+ |
+
+
+
+}
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } }
+
+ int userid;
+ List roles;
+ int roleid = -1;
+ string effectivedate = "";
+ string expirydate = "";
+ List userroles;
+
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ userid = Int32.Parse(PageState.QueryString["id"]);
+ roles = await RoleService.GetRolesAsync(PageState.Site.SiteId);
+ await GetUserRoles();
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private async Task GetUserRoles()
+ {
+ userroles = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId);
+ userroles = userroles.Where(item => item.UserId == userid).ToList();
+ }
+
+ private async Task SaveUserRole()
+ {
+ try
+ {
+ if (roleid != -1)
+ {
+ UserRole userrole = userroles.Where(item => item.UserId == userid && item.RoleId == roleid).FirstOrDefault();
+ if (userrole != null)
+ {
+ if (string.IsNullOrEmpty(effectivedate))
+ {
+ userrole.EffectiveDate = null;
+ }
+ else
+ {
+ userrole.EffectiveDate = DateTime.Parse(effectivedate);
+ }
+ if (string.IsNullOrEmpty(expirydate))
+ {
+ userrole.ExpiryDate = null;
+ }
+ else
+ {
+ userrole.ExpiryDate = DateTime.Parse(expirydate);
+ }
+ await UserRoleService.UpdateUserRoleAsync(userrole);
+ }
+ else
+ {
+ userrole = new UserRole();
+ userrole.UserId = userid;
+ userrole.RoleId = roleid;
+ if (string.IsNullOrEmpty(effectivedate))
+ {
+ userrole.EffectiveDate = null;
+ }
+ else
+ {
+ userrole.EffectiveDate = DateTime.Parse(effectivedate);
+ }
+ if (string.IsNullOrEmpty(expirydate))
+ {
+ userrole.ExpiryDate = null;
+ }
+ else
+ {
+ userrole.ExpiryDate = DateTime.Parse(expirydate);
+ }
+ await UserRoleService.AddUserRoleAsync(userrole);
+ }
+ await GetUserRoles();
+ ModuleInstance.AddModuleMessage("User Assigned To Role", MessageType.Success);
+ }
+ else
+ {
+ ModuleInstance.AddModuleMessage("You Must Select A Role", MessageType.Warning);
+ }
+ }
+ catch (Exception ex)
+ {
+ ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
+
+ private async Task DeleteUserRole(int UserRoleId)
+ {
+ await UserRoleService.DeleteUserRoleAsync(UserRoleId);
+ await GetUserRoles();
+ ModuleInstance.AddModuleMessage("User Removed From Role", MessageType.Success);
+ }
+
+}
\ No newline at end of file
diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor
index e1dc6b11..700e8195 100644
--- a/Oqtane.Client/Modules/Controls/Pager.razor
+++ b/Oqtane.Client/Modules/Controls/Pager.razor
@@ -67,7 +67,7 @@
IEnumerable ItemList { get; set; }
- protected override void OnInitialized()
+ protected override void OnParametersSet()
{
if (string.IsNullOrEmpty(PageSize))
{
diff --git a/Oqtane.Client/Services/UserService.cs b/Oqtane.Client/Services/UserService.cs
index 23156458..4dce4763 100644
--- a/Oqtane.Client/Services/UserService.cs
+++ b/Oqtane.Client/Services/UserService.cs
@@ -45,7 +45,14 @@ namespace Oqtane.Services
public async Task AddUserAsync(User User)
{
- return await http.PostJsonAsync(apiurl, User);
+ try
+ {
+ return await http.PostJsonAsync(apiurl, User);
+ }
+ catch
+ {
+ return null;
+ }
}
public async Task UpdateUserAsync(User User)
diff --git a/Oqtane.Client/Shared/Installer.razor b/Oqtane.Client/Shared/Installer.razor
index 479211f7..54191970 100644
--- a/Oqtane.Client/Shared/Installer.razor
+++ b/Oqtane.Client/Shared/Installer.razor
@@ -33,7 +33,7 @@
-
+
|
@@ -41,7 +41,7 @@
-
+
|
@@ -60,7 +60,7 @@
-
+
|
@@ -68,7 +68,7 @@
-
+
|
@@ -83,10 +83,10 @@
-
+
|
-
+
|
@@ -94,7 +94,15 @@
-
+
+ |
+
+
+
+
+ |
+
+
|
@@ -116,8 +124,9 @@
private string DatabaseName = "Oqtane-" + DateTime.Now.ToString("yyyyMMddHHmm");
private string Username = "";
private string Password = "";
- private string Email = "";
+ private string HostUsername = "";
private string HostPassword = "";
+ private string HostEmail = "";
private string Message = "";
private string IntegratedSecurityDisplay = "display:none;";
@@ -172,10 +181,10 @@
User user = new User();
user.SiteId = site.SiteId;
- user.Username = Email;
- user.DisplayName = Email;
- user.Email = Email;
+ user.Username = HostUsername;
user.Password = HostPassword;
+ user.Email = HostEmail;
+ user.DisplayName = HostUsername;
user = await UserService.AddUserAsync(user);
NavigationManager.NavigateTo("", true);
diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs
index 87b1be96..c767e479 100644
--- a/Oqtane.Server/Controllers/UserController.cs
+++ b/Oqtane.Server/Controllers/UserController.cs
@@ -82,7 +82,7 @@ namespace Oqtane.Controllers
{
identityuser = new IdentityUser();
identityuser.UserName = User.Username;
- identityuser.Email = User.Username;
+ identityuser.Email = User.Email;
var result = await IdentityUserManager.CreateAsync(identityuser, User.Password);
if (result.Succeeded)
{
@@ -98,24 +98,19 @@ namespace Oqtane.Controllers
userrole.ExpiryDate = null;
UserRoles.AddUserRole(userrole);
}
-
- // add auto assigned roles to user for site
- List roles = Roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned == true).ToList();
- foreach (Role role in roles)
- {
- UserRole userrole = new UserRole();
- userrole.UserId = user.UserId;
- userrole.RoleId = role.RoleId;
- userrole.EffectiveDate = null;
- userrole.ExpiryDate = null;
- UserRoles.AddUserRole(userrole);
- }
}
}
else
{
- user = Users.GetUser(User.Username);
+ var result = await IdentitySignInManager.CheckPasswordSignInAsync(identityuser, User.Password, false);
+ if (result.Succeeded)
+ {
+ user = Users.GetUser(User.Username);
+ }
+ }
+ if (user != null && hostroleid == -1)
+ {
// add auto assigned roles to user for site
List roles = Roles.GetRoles(User.SiteId).Where(item => item.IsAutoAssigned == true).ToList();
foreach (Role role in roles)
diff --git a/Oqtane.Server/Pages/Login.cshtml.cs b/Oqtane.Server/Pages/Login.cshtml.cs
index 4c08b1d5..d28b543e 100644
--- a/Oqtane.Server/Pages/Login.cshtml.cs
+++ b/Oqtane.Server/Pages/Login.cshtml.cs
@@ -37,6 +37,11 @@ namespace Oqtane.Pages
await IdentitySignInManager.SignInAsync(identityuser, remember);
}
+ if (!returnurl.StartsWith("/"))
+ {
+ returnurl = "/" + returnurl;
+ }
+
return LocalRedirect(Url.Content("~" + returnurl));
}
}
diff --git a/Oqtane.Server/Pages/Logout.cshtml.cs b/Oqtane.Server/Pages/Logout.cshtml.cs
index e4629619..ee6f0df2 100644
--- a/Oqtane.Server/Pages/Logout.cshtml.cs
+++ b/Oqtane.Server/Pages/Logout.cshtml.cs
@@ -14,6 +14,11 @@ namespace Oqtane.Pages
{
await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme);
+ if (!returnurl.StartsWith("/"))
+ {
+ returnurl = "/" + returnurl;
+ }
+
return LocalRedirect(Url.Content("~" + returnurl));
}
}
diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs
index c52d6919..1430f594 100644
--- a/Oqtane.Server/Repository/SiteRepository.cs
+++ b/Oqtane.Server/Repository/SiteRepository.cs
@@ -44,6 +44,8 @@ namespace Oqtane.Repository
ModuleDefinitionName = "Oqtane.Modules.Admin.Users, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "User Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" });
SiteTemplate.Add(new PageTemplate { Name = "Role Management", Parent = "Admin", Path = "admin/roles", Order = 1, Icon = "lock-locked", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]",
ModuleDefinitionName = "Oqtane.Modules.Admin.Roles, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Role Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" });
+ SiteTemplate.Add(new PageTemplate { Name = "Tenant Management", Parent = "Admin", Path = "admin/tenants", Order = 1, Icon = "list", IsNavigation = false, EditMode = true, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]",
+ ModuleDefinitionName = "Oqtane.Modules.Admin.Tenants, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Site Management", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" });
SiteTemplate.Add(new PageTemplate { Name = "Login", Parent = "", Path = "login", Order = 1, Icon = "lock-locked", IsNavigation = false, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]",
ModuleDefinitionName = "Oqtane.Modules.Admin.Login, Oqtane.Client", ModulePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]", Title = "Login", Pane = "top", ContainerType = "Oqtane.Themes.Theme2.Container2, Oqtane.Client" });
SiteTemplate.Add(new PageTemplate { Name = "Register", Parent = "", Path = "register", Order = 1, Icon = "person", IsNavigation = false, EditMode = false, PagePermissions = "[{\"PermissionName\":\"View\",\"Permissions\":\"All Users;Administrators\"},{\"PermissionName\":\"Edit\",\"Permissions\":\"Administrators\"}]",
@@ -86,8 +88,15 @@ namespace Oqtane.Repository
private void CreateSite(Site site)
{
- RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.AllUsersRole, Description = "All Users", IsAutoAssigned = false, IsSystem = true });
- RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.HostRole, Description = "Application Administrators", IsAutoAssigned = false, IsSystem = true });
+ List roles = RoleRepository.GetRoles(site.SiteId, true).ToList();
+ if (!roles.Where(item => item.Name == Constants.AllUsersRole).Any())
+ {
+ RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.AllUsersRole, Description = "All Users", IsAutoAssigned = false, IsSystem = true });
+ }
+ if (!roles.Where(item => item.Name == Constants.HostRole).Any())
+ {
+ RoleRepository.AddRole(new Role { SiteId = null, Name = Constants.HostRole, Description = "Application Administrators", IsAutoAssigned = false, IsSystem = true });
+ }
RoleRepository.AddRole(new Role { SiteId = site.SiteId, Name = Constants.RegisteredRole, Description = "Registered Users", IsAutoAssigned = true, IsSystem = true });
RoleRepository.AddRole(new Role { SiteId = site.SiteId, Name = Constants.AdminRole, Description = "Site Administrators", IsAutoAssigned = false, IsSystem = true });