Skip to content

Commit

Permalink
Merge pull request #3801 from bernarden/bug/3295-return-all-urls-with…
Browse files Browse the repository at this point in the history
…-https-scheme

Replaces scheme to https for all urls returned to client side.
  • Loading branch information
tidusjar committed Oct 9, 2020
2 parents 5b22836 + 0c34fbd commit 9b4792b
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 50 deletions.
4 changes: 2 additions & 2 deletions src/Ombi.Core/Engine/TvSearchEngine.cs
Expand Up @@ -98,7 +98,7 @@ public async Task<SearchTvShowViewModel> GetShowInformation(int tvdbid)
};
newSeason.Episodes.Add(new EpisodeRequests
{
Url = e.url,
Url = e.url.ToHttpsUrl(),
Title = e.name,
AirDate = e.airstamp.HasValue() ? DateTime.Parse(e.airstamp) : DateTime.MinValue,
EpisodeNumber = e.number,
Expand All @@ -111,7 +111,7 @@ public async Task<SearchTvShowViewModel> GetShowInformation(int tvdbid)
// We already have the season, so just add the episode
season.Episodes.Add(new EpisodeRequests
{
Url = e.url,
Url = e.url.ToHttpsUrl(),
Title = e.name,
AirDate = e.airstamp.HasValue() ? DateTime.Parse(e.airstamp) : DateTime.MinValue,
EpisodeNumber = e.number,
Expand Down
46 changes: 23 additions & 23 deletions src/Ombi.Core/Engine/V2/MusicSearchEngineV2.cs
Expand Up @@ -85,10 +85,10 @@ public async Task<ArtistInformation> GetArtistInformation(string artistId)
if (lidarrArtistTask != null)
{
var artistResult = await lidarrArtistTask;
info.Banner = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("banner", StringComparison.InvariantCultureIgnoreCase))?.url.Replace("http", "https");
info.Logo = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("logo", StringComparison.InvariantCultureIgnoreCase))?.url.Replace("http", "https");
info.Poster = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("poster", StringComparison.InvariantCultureIgnoreCase))?.url.Replace("http", "https");
info.FanArt = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("fanart", StringComparison.InvariantCultureIgnoreCase))?.url.Replace("http", "https");
info.Banner = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("banner", StringComparison.InvariantCultureIgnoreCase))?.url.ToHttpsUrl();
info.Logo = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("logo", StringComparison.InvariantCultureIgnoreCase))?.url.ToHttpsUrl();
info.Poster = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("poster", StringComparison.InvariantCultureIgnoreCase))?.url.ToHttpsUrl();
info.FanArt = artistResult.images?.FirstOrDefault(x => x.coverType.Equals("fanart", StringComparison.InvariantCultureIgnoreCase))?.url.ToHttpsUrl();
info.Overview = artistResult.overview;
}

