Fix #5054: parse string to number with invariant culture.

This commit is contained in:
Ben 2025-02-10 16:23:41 +08:00
parent 189f8f1d27
commit 1aabb93f77
37 changed files with 109 additions and 76 deletions

View File

@ -73,7 +73,7 @@
if (PageState.QueryString.ContainsKey("id"))
{
_folderId = int.Parse(PageState.QueryString["id"]);
_folderId = SharedConverter.ParseInteger(PageState.QueryString["id"]);
}
}

View File

@ -212,7 +212,7 @@
folder.SiteId = PageState.Site.SiteId;
folder.Name = _name;
folder.Type = _type;
folder.Capacity = int.Parse(_capacity);
folder.Capacity = SharedConverter.ParseInteger(_capacity);
folder.CacheControl = _cachecontrol;
folder.ImageSizes = _imagesizes;
folder.IsSystem = _isSystem;

View File

@ -119,7 +119,7 @@ else
_imageFiles = (string.IsNullOrEmpty(_imageFiles)) ? Constants.ImageFiles : _imageFiles;
_uploadableFiles = SettingService.GetSetting(settings, "UploadableFiles", Constants.UploadableFiles);
_uploadableFiles = (string.IsNullOrEmpty(_uploadableFiles)) ? Constants.UploadableFiles : _uploadableFiles;
_maxChunkSize = int.Parse(SettingService.GetSetting(settings, "MaxChunkSize", "1"));
_maxChunkSize = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "MaxChunkSize", "1"));
}
catch (Exception ex)
{
@ -137,7 +137,7 @@ else
{
try
{
_folderId = int.Parse((string)e.Value);
_folderId = SharedConverter.ParseInteger((string)e.Value);
await GetFiles();
StateHasChanged();
}

View File

@ -174,11 +174,11 @@
}
else
{
job.Interval = int.Parse(_interval);
job.Interval = SharedConverter.ParseInteger(_interval);
}
job.StartDate = Utilities.LocalDateAndTimeAsUtc(_startDate, _startTime);
job.EndDate = Utilities.LocalDateAndTimeAsUtc(_endDate, _endTime);
job.RetentionHistory = int.Parse(_retentionHistory);
job.RetentionHistory = SharedConverter.ParseInteger(_retentionHistory);
job.NextExecution = Utilities.LocalDateAndTimeAsUtc(_nextDate, _nextTime);
try

View File

@ -127,7 +127,7 @@ else
await GetLogs();
var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId);
_retention = int.Parse( SettingService.GetSetting(settings, "LogRetention", "30"));
_retention = SharedConverter.ParseInteger( SettingService.GetSetting(settings, "LogRetention", "30"));
}
catch (Exception ex)
{
@ -184,7 +184,7 @@ else
private async Task GetLogs()
{
_logs = await LogService.GetLogsAsync(PageState.Site.SiteId, ((_level == "-") ? string.Empty : _level), ((_function == "-") ? string.Empty : _function), int.Parse(_rows));
_logs = await LogService.GetLogsAsync(PageState.Site.SiteId, ((_level == "-") ? string.Empty : _level), ((_function == "-") ? string.Empty : _function), SharedConverter.ParseInteger(_rows));
}
private string GetClass(string function)

View File

@ -256,7 +256,7 @@
return;
}
var pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId);
pagemodule.PageId = int.Parse(_pageId);
pagemodule.PageId = SharedConverter.ParseInteger(_pageId);
pagemodule.Title = _title;
pagemodule.Pane = _pane;
pagemodule.EffectiveDate = Utilities.LocalDateAndTimeAsUtc(_effectivedate);

View File

