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 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 int ShowID { get; set; }
|
||||
[LoadableRelation(nameof(ShowID))] public virtual Show Show { get; set; }
|
||||
@ -74,13 +74,16 @@ namespace Kyoo.Models
|
||||
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)
|
||||
throw new ArgumentException("Show's slug is null. Can't find episode's slug.");
|
||||
if (seasonNumber == -1)
|
||||
return showSlug;
|
||||
return $"{showSlug}-s{seasonNumber}e{episodeNumber}";
|
||||
return seasonNumber switch
|
||||
{
|
||||
-1 when absoluteNumber == -1 => showSlug,
|
||||
-1 => $"{showSlug}-{absoluteNumber}",
|
||||
_ => $"{showSlug}-s{seasonNumber}e{episodeNumber}"
|
||||
};
|
||||
}
|
||||
|
||||
public void OnMerge(object merged)
|
||||
|
@ -31,6 +31,7 @@ namespace Kyoo.Models
|
||||
public string ShowSlug { get; set; }
|
||||
public int SeasonNumber { get; set; }
|
||||
public int EpisodeNumber { get; set; }
|
||||
public int AbsoluteNumber { get; set; }
|
||||
public string Title { get; set; }
|
||||
public string Slug { get; set; }
|
||||
public DateTime? ReleaseDate { get; set; }
|
||||
@ -55,6 +56,7 @@ namespace Kyoo.Models
|
||||
Show show,
|
||||
int seasonNumber,
|
||||
int episodeNumber,
|
||||
int absoluteNumber,
|
||||
string title,
|
||||
DateTime? releaseDate,
|
||||
string path)
|
||||
@ -64,6 +66,7 @@ namespace Kyoo.Models
|
||||
ShowSlug = show.Slug;
|
||||
SeasonNumber = seasonNumber;
|
||||
EpisodeNumber = episodeNumber;
|
||||
AbsoluteNumber = absoluteNumber;
|
||||
Title = title;
|
||||
ReleaseDate = releaseDate;
|
||||
Path = path;
|
||||
@ -74,20 +77,21 @@ namespace Kyoo.Models
|
||||
Backdrop = show.Backdrop;
|
||||
|
||||
Container = Path.Substring(Path.LastIndexOf('.') + 1);
|
||||
Slug = Episode.GetSlug(ShowSlug, seasonNumber, episodeNumber);
|
||||
Slug = Episode.GetSlug(ShowSlug, seasonNumber, episodeNumber, absoluteNumber);
|
||||
}
|
||||
|
||||
private WatchItem(int episodeID,
|
||||
Show show,
|
||||
int seasonNumber,
|
||||
int episodeNumber,
|
||||
int absoluteNumber,
|
||||
string title,
|
||||
DateTime? releaseDate,
|
||||
string path,
|
||||
Track video,
|
||||
ICollection<Track> audios,
|
||||
ICollection<Track> subtitles)
|
||||
: this(episodeID, show, seasonNumber, episodeNumber, title, releaseDate, path)
|
||||
: this(episodeID, show, seasonNumber, episodeNumber, absoluteNumber, title, releaseDate, path)
|
||||
{
|
||||
Video = video;
|
||||
Audios = audios;
|
||||
@ -123,6 +127,7 @@ namespace Kyoo.Models
|
||||
ep.Show,
|
||||
ep.SeasonNumber,
|
||||
ep.EpisodeNumber,
|
||||
ep.AbsoluteNumber,
|
||||
ep.Title,
|
||||
ep.ReleaseDate,
|
||||
ep.Path,
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 5023f0653dfc62356aae6e0aaa7f71f2473ef417
|
||||
Subproject commit c72c78989b17f6b92edd7210470ef9cdf24f159f
|
@ -61,17 +61,22 @@ namespace Kyoo.Controllers
|
||||
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*)");
|
||||
|
||||
if (!match.Success)
|
||||
return _database.Episodes.FirstOrDefaultAsync(x => x.Show.Slug == slug);
|
||||
return Get(match.Groups["show"].Value,
|
||||
if (match.Success)
|
||||
{
|
||||
return await Get(match.Groups["show"].Value,
|
||||
int.Parse(match.Groups["season"].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)
|
||||
{
|
||||
Episode ret = await base.Get(predicate);
|
||||
|
@ -197,7 +197,7 @@ namespace Kyoo
|
||||
ctx.Response.Headers.Remove("X-Powered-By");
|
||||
ctx.Response.Headers.Remove("Server");
|
||||
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("Referrer-Policy", "no-referrer");
|
||||
ctx.Response.Headers.Add("Access-Control-Allow-Origin", "null");
|
||||
|
Loading…
x
Reference in New Issue
Block a user