Expand All @@ -108,11 +108,11 @@ public async Task<AlbumArt> GetReleaseGroupArt(string musicBrainzId, Cancellatio
{
if ((cover.thumbnails?.small ?? string.Empty).HasValue())
{
return new AlbumArt(cover.thumbnails.small);
return new AlbumArt(cover.thumbnails.small.ToHttpsUrl());
}
if ((cover.thumbnails?.large ?? string.Empty).HasValue())
{
return new AlbumArt(cover.thumbnails.large);
return new AlbumArt(cover.thumbnails.large.ToHttpsUrl());
}
}

Expand Down Expand Up @@ -152,69 +152,69 @@ private ArtistLinks GetLinksForArtist(Artist artist)
switch (relation.TypeId)
{
case RelationLinks.AllMusic:
links.AllMusic = relation.Url?.Resource;
links.AllMusic = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.BbcMusic:
links.BbcMusic = relation.Url?.Resource;
links.BbcMusic = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.Discogs:
links.Discogs = relation.Url?.Resource;
links.Discogs = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.Homepage:
links.HomePage = relation.Url?.Resource;
links.HomePage = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.Imdb:
links.Imdb = relation.Url?.Resource;
links.Imdb = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.LastFm:
links.LastFm = relation.Url?.Resource;
links.LastFm = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.MySpace:
links.MySpace = relation.Url?.Resource;
links.MySpace = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.OnlineCommunity:
links.OnlineCommunity = relation.Url?.Resource;
links.OnlineCommunity = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.SocialNetwork:
if ((relation.Url?.Resource ?? string.Empty).Contains("twitter", CompareOptions.IgnoreCase))
{
links.Twitter = relation.Url?.Resource;
links.Twitter = relation.Url?.Resource.ToHttpsUrl();
}
if ((relation.Url?.Resource ?? string.Empty).Contains("facebook", CompareOptions.IgnoreCase))
{
links.Facebook = relation.Url?.Resource;
links.Facebook = relation.Url?.Resource.ToHttpsUrl();
}
if ((relation.Url?.Resource ?? string.Empty).Contains("instagram", CompareOptions.IgnoreCase))
{
links.Instagram = relation.Url?.Resource;
links.Instagram = relation.Url?.Resource.ToHttpsUrl();
}
if ((relation.Url?.Resource ?? string.Empty).Contains("vk", CompareOptions.IgnoreCase))
{
links.Vk = relation.Url?.Resource;
links.Vk = relation.Url?.Resource.ToHttpsUrl();
}
break;
case RelationLinks.Streams:
if ((relation.Url?.Resource ?? string.Empty).Contains("spotify", CompareOptions.IgnoreCase))
{
links.Spotify = relation.Url?.Resource;
links.Spotify = relation.Url?.Resource.ToHttpsUrl();
}
if ((relation.Url?.Resource ?? string.Empty).Contains("deezer", CompareOptions.IgnoreCase))
{
links.Deezer = relation.Url?.Resource;
links.Deezer = relation.Url?.Resource.ToHttpsUrl();
}

break;
case RelationLinks.YouTube:
links.YouTube = relation.Url?.Resource;
links.YouTube = relation.Url?.Resource.ToHttpsUrl();
break;
case RelationLinks.Download:
if ((relation.Url?.Resource ?? string.Empty).Contains("google", CompareOptions.IgnoreCase))
{
links.Google = relation.Url?.Resource;
links.Google = relation.Url?.Resource.ToHttpsUrl();
}
if ((relation.Url?.Resource ?? string.Empty).Contains("apple", CompareOptions.IgnoreCase))
{
links.Apple = relation.Url?.Resource;
links.Apple = relation.Url?.Resource.ToHttpsUrl();
}

break;
Expand Down
14 changes: 6 additions & 8 deletions src/Ombi.Core/Engine/V2/TvSearchEngineV2.cs
@@ -1,11 +1,9 @@
using System;
using AutoMapper;

using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Threading.Tasks;

using Ombi.Core.Rule.Interfaces;
using Ombi.Store.Repository.Requests;
using Ombi.Core.Authentication;
Expand Down Expand Up @@ -85,7 +83,7 @@ public async Task<SearchFullInfoTvShowViewModel> GetShowInformation(int tvdbid)
};
newSeason.Episodes.Add(new EpisodeRequests
{
Url = e.url,
Url = e.url.ToHttpsUrl(),
Title = e.name,
AirDate = e.airstamp,
EpisodeNumber = e.number,
Expand All @@ -98,7 +96,7 @@ public async Task<SearchFullInfoTvShowViewModel> GetShowInformation(int tvdbid)
// We already have the season, so just add the episode
season.Episodes.Add(new EpisodeRequests
{
Url = e.url,
Url = e.url.ToHttpsUrl(),
Title = e.name,
AirDate = e.airstamp,
EpisodeNumber = e.number,
Expand Down Expand Up @@ -141,7 +139,7 @@ private async Task<SearchFullInfoTvShowViewModel> ProcessResult(SearchFullInfoTv

if (!string.IsNullOrEmpty(item.Images?.Medium))
{
item.Images.Medium = item.Images.Medium.Replace("http:", "https:");
item.Images.Medium = item.Images.Medium.ToHttpsUrl();
}

if (item.Cast?.Any() ?? false)
Expand All @@ -150,7 +148,7 @@ private async Task<SearchFullInfoTvShowViewModel> ProcessResult(SearchFullInfoTv
{
if (!string.IsNullOrEmpty(cast.Character?.Image?.Medium))
{
cast.Character.Image.Medium = cast.Character?.Image?.Medium.Replace("http:", "https:");
cast.Character.Image.Medium = cast.Character?.Image?.Medium.ToHttpsUrl();
}
}
}
Expand All @@ -168,9 +166,9 @@ private async Task<SearchFullInfoTvShowViewModel> GetExtraInfo(Task<TraktShow> s
return model;
}

model.Trailer = result.Trailer?.AbsoluteUri ?? string.Empty;
model.Trailer = result.Trailer?.AbsoluteUri.ToHttpsUrl() ?? string.Empty;
model.Certification = result.Certification;
model.Homepage = result.Homepage?.AbsoluteUri ?? string.Empty;
model.Homepage = result.Homepage?.AbsoluteUri.ToHttpsUrl() ?? string.Empty;
}
return model;
}
Expand Down
14 changes: 7 additions & 7 deletions src/Ombi.Core/Helpers/TvShowRequestBuilder.cs
Expand Up @@ -55,7 +55,7 @@ public async Task<TvShowRequestBuilder> GetShowInfo(int id)
FirstAir = dt;

// For some reason the poster path is always http
PosterPath = ShowInfo.image?.medium.Replace("http:", "https:");
PosterPath = ShowInfo.image?.medium.ToHttpsUrl();

return this;
}
Expand Down Expand Up @@ -113,7 +113,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url
Url = ep.url.ToHttpsUrl()
}
},
SeasonNumber = ep.season,
Expand All @@ -126,7 +126,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url
Url = ep.url.ToHttpsUrl()
});
}
}
Expand All @@ -146,7 +146,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url
Url = ep.url.ToHttpsUrl()
});
}
}
Expand All @@ -170,7 +170,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url
Url = ep.url.ToHttpsUrl()
});
}
}
Expand Down Expand Up @@ -200,7 +200,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url,
Url = ep.url.ToHttpsUrl()
});
}
}
Expand All @@ -216,7 +216,7 @@ public async Task<TvShowRequestBuilder> BuildEpisodes(TvRequestViewModel tv)
EpisodeNumber = ep.number,
AirDate = FormatDate(ep.airdate),
Title = ep.name,
Url = ep.url,
Url = ep.url.ToHttpsUrl()
});
seasonRequests.Add(newRequest);
}
Expand Down
9 changes: 9 additions & 0 deletions src/Ombi.Helpers.Tests/StringHelperTests.cs
Expand Up @@ -40,5 +40,14 @@ public void ToHttpsUrl_ShouldReturnsUnchangedUrl_InvalidUrl()