@ -273,7 +273,7 @@
_containers = ThemeService.GetContainerControls(PageState.Site.Themes, _themetype);
_containertype = PageState.Site.DefaultContainerType;
_children = new List<Page>();
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid))))
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == SharedConverter.ParseInteger(_parentid))))
{
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList))
{
@ -303,7 +303,7 @@
{
_parentid = (string)e.Value;
_children = new List<Page>();
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid))))
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == SharedConverter.ParseInteger(_parentid))))
{
if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList))
{

View File

@ -386,7 +386,7 @@
_parent = _pages.FirstOrDefault(item => item.PageId == _page.ParentId);
}
_children = new List<Page>();
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid, CultureInfo.InvariantCulture))))
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == SharedConverter.ParseInteger(_parentid, CultureInfo.InvariantCulture))))
{
if (p.PageId != _pageId && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList))
{
@ -471,7 +471,7 @@
{
_parentid = (string)e.Value;
_children = new List<Page>();
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == int.Parse(_parentid))))
foreach (Page p in _pages.Where(item => (_parentid == "-1" && item.ParentId == null) || (item.ParentId == SharedConverter.ParseInteger(_parentid))))
{
if (p.PageId != _pageId && UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.PermissionList))
{
@ -661,7 +661,7 @@
}
else
{
await PageService.UpdatePageOrderAsync(_page.SiteId, _page.PageId, int.Parse(_currentparentid));
await PageService.UpdatePageOrderAsync(_page.SiteId, _page.PageId, SharedConverter.ParseInteger(_currentparentid));
}
if (_themeSettingsType != null && _themeSettings is ISettingsControl themeSettingsControl)

View File

@ -189,9 +189,9 @@
profile.Title = _title;
profile.Description = _description;
profile.Category = _category;
profile.ViewOrder = int.Parse(_vieworder);
profile.MaxLength = int.Parse(_maxlength);
profile.Rows = int.Parse(_rows);
profile.ViewOrder = SharedConverter.ParseInteger(_vieworder);
profile.MaxLength = SharedConverter.ParseInteger(_maxlength);
profile.Rows = SharedConverter.ParseInteger(_rows);
profile.DefaultValue = _defaultvalue;
profile.Options = _options;
profile.Validation = _validation;

View File

@ -122,11 +122,11 @@
ExcludeEntities = _excludeEntities,
FromDate = (!string.IsNullOrEmpty(_fromDate)) ? DateTime.Parse(_fromDate) : DateTime.MinValue,
ToDate = (!string.IsNullOrEmpty(_toDate)) ? DateTime.Parse(_toDate) : DateTime.MaxValue,
PageSize = (!string.IsNullOrEmpty(_pageSize)) ? int.Parse(_pageSize) : int.MaxValue,
PageSize = (!string.IsNullOrEmpty(_pageSize)) ? SharedConverter.ParseInteger(_pageSize) : int.MaxValue,
PageIndex = 0,
SortField = (!string.IsNullOrEmpty(_sortField)) ? (SearchSortField)Enum.Parse(typeof(SearchSortField), _sortField) : SearchSortField.Relevance,
SortOrder = (!string.IsNullOrEmpty(_sortOrder)) ? (SearchSortOrder)Enum.Parse(typeof(SearchSortOrder), _sortOrder) : SearchSortOrder.Descending,
BodyLength = (!string.IsNullOrEmpty(_bodyLength)) ? int.Parse(_bodyLength) : 255
BodyLength = (!string.IsNullOrEmpty(_bodyLength)) ? SharedConverter.ParseInteger(_bodyLength) : 255
};
_searchResults = await SearchResultsService.GetSearchResultsAsync(searchQuery);

View File

@ -530,7 +530,7 @@
_smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty);
_smtprelay = SettingService.GetSetting(settings, "SMTPRelay", "False");
_smtpenabled = SettingService.GetSetting(settings, "SMTPEnabled", "True");
_retention = int.Parse(SettingService.GetSetting(settings, "NotificationRetention", "30"));
_retention = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "NotificationRetention", "30"));
// PWA
_pwaisenabled = site.PwaIsEnabled.ToString();
@ -632,7 +632,7 @@
if (site != null)
{
site.Name = _name;
site.HomePageId = (_homepageid != "-" ? int.Parse(_homepageid) : null);
site.HomePageId = (_homepageid != "-" ? SharedConverter.ParseInteger(_homepageid) : null);
site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted));
// appearance

View File

