Merge pull request #4672 from sbwalker/dev

fix #4667 - installation issues when running on IIS
This commit is contained in:
Shaun Walker 2024-09-26 13:33:31 -04:00 committed by GitHub
commit 628c504f84
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 27 deletions

View File

@ -375,7 +375,6 @@ namespace Oqtane.Infrastructure
AddEFMigrationsHistory(sql, _configManager.GetSetting($"{SettingKeys.ConnectionStringsSection}:{tenant.DBConnectionString}", ""), tenant.DBType, tenant.Version, false); AddEFMigrationsHistory(sql, _configManager.GetSetting($"{SettingKeys.ConnectionStringsSection}:{tenant.DBConnectionString}", ""), tenant.DBType, tenant.Version, false);
// push latest model into database // push latest model into database
tenantDbContext.Database.Migrate(); tenantDbContext.Database.Migrate();
result.Success = true;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -384,35 +383,35 @@ namespace Oqtane.Infrastructure
_filelogger.LogError(Utilities.LogMessage(this, result.Message)); _filelogger.LogError(Utilities.LogMessage(this, result.Message));
} }
// execute any version specific upgrade logic if (string.IsNullOrEmpty(result.Message))
var version = tenant.Version;
var index = Array.FindIndex(versions, item => item == version);
if (index != (versions.Length - 1))
{ {
try // execute any version specific upgrade logic
var version = tenant.Version;
var index = Array.FindIndex(versions, item => item == version);
if (index != (versions.Length - 1))
{ {
for (var i = (index + 1); i < versions.Length; i++) try
{ {
upgrades.Upgrade(tenant, versions[i]); for (var i = (index + 1); i < versions.Length; i++)
{
upgrades.Upgrade(tenant, versions[i]);
}
tenant.Version = versions[versions.Length - 1];
db.Entry(tenant).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
result.Message = "An Error Occurred Executing Upgrade Logic On Tenant " + tenant.Name + ". " + ex.ToString();
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
} }
tenant.Version = versions[versions.Length - 1];
db.Entry(tenant).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
result.Message = "An Error Occurred Executing Upgrade Logic On Tenant " + tenant.Name + ". " + ex.ToString();
_filelogger.LogError(Utilities.LogMessage(this, result.Message));
} }
} }
} }
} }
} }
if (string.IsNullOrEmpty(result.Message)) result.Success = string.IsNullOrEmpty(result.Message);
{
result.Success = true;
}
return result; return result;
} }
@ -588,7 +587,7 @@ namespace Oqtane.Infrastructure
// add host role // add host role
var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == RoleNames.Host)?.RoleId ?? 0; var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == RoleNames.Host)?.RoleId ?? 0;
var userRole = new UserRole { UserId = user.UserId, RoleId = hostRoleId, EffectiveDate = null, ExpiryDate = null }; var userRole = new UserRole { UserId = user.UserId, RoleId = hostRoleId, EffectiveDate = null, ExpiryDate = null, IgnoreSecurityStamp = true };
userRoles.AddUserRole(userRole); userRoles.AddUserRole(userRole);
} }
} }

View File

@ -75,6 +75,7 @@ namespace Oqtane.Repository
userrole.RoleId = role.RoleId; userrole.RoleId = role.RoleId;
userrole.EffectiveDate = null; userrole.EffectiveDate = null;
userrole.ExpiryDate = null; userrole.ExpiryDate = null;
userrole.IgnoreSecurityStamp = true;
_userroles.AddUserRole(userrole); _userroles.AddUserRole(userrole);
} }

View File

@ -72,7 +72,12 @@ namespace Oqtane.Repository
DeleteUserRoles(userRole.UserId); DeleteUserRoles(userRole.UserId);
} }
UpdateSecurityStamp(userRole.UserId); if (!userRole.IgnoreSecurityStamp)
{
UpdateSecurityStamp(userRole.UserId);
}
RefreshCache(userRole.UserId);
return userRole; return userRole;
} }
@ -83,7 +88,12 @@ namespace Oqtane.Repository
db.Entry(userRole).State = EntityState.Modified; db.Entry(userRole).State = EntityState.Modified;
db.SaveChanges(); db.SaveChanges();
UpdateSecurityStamp(userRole.UserId); if (!userRole.IgnoreSecurityStamp)
{
UpdateSecurityStamp(userRole.UserId);
}
RefreshCache(userRole.UserId);
return userRole; return userRole;
} }
@ -144,6 +154,7 @@ namespace Oqtane.Repository
db.SaveChanges(); db.SaveChanges();
UpdateSecurityStamp(userRole.UserId); UpdateSecurityStamp(userRole.UserId);
RefreshCache(userRole.UserId);
} }
public void DeleteUserRoles(int userId) public void DeleteUserRoles(int userId)
@ -156,11 +167,11 @@ namespace Oqtane.Repository
db.SaveChanges(); db.SaveChanges();
UpdateSecurityStamp(userId); UpdateSecurityStamp(userId);
RefreshCache(userId);
} }
private void UpdateSecurityStamp(int userId) private void UpdateSecurityStamp(int userId)
{ {
// update user security stamp
using var db = _dbContextFactory.CreateDbContext(); using var db = _dbContextFactory.CreateDbContext();
var user = db.User.Find(userId); var user = db.User.Find(userId);
if (user != null) if (user != null)
@ -168,11 +179,13 @@ namespace Oqtane.Repository
var identityuser = _identityUserManager.FindByNameAsync(user.Username).GetAwaiter().GetResult(); var identityuser = _identityUserManager.FindByNameAsync(user.Username).GetAwaiter().GetResult();
if (identityuser != null) if (identityuser != null)
{ {
_identityUserManager.UpdateSecurityStampAsync(identityuser); _identityUserManager.UpdateSecurityStampAsync(identityuser).GetAwaiter().GetResult();
} }
} }
}
// refresh cache private void RefreshCache(int userId)
{
var alias = _tenantManager.GetAlias(); var alias = _tenantManager.GetAlias();
if (alias != null) if (alias != null)
{ {

View File

@ -1,4 +1,5 @@
using System; using System;
using System.ComponentModel.DataAnnotations.Schema;
namespace Oqtane.Models namespace Oqtane.Models
{ {
@ -26,11 +27,18 @@ namespace Oqtane.Models
/// Start of when this assignment is valid. See also <see cref="ExpiryDate"/> /// Start of when this assignment is valid. See also <see cref="ExpiryDate"/>
/// </summary> /// </summary>
public DateTime? EffectiveDate { get; set; } public DateTime? EffectiveDate { get; set; }
/// <summary> /// <summary>
/// End of when this assignment is valid. See also <see cref="EffectiveDate"/> /// End of when this assignment is valid. See also <see cref="EffectiveDate"/>
/// </summary> /// </summary>
public DateTime? ExpiryDate { get; set; } public DateTime? ExpiryDate { get; set; }
/// <summary>
/// Indicates that the User Security Stamp should not be updated when this user role is added or updated
/// </summary>
[NotMapped]
public bool IgnoreSecurityStamp { get; set; }
/// <summary> /// <summary>
/// Direct reference to the <see cref="Role"/> object. /// Direct reference to the <see cref="Role"/> object.
/// TODO: todoc - is this always populated? /// TODO: todoc - is this always populated?