Assert.AreEqual(expectedUrl, sourceUrl.ToHttpsUrl(), "Should return the unchanged invalid URL");
}

[Test]
public void ToHttpsUrl_ShouldReturnNull_NullUrl()
{
const string sourceUrl = null;
const string expectedUrl = null;

Assert.AreEqual(expectedUrl, sourceUrl.ToHttpsUrl(), "Should return null for null URL");
}
}
}
4 changes: 2 additions & 2 deletions src/Ombi.Helpers.Tests/UriHelperTests.cs
Expand Up @@ -62,7 +62,7 @@ public static IEnumerable<TestCaseData> UrlWithPortWithSSLData
var expected = (string)d.ExpectedResult;
var args = d.Arguments.ToList();
args.Add(true);
var newExpected = expected.Replace("http://", "https://");
var newExpected = expected.ToHttpsUrl();
if (args.Contains(80))
{
newExpected = expected;
Expand Down Expand Up @@ -99,7 +99,7 @@ public static IEnumerable<TestCaseData> UrlWithPortWithSSLDataCasing
}
}
args.Add(true);
var newExpected = expected.Replace("http://", "https://");
var newExpected = expected.ToHttpsUrl();
if (args.Contains(80))
{
newExpected = expected;
Expand Down
2 changes: 1 addition & 1 deletion src/Ombi.Helpers/StringHelper.cs
Expand Up @@ -131,7 +131,7 @@ public static string StripCharacters(this string str, params char[] chars)

public static string ToHttpsUrl(this string currentUrl)
{
return currentUrl.Replace("http://", "https://");
return currentUrl?.Replace("http://", "https://");
}
}
}
6 changes: 4 additions & 2 deletions src/Ombi.Mapping/Profiles/TvProfile.cs
Expand Up @@ -56,8 +56,10 @@ public TvProfile()
.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Runtime.ToString()))
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Title))
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => TraktEnumHelper.GetDescription(src.Status)))
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Trailer))
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Homepage));
.ForMember(dest => dest.Trailer,
opts => opts.MapFrom(src => src.Trailer.ToString().ToHttpsUrl()))
.ForMember(dest => dest.Homepage,
opts => opts.MapFrom(src => src.Homepage.ToString().ToHttpsUrl()));
}
}
}
10 changes: 5 additions & 5 deletions src/Ombi.Mapping/Profiles/TvProfileV2.cs
Expand Up @@ -30,7 +30,7 @@ public TvProfileV2()
.ForMember(dest => dest.Banner,
opts => opts.MapFrom(src =>
!string.IsNullOrEmpty(src.image.medium)
? src.image.medium.Replace("http", "https")
? src.image.medium.ToHttpsUrl()
: string.Empty))
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.status));

