added flag to enable root user to login via OIDC

This commit is contained in:
DESKTOP-T0O5CDB\DESK-555BD
2024-09-22 14:32:51 -06:00
parent a61c699417
commit 512852d217
7 changed files with 42 additions and 11 deletions

View File

@@ -12,6 +12,7 @@ namespace CarCareTracker.Helper
UserConfig GetUserConfig(ClaimsPrincipal user); UserConfig GetUserConfig(ClaimsPrincipal user);
bool SaveUserConfig(ClaimsPrincipal user, UserConfig configData); bool SaveUserConfig(ClaimsPrincipal user, UserConfig configData);
bool AuthenticateRootUser(string username, string password); bool AuthenticateRootUser(string username, string password);
bool AuthenticateRootUserOIDC(string email);
string GetWebHookUrl(); string GetWebHookUrl();
string GetMOTD(); string GetMOTD();
string GetLogoUrl(); string GetLogoUrl();
@@ -90,6 +91,16 @@ namespace CarCareTracker.Helper
} }
return username == rootUsername && password == rootPassword; return username == rootUsername && password == rootPassword;
} }
public bool AuthenticateRootUserOIDC(string email)
{
var rootEmail = _config[nameof(UserConfig.DefaultReminderEmail)] ?? string.Empty;
var rootUserOIDC = bool.Parse(_config[nameof(UserConfig.EnableRootUserOIDC)]);
if (!rootUserOIDC || string.IsNullOrWhiteSpace(rootEmail))
{
return false;
}
return email == rootEmail;
}
public string GetServerLanguage() public string GetServerLanguage()
{ {
var serverLanguage = _config[nameof(UserConfig.UserLanguage)] ?? "en_US"; var serverLanguage = _config[nameof(UserConfig.UserLanguage)] ?? "en_US";
@@ -171,6 +182,7 @@ namespace CarCareTracker.Helper
UseMPG = bool.Parse(_config[nameof(UserConfig.UseMPG)]), UseMPG = bool.Parse(_config[nameof(UserConfig.UseMPG)]),
UseDescending = bool.Parse(_config[nameof(UserConfig.UseDescending)]), UseDescending = bool.Parse(_config[nameof(UserConfig.UseDescending)]),
EnableAuth = bool.Parse(_config[nameof(UserConfig.EnableAuth)]), EnableAuth = bool.Parse(_config[nameof(UserConfig.EnableAuth)]),
EnableRootUserOIDC = bool.Parse(_config[nameof(UserConfig.EnableRootUserOIDC)]),
HideZero = bool.Parse(_config[nameof(UserConfig.HideZero)]), HideZero = bool.Parse(_config[nameof(UserConfig.HideZero)]),
UseUKMPG = bool.Parse(_config[nameof(UserConfig.UseUKMPG)]), UseUKMPG = bool.Parse(_config[nameof(UserConfig.UseUKMPG)]),
UseMarkDownOnSavedNotes = bool.Parse(_config[nameof(UserConfig.UseMarkDownOnSavedNotes)]), UseMarkDownOnSavedNotes = bool.Parse(_config[nameof(UserConfig.UseMarkDownOnSavedNotes)]),

View File

@@ -245,14 +245,7 @@ namespace CarCareTracker.Logic
{ {
if (UserIsRoot(credentials)) if (UserIsRoot(credentials))
{ {
return new UserData() return GetRootUserData(credentials.UserName);
{
Id = -1,
UserName = credentials.UserName,
IsAdmin = true,
IsRootUser = true,
EmailAddress = string.Empty
};
} }
else else
{ {
@@ -271,6 +264,13 @@ namespace CarCareTracker.Logic
} }
public UserData ValidateOpenIDUser(LoginModel credentials) public UserData ValidateOpenIDUser(LoginModel credentials)
{ {
//validate for root user
var isRootUser = _configHelper.AuthenticateRootUserOIDC(credentials.EmailAddress);
if (isRootUser)
{
return GetRootUserData(credentials.EmailAddress);
}
var result = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress); var result = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
if (result.Id != default) if (result.Id != default)
{ {
@@ -420,6 +420,17 @@ namespace CarCareTracker.Logic
var hashedPassword = GetHash(credentials.Password); var hashedPassword = GetHash(credentials.Password);
return _configHelper.AuthenticateRootUser(hashedUserName, hashedPassword); return _configHelper.AuthenticateRootUser(hashedUserName, hashedPassword);
} }
private UserData GetRootUserData(string username)
{
return new UserData()
{
Id = -1,
UserName = username,
IsAdmin = true,
IsRootUser = true,
EmailAddress = string.Empty
};
}
#endregion #endregion
private static string GetHash(string value) private static string GetHash(string value)
{ {

View File

@@ -8,6 +8,7 @@
public bool UseDescending { get; set; } public bool UseDescending { get; set; }
public bool EnableAuth { get; set; } public bool EnableAuth { get; set; }
public bool DisableRegistration { get; set; } public bool DisableRegistration { get; set; }
public bool EnableRootUserOIDC { get; set; }
public bool HideZero { get; set; } public bool HideZero { get; set; }
public bool UseUKMPG {get;set;} public bool UseUKMPG {get;set;}
public bool UseThreeDecimalGasCost { get; set; } public bool UseThreeDecimalGasCost { get; set; }

View File

@@ -77,6 +77,10 @@
<input class="form-check-input" onChange="updateSettings()" type="checkbox" role="switch" id="disableRegistration" checked="@Model.UserConfig.DisableRegistration"> <input class="form-check-input" onChange="updateSettings()" type="checkbox" role="switch" id="disableRegistration" checked="@Model.UserConfig.DisableRegistration">
<label class="form-check-label" for="disableRegistration">@translator.Translate(userLanguage, "Disable Registration")</label> <label class="form-check-label" for="disableRegistration">@translator.Translate(userLanguage, "Disable Registration")</label>
</div> </div>
<div class="form-check form-switch">
<input class="form-check-input" onChange="updateSettings()" type="checkbox" role="switch" id="enableRootUserOIDC" checked="@Model.UserConfig.EnableRootUserOIDC">
<label class="form-check-label" for="enableRootUserOIDC">@translator.Translate(userLanguage, "Enable OIDC for Root User")<br /><small class="text-body-secondary">@translator.Translate(userLanguage, "Enable OIDC Login for Root User using the Default Reminder Email")</small></label>
</div>
} }
} }
</div> </div>

View File

@@ -11,7 +11,8 @@
"UseMPG": true, "UseMPG": true,
"UseDescending": false, "UseDescending": false,
"EnableAuth": false, "EnableAuth": false,
"DisableRegistration": false, "DisableRegistration": false,
"EnableRootUserOIDC": false,
"HideZero": false, "HideZero": false,
"EnableAutoReminderRefresh": false, "EnableAutoReminderRefresh": false,
"EnableAutoOdometerInsert": false, "EnableAutoOdometerInsert": false,

File diff suppressed because one or more lines are too long

View File

@@ -30,6 +30,7 @@ function updateSettings() {
//Root User Only Settings that aren't rendered: //Root User Only Settings that aren't rendered:
var defaultReminderEmail = $("#inputDefaultEmail").length > 0 ? $("#inputDefaultEmail").val() : ""; var defaultReminderEmail = $("#inputDefaultEmail").length > 0 ? $("#inputDefaultEmail").val() : "";
var disableRegistration = $("#disableRegistration").length > 0 ? $("#disableRegistration").is(":checked") : false; var disableRegistration = $("#disableRegistration").length > 0 ? $("#disableRegistration").is(":checked") : false;
var enableRootUserOIDC = $("#enableRootUserOIDC").length > 0 ? $("#enableRootUserOIDC").is(":checked") : false;
var userConfigObject = { var userConfigObject = {
useDarkMode: $("#enableDarkMode").is(':checked'), useDarkMode: $("#enableDarkMode").is(':checked'),
@@ -51,7 +52,8 @@ function updateSettings() {
visibleTabs: visibleTabs, visibleTabs: visibleTabs,
defaultTab: defaultTab, defaultTab: defaultTab,
disableRegistration: disableRegistration, disableRegistration: disableRegistration,
defaultReminderEmail: defaultReminderEmail defaultReminderEmail: defaultReminderEmail,
enableRootUserOIDC: enableRootUserOIDC
} }
sloader.show(); sloader.show();
$.post('/Home/WriteToSettings', { userConfig: userConfigObject }, function (data) { $.post('/Home/WriteToSettings', { userConfig: userConfigObject }, function (data) {