diff --git a/ci-build.yaml b/ci-build.yaml index 066b15016..06fffb8ad 100644 --- a/ci-build.yaml +++ b/ci-build.yaml @@ -19,7 +19,7 @@ variables: testProj: '**/*.Tests.csproj' csProj: '**/*.csproj' buildConfiguration: 'Release' - publishLocation: '$(Build.SourcesDirectory)/src/Ombi/bin/Release/netcoreapp3.0' + publishLocation: '$(Build.SourcesDirectory)/src/Ombi/bin/Release/netcoreapp3.1' buildVersion: '4.0.$(Build.BuildId)' gitTag: 'v$(buildVersion)' uiLocation: '$(Build.SourcesDirectory)/src/Ombi/ClientApp/' diff --git a/src/Ombi.Notifications.Templates/EmailBasicTemplate.cs b/src/Ombi.Notifications.Templates/EmailBasicTemplate.cs index fc80de193..b8d76e10d 100644 --- a/src/Ombi.Notifications.Templates/EmailBasicTemplate.cs +++ b/src/Ombi.Notifications.Templates/EmailBasicTemplate.cs @@ -13,7 +13,7 @@ namespace Ombi.Notifications.Templates if (string.IsNullOrEmpty(_templateLocation)) { #if DEBUG - _templateLocation = Path.Combine(Directory.GetCurrentDirectory(), "bin", "Debug", "netcoreapp2.2", "Templates", + _templateLocation = Path.Combine(Directory.GetCurrentDirectory(), "bin", "Debug", "netcoreapp3.1", "Templates", "BasicTemplate.html"); #else _templateLocation = Path.Combine(Directory.GetCurrentDirectory(), "Templates","BasicTemplate.html"); diff --git a/src/Ombi.Store/Context/OmbiContext.cs b/src/Ombi.Store/Context/OmbiContext.cs index bd4b383da..a8beecc68 100644 --- a/src/Ombi.Store/Context/OmbiContext.cs +++ b/src/Ombi.Store/Context/OmbiContext.cs @@ -61,7 +61,7 @@ namespace Ombi.Store.Context using (var tran = Database.BeginTransaction()) { // Make sure we have the API User - var apiUserExists = Users.ToList().Any(x => x.UserName.Equals("Api", StringComparison.CurrentCultureIgnoreCase)); + var apiUserExists = Users.ToList().Any(x => x.NormalizedUserName == "API"); if (!apiUserExists) { Users.Add(new OmbiUser diff --git a/src/Ombi.sln b/src/Ombi.sln index f7e267c60..43abdea44 100644 --- a/src/Ombi.sln +++ b/src/Ombi.sln @@ -10,6 +10,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ..\appveyor.yml = ..\appveyor.yml ..\build.cake = ..\build.cake ..\CHANGELOG.md = ..\CHANGELOG.md + ..\ci-build.yaml = ..\ci-build.yaml EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ombi.Core", "Ombi.Core\Ombi.Core.csproj", "{F56E79C7-791D-4668-A0EC-29E3BBC8D24B}" @@ -116,7 +117,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ombi.HealthChecks", "Ombi.H EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ombi.Api.Webhook", "Ombi.Api.Webhook\Ombi.Api.Webhook.csproj", "{E2186FDA-D827-4781-8663-130AC382F12C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ombi.Api.CloudService", "Ombi.Api.CloudService\Ombi.Api.CloudService.csproj", "{5DE40A66-B369-469E-8626-ECE23D9D8034}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ombi.Api.CloudService", "Ombi.Api.CloudService\Ombi.Api.CloudService.csproj", "{5DE40A66-B369-469E-8626-ECE23D9D8034}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.html b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.html index 63dee260c..1a67b243e 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.html +++ b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.html @@ -96,7 +96,7 @@ -
+
{{data.overview}}
@@ -119,11 +119,11 @@ {{ 'Common.Requested' | translate }} - +
@@ -138,10 +138,11 @@
- - + + {{result.title}} - + -
{{result.title}}
-
{{result.title | truncate:13}}
+
{{result.title}}
+
{{result.title | truncate:20}}
- {{result.overview | truncate: 50}} + {{result.overview | truncate: 75}}
- - - \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html index d76c0719e..4593bffe6 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html +++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html @@ -16,8 +16,8 @@ -
-
+
+
diff --git a/src/Ombi/Controllers/V1/IdentityController.cs b/src/Ombi/Controllers/V1/IdentityController.cs index 6e9ee2e72..550d90332 100644 --- a/src/Ombi/Controllers/V1/IdentityController.cs +++ b/src/Ombi/Controllers/V1/IdentityController.cs @@ -135,7 +135,7 @@ namespace Ombi.Controllers.V1 public async Task CreateWizardUser([FromBody] CreateUserWizardModel user) { var users = UserManager.Users; - if (users.Any(x => !x.UserName.Equals("api", StringComparison.InvariantCultureIgnoreCase))) + if (users.Any(x => x.NormalizedUserName != "API")) { // No one should be calling this. Only the wizard return new SaveWizardResult { Result = false, Errors = new List { "Looks like there is an existing user!" } }; @@ -280,7 +280,8 @@ namespace Ombi.Controllers.V1 [Authorize] public async Task GetCurrentUser() { - var user = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + var username = User.Identity.Name.ToUpper(); + var user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); return await GetUserWithRoles(user); } @@ -875,7 +876,9 @@ namespace Ombi.Controllers.V1 [ApiExplorerSettings(IgnoreApi = true)] public async Task GetUserAccessToken() { - var user = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + + var username = User.Identity.Name.ToUpper(); + var user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); if (user == null) { return Guid.Empty.ToString("N"); @@ -897,7 +900,8 @@ namespace Ombi.Controllers.V1 [HttpGet("notificationpreferences")] public async Task> GetUserPreferences() { - var user = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + var username = User.Identity.Name.ToUpper(); + var user = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); return await GetPreferences(user); } @@ -950,7 +954,9 @@ namespace Ombi.Controllers.V1 return NotFound(); } // Check if we are editing a different user than ourself, if we are then we need to power user role - var me = await UserManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + + var username = User.Identity.Name.ToUpper(); + var me = await UserManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); if (!me.Id.Equals(user.Id, StringComparison.InvariantCultureIgnoreCase)) { var isPowerUser = await UserManager.IsInRoleAsync(me, OmbiRoles.PowerUser); diff --git a/src/Ombi/Controllers/V1/IssuesController.cs b/src/Ombi/Controllers/V1/IssuesController.cs index 49b4fe8d1..e65f19fe3 100644 --- a/src/Ombi/Controllers/V1/IssuesController.cs +++ b/src/Ombi/Controllers/V1/IssuesController.cs @@ -130,7 +130,9 @@ namespace Ombi.Controllers.V1 public async Task CreateIssue([FromBody]Issues i) { i.IssueCategory = null; - i.UserReportedId = (await _userManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase))).Id; + + var username = User.Identity.Name.ToUpper(); + i.UserReportedId = (await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username)).Id; await _issues.Add(i); var category = await _categories.GetAll().FirstOrDefaultAsync(x => i.IssueCategoryId == x.Id); if (category != null) diff --git a/src/Ombi/Controllers/V1/MobileController.cs b/src/Ombi/Controllers/V1/MobileController.cs index a2b1f05e3..2bae31c9d 100644 --- a/src/Ombi/Controllers/V1/MobileController.cs +++ b/src/Ombi/Controllers/V1/MobileController.cs @@ -40,7 +40,8 @@ namespace Ombi.Controllers.V1 { if (body?.PlayerId.HasValue() ?? false) { - var user = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + var username = User.Identity.Name.ToUpper(); + var user = await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); // Check if we already have this notification id var alreadyExists = await _notification.GetAll().AnyAsync(x => x.PlayerId == body.PlayerId && x.UserId == user.Id); diff --git a/src/Ombi/Controllers/V2/MobileController.cs b/src/Ombi/Controllers/V2/MobileController.cs index f6185e18e..9ee33e857 100644 --- a/src/Ombi/Controllers/V2/MobileController.cs +++ b/src/Ombi/Controllers/V2/MobileController.cs @@ -36,7 +36,9 @@ namespace Ombi.Controllers.V2 { if (!string.IsNullOrEmpty(body?.Token)) { - var user = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + + var username = User.Identity.Name.ToUpper(); + var user = await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); // Check if we already have this notification id var alreadyExists = await _mobileDevices.GetAll().AnyAsync(x => x.Token == body.Token && x.UserId == user.Id); @@ -64,7 +66,8 @@ namespace Ombi.Controllers.V2 public async Task RemoveNotifications() { - var user = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName.Equals(User.Identity.Name, StringComparison.InvariantCultureIgnoreCase)); + var username = User.Identity.Name.ToUpper(); + var user = await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); // Check if we already have this notification id var currentDevices = await _mobileDevices.GetAll().Where(x => x.UserId == user.Id).ToListAsync(); diff --git a/src/Ombi/Middleware/ApiKeyMiddlewear.cs b/src/Ombi/Middleware/ApiKeyMiddlewear.cs index e8fa02d78..0efe5b860 100644 --- a/src/Ombi/Middleware/ApiKeyMiddlewear.cs +++ b/src/Ombi/Middleware/ApiKeyMiddlewear.cs @@ -102,10 +102,16 @@ namespace Ombi if (username.IsNullOrEmpty()) { UseApiUser(context); + } + else + { + username = username.ToUpper(); } + var um = context.RequestServices.GetService(); + var user = await um.Users.FirstOrDefaultAsync(x => - x.UserName.Equals(username, StringComparison.InvariantCultureIgnoreCase)); + x.NormalizedUserName == username); if (user == null) { context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; diff --git a/src/Ombi/Ombi.csproj b/src/Ombi/Ombi.csproj index ea748694f..f64a9834f 100644 --- a/src/Ombi/Ombi.csproj +++ b/src/Ombi/Ombi.csproj @@ -4,6 +4,8 @@ win10-x64;win10-x86;osx-x64;linux-x64;linux-arm;linux-arm64; false Latest + $(SemVer) $(SemVer) $(FullVer)