Expand All @@ -45,8 +45,8 @@ public TvProfileV2()
.ForMember(dest => dest.Timezone, opts => opts.MapFrom(src => src.timezone));

CreateMap<Api.TvMaze.Models.V2.Image, Images>()
.ForMember(dest => dest.Medium, opts => opts.MapFrom(src => src.medium))
.ForMember(dest => dest.Original, opts => opts.MapFrom(src => src.original));
.ForMember(dest => dest.Medium, opts => opts.MapFrom(src => src.medium.ToHttpsUrl()))
.ForMember(dest => dest.Original, opts => opts.MapFrom(src => src.original.ToHttpsUrl()));

CreateMap<Api.TvMaze.Models.V2.Cast, CastViewModel>()
.ForMember(dest => dest.Character, opts => opts.MapFrom(src => src.character))
Expand All @@ -58,7 +58,7 @@ public TvProfileV2()
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.id))
.ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.name))
.ForMember(dest => dest.Image, opts => opts.MapFrom(src => src.image))
.ForMember(dest => dest.Url, opts => opts.MapFrom(src => src.url));
.ForMember(dest => dest.Url, opts => opts.MapFrom(src => src.url.ToHttpsUrl()));

CreateMap<Api.TvMaze.Models.V2.Crew, CrewViewModel>()
.ForMember(dest => dest.Person, opts => opts.MapFrom(src => src.person))
Expand All @@ -73,7 +73,7 @@ public TvProfileV2()
CreateMap<Api.TvMaze.Models.V2.Character, CharacterViewModel>()
.ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.name))
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.id))
.ForMember(dest => dest.Url, opts => opts.MapFrom(src => src.url))
.ForMember(dest => dest.Url, opts => opts.MapFrom(src => src.url.ToHttpsUrl()))
.ForMember(dest => dest.Image, opts => opts.MapFrom(src => src.image));

CreateMap<SearchTvShowViewModel, SearchFullInfoTvShowViewModel>().ReverseMap();
Expand Down

0 comments on commit 9b4792b

Please sign in to comment.