mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Fixing movies playback & security headers
This commit is contained in:
parent
467e420587
commit
d5eb5f905a
@ -8,7 +8,7 @@ namespace Kyoo.Models
|
|||||||
public class Episode : IResource, IOnMerge
|
public class Episode : IResource, IOnMerge
|
||||||
{
|
{
|
||||||
public int ID { get; set; }
|
public int ID { get; set; }
|
||||||
public string Slug => GetSlug(ShowSlug, SeasonNumber, EpisodeNumber);
|
public string Slug => GetSlug(ShowSlug, SeasonNumber, EpisodeNumber, AbsoluteNumber);
|
||||||
[SerializeIgnore] public string ShowSlug { private get; set; }
|
[SerializeIgnore] public string ShowSlug { private get; set; }
|
||||||
[SerializeIgnore] public int ShowID { get; set; }
|
[SerializeIgnore] public int ShowID { get; set; }
|
||||||
[LoadableRelation(nameof(ShowID))] public virtual Show Show { get; set; }
|
[LoadableRelation(nameof(ShowID))] public virtual Show Show { get; set; }
|
||||||
@ -74,13 +74,16 @@ namespace Kyoo.Models
|
|||||||
Path = path;
|
Path = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetSlug(string showSlug, int seasonNumber, int episodeNumber)
|
public static string GetSlug(string showSlug, int seasonNumber, int episodeNumber, int absoluteNumber)
|
||||||
{
|
{
|
||||||
if (showSlug == null)
|
if (showSlug == null)
|
||||||
throw new ArgumentException("Show's slug is null. Can't find episode's slug.");
|
throw new ArgumentException("Show's slug is null. Can't find episode's slug.");
|
||||||
if (seasonNumber == -1)
|
return seasonNumber switch
|
||||||
return showSlug;
|
{
|
||||||
return $"{showSlug}-s{seasonNumber}e{episodeNumber}";
|
-1 when absoluteNumber == -1 => showSlug,
|
||||||
|
-1 => $"{showSlug}-{absoluteNumber}",
|
||||||
|
_ => $"{showSlug}-s{seasonNumber}e{episodeNumber}"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnMerge(object merged)
|
public void OnMerge(object merged)
|
||||||
|
@ -31,6 +31,7 @@ namespace Kyoo.Models
|
|||||||
public string ShowSlug { get; set; }
|
public string ShowSlug { get; set; }
|
||||||
public int SeasonNumber { get; set; }
|
public int SeasonNumber { get; set; }
|
||||||
public int EpisodeNumber { get; set; }
|
public int EpisodeNumber { get; set; }
|
||||||
|
public int AbsoluteNumber { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Slug { get; set; }
|
public string Slug { get; set; }
|
||||||
public DateTime? ReleaseDate { get; set; }
|
public DateTime? ReleaseDate { get; set; }
|
||||||
@ -55,6 +56,7 @@ namespace Kyoo.Models
|
|||||||
Show show,
|
Show show,
|
||||||
int seasonNumber,
|
int seasonNumber,
|
||||||
int episodeNumber,
|
int episodeNumber,
|
||||||
|
int absoluteNumber,
|
||||||
string title,
|
string title,
|
||||||
DateTime? releaseDate,
|
DateTime? releaseDate,
|
||||||
string path)
|
string path)
|
||||||
@ -64,6 +66,7 @@ namespace Kyoo.Models
|
|||||||
ShowSlug = show.Slug;
|
ShowSlug = show.Slug;
|
||||||
SeasonNumber = seasonNumber;
|
SeasonNumber = seasonNumber;
|
||||||
EpisodeNumber = episodeNumber;
|
EpisodeNumber = episodeNumber;
|
||||||
|
AbsoluteNumber = absoluteNumber;
|
||||||
Title = title;
|
Title = title;
|
||||||
ReleaseDate = releaseDate;
|
ReleaseDate = releaseDate;
|
||||||
Path = path;
|
Path = path;
|
||||||
@ -74,20 +77,21 @@ namespace Kyoo.Models
|
|||||||
Backdrop = show.Backdrop;
|
Backdrop = show.Backdrop;
|
||||||
|
|
||||||
Container = Path.Substring(Path.LastIndexOf('.') + 1);
|
Container = Path.Substring(Path.LastIndexOf('.') + 1);
|
||||||
Slug = Episode.GetSlug(ShowSlug, seasonNumber, episodeNumber);
|
Slug = Episode.GetSlug(ShowSlug, seasonNumber, episodeNumber, absoluteNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
private WatchItem(int episodeID,
|
private WatchItem(int episodeID,
|
||||||
Show show,
|
Show show,
|
||||||
int seasonNumber,
|
int seasonNumber,
|
||||||
int episodeNumber,
|
int episodeNumber,
|
||||||
|
int absoluteNumber,
|
||||||
string title,
|
string title,
|
||||||
DateTime? releaseDate,
|
DateTime? releaseDate,
|
||||||
string path,
|
string path,
|
||||||
Track video,
|
Track video,
|
||||||
ICollection<Track> audios,
|
ICollection<Track> audios,
|
||||||
ICollection<Track> subtitles)
|
ICollection<Track> subtitles)
|
||||||
: this(episodeID, show, seasonNumber, episodeNumber, title, releaseDate, path)
|
: this(episodeID, show, seasonNumber, episodeNumber, absoluteNumber, title, releaseDate, path)
|
||||||
{
|
{
|
||||||
Video = video;
|
Video = video;
|
||||||
Audios = audios;
|
Audios = audios;
|
||||||
@ -123,6 +127,7 @@ namespace Kyoo.Models
|
|||||||
ep.Show,
|
ep.Show,
|
||||||
ep.SeasonNumber,
|
ep.SeasonNumber,
|
||||||
ep.EpisodeNumber,
|
ep.EpisodeNumber,
|
||||||
|
ep.AbsoluteNumber,
|
||||||
ep.Title,
|
ep.Title,
|
||||||
ep.ReleaseDate,
|
ep.ReleaseDate,
|
||||||
ep.Path,
|
ep.Path,
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 5023f0653dfc62356aae6e0aaa7f71f2473ef417
|
Subproject commit c72c78989b17f6b92edd7210470ef9cdf24f159f
|
@ -61,15 +61,20 @@ namespace Kyoo.Controllers
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<Episode> Get(string slug)
|
public override async Task<Episode> Get(string slug)
|
||||||
{
|
{
|
||||||
Match match = Regex.Match(slug, @"(?<show>.*)-s(?<season>\d*)e(?<episode>\d*)");
|
Match match = Regex.Match(slug, @"(?<show>.*)-s(?<season>\d*)e(?<episode>\d*)");
|
||||||
|
|
||||||
if (!match.Success)
|
if (match.Success)
|
||||||
return _database.Episodes.FirstOrDefaultAsync(x => x.Show.Slug == slug);
|
{
|
||||||
return Get(match.Groups["show"].Value,
|
return await Get(match.Groups["show"].Value,
|
||||||
int.Parse(match.Groups["season"].Value),
|
int.Parse(match.Groups["season"].Value),
|
||||||
int.Parse(match.Groups["episode"].Value));
|
int.Parse(match.Groups["episode"].Value));
|
||||||
|
}
|
||||||
|
|
||||||
|
Episode episode = await _database.Episodes.FirstOrDefaultAsync(x => x.Show.Slug == slug);
|
||||||
|
episode.ShowSlug = slug;
|
||||||
|
return episode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<Episode> Get(Expression<Func<Episode, bool>> predicate)
|
public override async Task<Episode> Get(Expression<Func<Episode, bool>> predicate)
|
||||||
|
@ -197,7 +197,7 @@ namespace Kyoo
|
|||||||
ctx.Response.Headers.Remove("X-Powered-By");
|
ctx.Response.Headers.Remove("X-Powered-By");
|
||||||
ctx.Response.Headers.Remove("Server");
|
ctx.Response.Headers.Remove("Server");
|
||||||
ctx.Response.Headers.Add("Feature-Policy", "autoplay 'self'; fullscreen");
|
ctx.Response.Headers.Add("Feature-Policy", "autoplay 'self'; fullscreen");
|
||||||
ctx.Response.Headers.Add("Content-Security-Policy", "default-src 'self'; script-src 'self' blob: 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'");
|
ctx.Response.Headers.Add("Content-Security-Policy", "default-src 'self'; script-src 'self' blob: 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src 'self' https://www.youtube.com");
|
||||||
ctx.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
|
ctx.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
|
||||||
ctx.Response.Headers.Add("Referrer-Policy", "no-referrer");
|
ctx.Response.Headers.Add("Referrer-Policy", "no-referrer");
|
||||||
ctx.Response.Headers.Add("Access-Control-Allow-Origin", "null");
|
ctx.Response.Headers.Add("Access-Control-Allow-Origin", "null");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user