@ -383,7 +383,7 @@ else
}
else
{
var tenant = _tenants.FirstOrDefault(item => item.TenantId == int.Parse(_tenantid));
var tenant = _tenants.FirstOrDefault(item => item.TenantId == SharedConverter.ParseInteger(_tenantid));
if (tenant != null)
{
config.TenantName = tenant.Name;

View File

@ -90,7 +90,7 @@ else
_capturebrokenurls = PageState.Site.CaptureBrokenUrls.ToString();
var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId);
_retention = int.Parse(SettingService.GetSetting(settings, "UrlMappingRetention", "30"));
_retention = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "UrlMappingRetention", "30"));
}
private async void MappedChanged(ChangeEventArgs e)

View File

@ -56,7 +56,7 @@
{
if (!string.IsNullOrEmpty(username.Key) && !string.IsNullOrEmpty(subject))
{
var user = await UserService.GetUserAsync(int.Parse(username.Key), ModuleState.SiteId);
var user = await UserService.GetUserAsync(SharedConverter.ParseInteger(username.Key), ModuleState.SiteId);
if (user != null)
{
var notification = new Notification(PageState.Site.SiteId, PageState.User, user, subject, body);

View File

@ -135,9 +135,9 @@ else
_tracking = PageState.Site.VisitorTracking.ToString();
var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId);
_duration = int.Parse(SettingService.GetSetting(settings, "VisitorDuration", "5"));
_duration = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "VisitorDuration", "5"));
_filter = SettingService.GetSetting(settings, "VisitorFilter", Constants.DefaultVisitorFilter);
_retention = int.Parse(SettingService.GetSetting(settings, "VisitorRetention", "30"));
_retention = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "VisitorRetention", "30"));
_correlation = SettingService.GetSetting(settings, "VisitorCorrelation", "true");
}
@ -159,7 +159,7 @@ else
{
try
{
_days = int.Parse(e.Value.ToString());
_days = SharedConverter.ParseInteger(e.Value.ToString());
await GetVisitors();
StateHasChanged();
}

View File

@ -295,7 +295,7 @@
_message = string.Empty;
try
{
FolderId = int.Parse((string)e.Value);
FolderId = SharedConverter.ParseInteger((string)e.Value);
await GetFiles();
FileId = -1;
_file = null;
@ -313,7 +313,7 @@
private async Task FileChanged(ChangeEventArgs e)
{
_message = string.Empty;
FileId = int.Parse((string)e.Value);
FileId = SharedConverter.ParseInteger((string)e.Value);
await SetImage();
await OnSelect.InvokeAsync(FileId);
StateHasChanged();
@ -386,7 +386,7 @@
if (chunksize == 1)
{
// if ChunkSize parameter is not overridden use the site setting
chunksize = int.Parse(SettingService.GetSetting(PageState.Site.Settings, "MaxChunkSize", "1"));
chunksize = SharedConverter.ParseInteger(SettingService.GetSetting(PageState.Site.Settings, "MaxChunkSize", "1"));
}
if (!ShowProgress)
@ -433,7 +433,7 @@
else
{
// set FileId to first file in upload collection
var file = await FileService.GetFileAsync(int.Parse(folder), uploads[0].Split(":")[0]);
var file = await FileService.GetFileAsync(SharedConverter.ParseInteger(folder), uploads[0].Split(":")[0]);
if (file != null)
{
FileId = file.FileId;

View File

@ -445,17 +445,17 @@
if (!string.IsNullOrEmpty(PageSize))
{
_maxItems = int.Parse(PageSize);
_maxItems = SharedConverter.ParseInteger(PageSize);
}
if (!string.IsNullOrEmpty(Columns))
{
_columns = int.Parse(Columns);
_columns = SharedConverter.ParseInteger(Columns);
}
if (!string.IsNullOrEmpty(DisplayPages))
{
_displayPages = int.Parse(DisplayPages);
_displayPages = SharedConverter.ParseInteger(DisplayPages);
}
if (PageState.QueryString.ContainsKey("page") && int.TryParse(PageState.QueryString["page"], out int page))
@ -466,7 +466,7 @@
{
if (!string.IsNullOrEmpty(CurrentPage))
{
_page = int.Parse(CurrentPage);
_page = SharedConverter.ParseInteger(CurrentPage);
}
else
{

View File

@ -278,7 +278,7 @@
{
if (!string.IsNullOrEmpty(_user.Key))
{
var user = await UserService.GetUserAsync(int.Parse(_user.Key), ModuleState.SiteId);
var user = await UserService.GetUserAsync(SharedConverter.ParseInteger(_user.Key), ModuleState.SiteId);
if (user != null && !_users.Any(item => item.UserId == user.UserId))
{
_users.Add(user);

View File

@ -330,7 +330,7 @@
if (_pageId != "-")
{
_modules = await ModuleService.GetModulesAsync(PageState.Page.SiteId);
_modules = _modules.Where(module => module.PageId == int.Parse(_pageId) && module.IsDeleted == false &&
_modules = _modules.Where(module => module.PageId == SharedConverter.ParseInteger(_pageId) && module.IsDeleted == false &&
UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, module.PermissionList) &&
(_moduleType == "add" || module.ModuleDefinition.IsPortable))
.ToList();
@ -345,7 +345,7 @@
{
if ((_moduleType == "new" && _moduleDefinitionName != "-") || (_moduleType != "new" && _moduleId != "-"))
{
var newModuleId = _moduleId != "-" ? int.Parse(_moduleId) : 0;
var newModuleId = _moduleId != "-" ? SharedConverter.ParseInteger(_moduleId) : 0;
if (_moduleType == "new")
{
Module module = new Module();
@ -360,7 +360,7 @@
}
else if (_moduleType == "copy")
{
var module = await ModuleService.GetModuleAsync(int.Parse(_moduleId));
var module = await ModuleService.GetModuleAsync(SharedConverter.ParseInteger(_moduleId));
module.ModuleId = 0;
module.SiteId = PageState.Page.SiteId;
module.PageId = PageState.Page.PageId;
@ -368,7 +368,7 @@
module.PermissionList = GenerateDefaultPermissions(module.SiteId);
module = await ModuleService.AddModuleAsync(module);
var moduleContent = await ModuleService.ExportModuleAsync(int.Parse(_moduleId), PageState.Page.PageId);
var moduleContent = await ModuleService.ExportModuleAsync(SharedConverter.ParseInteger(_moduleId), PageState.Page.PageId);
if (!string.IsNullOrEmpty(moduleContent))
{
await ModuleService.ImportModuleAsync(module.ModuleId, PageState.Page.PageId, moduleContent);
@ -391,7 +391,7 @@
}
else
{
pageModule.Title = _modules.FirstOrDefault(item => item.ModuleId == int.Parse(_moduleId))?.Title;
pageModule.Title = _modules.FirstOrDefault(item => item.ModuleId == SharedConverter.ParseInteger(_moduleId))?.Title;
}
}
@ -465,13 +465,13 @@
{
case "Admin":
// get admin dashboard moduleid
moduleId = int.Parse(PageState.Site.Settings[Constants.AdminDashboardModule]);
moduleId = SharedConverter.ParseInteger(PageState.Site.Settings[Constants.AdminDashboardModule]);
NavigationManager.NavigateTo(Utilities.EditUrl(PageState.Alias.Path, "admin", moduleId, "Index", "returnurl=" + WebUtility.UrlEncode(PageState.Route.PathAndQuery)));
break;
case "Add":
case "Edit":
// get page management moduleid
moduleId = int.Parse(PageState.Site.Settings[Constants.PageManagementModule]);
moduleId = SharedConverter.ParseInteger(PageState.Site.Settings[Constants.PageManagementModule]);
NavigationManager.NavigateTo(Utilities.EditUrl(PageState.Alias.Path, "admin/pages", moduleId, location, $"id={PageState.Page.PageId}&returnurl={WebUtility.UrlEncode(PageState.Route.PathAndQuery)}"));
break;
}

View File

@ -63,7 +63,7 @@
{
if (PageState.QueryString.ContainsKey("id"))
{
pageId = int.Parse(PageState.QueryString["id"]);
pageId = SharedConverter.ParseInteger(PageState.QueryString["id"]);
}
try

View File

@ -105,7 +105,7 @@
_error = "";
Route route = new Route(_absoluteUri, SiteState.Alias.Path);
int moduleid = int.Parse(route.ModuleId, CultureInfo.InvariantCulture);
int moduleid = SharedConverter.ParseInteger(route.ModuleId, CultureInfo.InvariantCulture);
var action = route.Action;
var querystring = Utilities.ParseQueryString(route.Query);
@ -159,7 +159,7 @@
if (authState.User.Identity.IsAuthenticated && authState.User.Claims.Any(item => item.Type == Constants.SiteKeyClaimType && item.Value == SiteState.Alias.SiteKey))
{
// get user
var userid = int.Parse(authState.User.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value);
var userid = SharedConverter.ParseInteger(authState.User.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value);
user = await UserService.GetUserAsync(userid, SiteState.Alias.SiteId);
if (user != null)
{
@ -262,7 +262,7 @@
// edit mode
if (user != null)
{
var editpageid = user.Settings.ContainsKey("CP-editmode") ? int.Parse(user.Settings["CP-editmode"], CultureInfo.InvariantCulture) : -1;
var editpageid = user.Settings.ContainsKey("CP-editmode") ? SharedConverter.ParseInteger(user.Settings["CP-editmode"], CultureInfo.InvariantCulture) : -1;
if ((querystring.ContainsKey("edit") && querystring["edit"] == "true") || page.PageId == editpageid)
{
editmode = true;

View File

@ -182,7 +182,7 @@
}
// includes resources
var resources = await GetPageResources(alias, site, page, modules, int.Parse(route.ModuleId, CultureInfo.InvariantCulture), route.Action);
var resources = await GetPageResources(alias, site, page, modules, SharedConverter.ParseInteger(route.ModuleId, CultureInfo.InvariantCulture), route.Action);
ManageStyleSheets(resources);
ManageScripts(resources, alias);
@ -423,7 +423,7 @@
// set cookie
if (setcookie)
{
expiry = DateTime.UtcNow.AddMinutes(int.Parse(settings.GetValue("VisitorDuration", "5")));
expiry = DateTime.UtcNow.AddMinutes(SharedConverter.ParseInteger(settings.GetValue("VisitorDuration", "5")));
Context.Response.Cookies.Append(
visitorCookieName,
@ -456,7 +456,7 @@
var secret = sitesettings.GetValue("JwtOptions:Secret", "");
if (!string.IsNullOrEmpty(secret))
{
_authorizationToken = JwtManager.GenerateToken(alias, (ClaimsIdentity)Context.User.Identity, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""), int.Parse(sitesettings.GetValue("JwtOptions:Lifetime", "20")));
_authorizationToken = JwtManager.GenerateToken(alias, (ClaimsIdentity)Context.User.Identity, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""), SharedConverter.ParseInteger(sitesettings.GetValue("JwtOptions:Lifetime", "20")));
}
}
}

View File

@ -530,7 +530,7 @@ namespace Oqtane.Controllers
// parse the filename which is in the format of filename.ext.part_001_999
string token = ".part_";
string parts = Path.GetExtension(filename)?.Replace(token, ""); // returns "001_999"
int totalparts = int.Parse(parts?.Substring(parts.IndexOf("_") + 1));
int totalparts = SharedConverter.ParseInteger(parts?.Substring(parts.IndexOf("_") + 1));
filename = Path.GetFileNameWithoutExtension(filename); // base filename
string[] fileparts = Directory.GetFiles(folder, filename + token + "*"); // list of all file parts

View File

@ -98,7 +98,7 @@ namespace Oqtane.Controllers
if (folder == null && User.IsInRole(RoleNames.Host) && path.StartsWith("Users/"))
{
// create the user folder on this site for the host user
var userId = int.Parse(path.ReplaceMultiple(new string[] { "Users", "/" }, ""));
var userId = SharedConverter.ParseInteger(path.ReplaceMultiple(new string[] { "Users", "/" }, ""));
folder = _folders.GetFolder(siteId, "Users/");
if (folder != null)
{

View File

@ -33,7 +33,7 @@ namespace Oqtane.Controllers
int SiteId;
if (int.TryParse(siteid, out SiteId) && SiteId == _alias.SiteId)
{
return _logs.GetLogs(SiteId, level, function, int.Parse(rows));
return _logs.GetLogs(SiteId, level, function, SharedConverter.ParseInteger(rows));
}
else
{

View File

@ -32,7 +32,7 @@ namespace Oqtane.Controllers
// legacy support
if (_authEntityId.Count == 0 && accessor.HttpContext.Request.Query.ContainsKey("entityid"))
{
_entityId = int.Parse(accessor.HttpContext.Request.Query["entityid"]);
_entityId = SharedConverter.ParseInteger(accessor.HttpContext.Request.Query["entityid"]);
}
}

View File

@ -188,7 +188,7 @@ namespace Oqtane.Controllers
Page page = null;
Page parent = _pages.GetPage(id);
User user = _userPermissions.GetUser(User);
if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && user.UserId == int.Parse(userid))
if (parent != null && parent.SiteId == _alias.SiteId && parent.IsPersonalizable && user.UserId == SharedConverter.ParseInteger(userid))
{
var path = Utilities.GetFriendlyUrl(user.Username);
page = _pages.GetPage(parent.Path + "/" + path, parent.SiteId);
@ -208,12 +208,12 @@ namespace Oqtane.Controllers
page.Icon = parent.Icon;
page.PermissionList = new List<Permission>()
{
new Permission(PermissionNames.View, int.Parse(userid), true),
new Permission(PermissionNames.View, SharedConverter.ParseInteger(userid), true),
new Permission(PermissionNames.View, RoleNames.Everyone, true),
new Permission(PermissionNames.Edit, int.Parse(userid), true)
new Permission(PermissionNames.Edit, SharedConverter.ParseInteger(userid), true)
};
page.IsPersonalizable = false;
page.UserId = int.Parse(userid);
page.UserId = SharedConverter.ParseInteger(userid);
page = _pages.AddPage(page);
// copy modules
@ -227,9 +227,9 @@ namespace Oqtane.Controllers
module.AllPages = false;
module.PermissionList = new List<Permission>()
{
new Permission(PermissionNames.View, int.Parse(userid), true),
new Permission(PermissionNames.View, SharedConverter.ParseInteger(userid), true),
new Permission(PermissionNames.View, RoleNames.Everyone, true),
new Permission(PermissionNames.Edit, int.Parse(userid), true)
new Permission(PermissionNames.Edit, SharedConverter.ParseInteger(userid), true)
};
module = _modules.AddModule(module);

View File

@ -362,7 +362,7 @@ namespace Oqtane.Controllers
var secret = sitesettings.GetValue("JwtOptions:Secret", "");
if (!string.IsNullOrEmpty(secret))
{
token = _jwtManager.GenerateToken(_tenantManager.GetAlias(), (ClaimsIdentity)User.Identity, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""), int.Parse(sitesettings.GetValue("JwtOptions:Lifetime", "20")));
token = _jwtManager.GenerateToken(_tenantManager.GetAlias(), (ClaimsIdentity)User.Identity, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""), SharedConverter.ParseInteger(sitesettings.GetValue("JwtOptions:Lifetime", "20")));
}
return token;
}

View File

@ -24,7 +24,7 @@ namespace Oqtane.Extensions
{
if (claimsPrincipal.HasClaim(item => item.Type == ClaimTypes.NameIdentifier))
{
return int.Parse(claimsPrincipal.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value);
return SharedConverter.ParseInteger(claimsPrincipal.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value);
}
else
{
@ -55,7 +55,7 @@ namespace Oqtane.Extensions
var sitekey = SiteKey(claimsPrincipal);
if (!string.IsNullOrEmpty(sitekey) && sitekey.Contains(":"))
{
return int.Parse(sitekey.Split(':')[0]);
return SharedConverter.ParseInteger(sitekey.Split(':')[0]);
}
return -1;
}
@ -65,7 +65,7 @@ namespace Oqtane.Extensions
var sitekey = SiteKey(claimsPrincipal);
if (!string.IsNullOrEmpty(sitekey) && sitekey.Contains(":"))
{
return int.Parse(sitekey.Split(':')[1]);
return SharedConverter.ParseInteger(sitekey.Split(':')[1]);
}
return -1;
}

View File

@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection;
using Oqtane.Models;
using Microsoft.AspNetCore.Identity;
using System;
using Oqtane.Shared;
namespace Oqtane.Extensions
{
@ -13,15 +14,15 @@ namespace Oqtane.Extensions
builder.AddSiteOptions<IdentityOptions>((options, alias, sitesettings) =>
{
// password options
options.Password.RequiredLength = int.Parse(sitesettings.GetValue("IdentityOptions:Password:RequiredLength", options.Password.RequiredLength.ToString()));
options.Password.RequiredUniqueChars = int.Parse(sitesettings.GetValue("IdentityOptions:Password:RequiredUniqueChars", options.Password.RequiredUniqueChars.ToString()));
options.Password.RequiredLength = SharedConverter.ParseInteger(sitesettings.GetValue("IdentityOptions:Password:RequiredLength", options.Password.RequiredLength.ToString()));
options.Password.RequiredUniqueChars = SharedConverter.ParseInteger(sitesettings.GetValue("IdentityOptions:Password:RequiredUniqueChars", options.Password.RequiredUniqueChars.ToString()));
options.Password.RequireDigit = bool.Parse(sitesettings.GetValue("IdentityOptions:Password:RequireDigit", options.Password.RequireDigit.ToString()));
options.Password.RequireUppercase = bool.Parse(sitesettings.GetValue("IdentityOptions:Password:RequireUppercase", options.Password.RequireUppercase.ToString()));
options.Password.RequireLowercase = bool.Parse(sitesettings.GetValue("IdentityOptions:Password:RequireLowercase", options.Password.RequireLowercase.ToString()));
options.Password.RequireNonAlphanumeric = bool.Parse(sitesettings.GetValue("IdentityOptions:Password:RequireNonAlphanumeric", options.Password.RequireNonAlphanumeric.ToString()));
// lockout options
options.Lockout.MaxFailedAccessAttempts = int.Parse(sitesettings.GetValue("IdentityOptions:Lockout:MaxFailedAccessAttempts", options.Lockout.MaxFailedAccessAttempts.ToString()));
options.Lockout.MaxFailedAccessAttempts = SharedConverter.ParseInteger(sitesettings.GetValue("IdentityOptions:Lockout:MaxFailedAccessAttempts", options.Lockout.MaxFailedAccessAttempts.ToString()));
options.Lockout.DefaultLockoutTimeSpan = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow) + TimeSpan.Parse(sitesettings.GetValue("IdentityOptions:Lockout:DefaultLockoutTimeSpan", options.Lockout.DefaultLockoutTimeSpan.ToString()));
options.Lockout.AllowedForNewUsers = options.Lockout.MaxFailedAccessAttempts > 0;
});

View File

@ -55,7 +55,7 @@ namespace Oqtane.Infrastructure
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Host = settings["SMTPHost"],
Port = int.Parse(settings["SMTPPort"]),
Port = SharedConverter.ParseInteger(settings["SMTPPort"]),
EnableSsl = bool.Parse(settings["SMTPSSL"])
};
if (settings["SMTPUsername"] != "" && settings["SMTPPassword"] != "")

View File

@ -50,7 +50,7 @@ namespace Oqtane.Infrastructure
retention = 30; // 30 days
if (settings.ContainsKey("LogRetention") && !string.IsNullOrEmpty(settings["LogRetention"]))
{
retention = int.Parse(settings["LogRetention"]);
retention = SharedConverter.ParseInteger(settings["LogRetention"]);
}
try
{
@ -68,7 +68,7 @@ namespace Oqtane.Infrastructure
retention = 30; // 30 days
if (settings.ContainsKey("VisitorRetention") && !string.IsNullOrEmpty(settings["VisitorRetention"]))
{
retention = int.Parse(settings["VisitorRetention"]);
retention = SharedConverter.ParseInteger(settings["VisitorRetention"]);
}
try
{
@ -85,7 +85,7 @@ namespace Oqtane.Infrastructure
retention = 30; // 30 days
if (settings.ContainsKey("NotificationRetention") && !string.IsNullOrEmpty(settings["NotificationRetention"]))
{
retention = int.Parse(settings["NotificationRetention"]);
retention = SharedConverter.ParseInteger(settings["NotificationRetention"]);
}
try
{
@ -101,7 +101,7 @@ namespace Oqtane.Infrastructure
retention = 30; // 30 days
if (settings.ContainsKey("UrlMappingRetention") && !string.IsNullOrEmpty(settings["UrlMappingRetention"]))
{
retention = int.Parse(settings["UrlMappingRetention"]);
retention = SharedConverter.ParseInteger(settings["UrlMappingRetention"]);
}
try
{

View File

@ -59,7 +59,7 @@ namespace Oqtane.Infrastructure
if (userid != null && username != null)
{
var _users = context.RequestServices.GetService(typeof(IUserManager)) as IUserManager;
var user = _users.GetUser(int.Parse(userid), alias.SiteId); // cached
var user = _users.GetUser(SharedConverter.ParseInteger(userid), alias.SiteId); // cached
if (user != null && !user.IsDeleted)
{
var claimsidentity = UserSecurity.CreateClaimsIdentity(alias, user);

View File

@ -158,7 +158,7 @@ namespace Oqtane.Providers
var minimumWordLength = MinimumWordLength;
if (siteSettings.ContainsKey(SearchMinimumWordLengthSetting) && !string.IsNullOrEmpty(siteSettings[SearchMinimumWordLengthSetting]))
{
minimumWordLength = int.Parse(siteSettings[SearchMinimumWordLengthSetting]);
minimumWordLength = SharedConverter.ParseInteger(siteSettings[SearchMinimumWordLengthSetting]);
}
// analyze the search content and save the index words

View File

@ -36,7 +36,7 @@ namespace Oqtane.Services
if (!Enum.TryParse(position, true, out AnchorPositionMode _)) position = "center";
if (!Color.TryParseHex("#" + background, out _)) background = "transparent";
if (!int.TryParse(rotate, out _)) rotate = "0";
rotate = (int.Parse(rotate) < 0 || int.Parse(rotate) > 360) ? "0" : rotate;
rotate = (SharedConverter.ParseInteger(rotate) < 0 || SharedConverter.ParseInteger(rotate) > 360) ? "0" : rotate;
if (!_formats.Contains(format)) format = "png";
using (var stream = new FileStream(filepath, FileMode.Open, FileAccess.Read))

View File

@ -106,7 +106,7 @@ namespace Oqtane.Services
if (permission.Contains(":")) // permission
{
var entityName = permission.Split(":")[0];
var entityId = int.Parse(permission.Split(":")[1]);
var entityId = SharedConverter.ParseInteger(permission.Split(":")[1]);
if (!_userPermissions.IsAuthorized(_accessor.HttpContext.User, searchQuery.SiteId, entityName, entityId, PermissionNames.View))
{
visible = false;

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Oqtane.Shared
{
public sealed class SharedConverter
{
public static int ParseInteger(string value)
{
return ParseInteger(value, CultureInfo.InvariantCulture, 0);
}
public static int ParseInteger(string value, CultureInfo cultureInfo)
{
return ParseInteger(value, cultureInfo, 0);
}
public static int ParseInteger(string value, CultureInfo cultureInfo, int defaultValue)
{
if (int.TryParse(value, cultureInfo, out int result))
{
return result;
}
return 0;
}
}
}