diff --git a/.idea/.idea.c3stream/.idea/contentModel.xml b/.idea/.idea.c3stream/.idea/contentModel.xml index 6cd4556..80798a6 100644 --- a/.idea/.idea.c3stream/.idea/contentModel.xml +++ b/.idea/.idea.c3stream/.idea/contentModel.xml @@ -11,12 +11,6 @@ - - - - - - diff --git a/Pages/Conference.cshtml b/Pages/Conference.cshtml index 0ca296f..681963f 100644 --- a/Pages/Conference.cshtml +++ b/Pages/Conference.cshtml @@ -21,14 +21,17 @@ return; } - if (Request.Query.ContainsKey("bookmark") && HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - HttpContext.Session.SetString("bookmark", Request.Query["bookmark"]); + if (Request.Query.ContainsKey("bookmark") && Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Cookies.Append("bookmark", Request.Query["bookmark"], new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/Conference?c=" + Request.Query["c"] + "&bookmark=" + Request.Query["bookmark"]); } - if (!HttpContext.Session.Keys.Contains("bookmark") || !Guid.TryParseExact(HttpContext.Session.GetString("bookmark"), "D", out _)) { - HttpContext.Session.SetString("bookmark", Guid.NewGuid().ToString()); + else if (!Request.Cookies.ContainsKey("bookmark") || !Guid.TryParseExact(Request.Cookies["bookmark"], "D", out _)) { + var guid = Guid.NewGuid().ToString(); + Response.Cookies.Append("bookmark", guid, new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/Conference?c=" + Request.Query["c"] + "&bookmark=" + guid); } - if (!Request.Query.ContainsKey("bookmark") || HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - Response.Redirect("/Conference?c=" + Request.Query["c"] + "&bookmark=" + HttpContext.Session.GetString("bookmark") + (Request.Query["orderby"] == "published" ? "&orderby=published" : "")); + else if (!Request.Query.ContainsKey("bookmark") || Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Redirect("/Conference?c=" + Request.Query["c"] + "&bookmark=" + Request.Cookies["bookmark"]); } ViewData["Title"] = Request.Query["c"]; @@ -62,8 +65,8 @@ metadata = GetEvent(talk.Guid?.ToString()); EventMetadata.Add(metadata); } - var isWatched = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "watched"); - var isMarked = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "marked"); + var isWatched = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == Request.Cookies["bookmark"])?.State == "watched"); + var isMarked = EventMetadata.Any(p => p.Guid == talk.Guid?.ToString() && p.State.FirstOrDefault(q => q.Guid == Request.Cookies["bookmark"])?.State == "marked"); var file = metadata.Talk.Recordings.FirstOrDefault(p => System.IO.File.Exists(System.IO.Path.Combine(c3stream.CachePath, conference.Acronym, p.Filename))); var eventName = talk.Tags[0].Replace("-", "-
"); var category = tagFormat switch { diff --git a/Pages/Conference.cshtml.cs b/Pages/Conference.cshtml.cs index ecee642..eb20432 100644 --- a/Pages/Conference.cshtml.cs +++ b/Pages/Conference.cshtml.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using System.Net; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; using Newtonsoft.Json; @@ -16,17 +15,16 @@ namespace c3stream.Pages { public void OnGet() { var guid = Request.Query["guid"]; var state = Request.Query["state"]; - if (string.IsNullOrWhiteSpace(guid) || string.IsNullOrWhiteSpace(state) || !HttpContext.Session.Keys.Contains("bookmark")) + if (string.IsNullOrWhiteSpace(guid) || string.IsNullOrWhiteSpace(state) || !Request.Cookies.ContainsKey("bookmark")) return; lock (c3stream.Lock) { ReadEventMetadata(); - var existing = EventMetadata.FirstOrDefault(p => p.Guid == guid) - ?.State.FirstOrDefault(p => p.Guid == HttpContext.Session.GetString("bookmark")); + var existing = EventMetadata.FirstOrDefault(p => p.Guid == guid)?.State.FirstOrDefault(p => p.Guid == Request.Cookies["bookmark"]); if (existing != null) existing.State = state; else - EventMetadata.FirstOrDefault(p => p.Guid == guid)?.State.Add(new UserState(HttpContext.Session.GetString("bookmark"), state)); + EventMetadata.FirstOrDefault(p => p.Guid == guid)?.State.Add(new UserState(Request.Cookies["bookmark"], state)); WriteEventMetadata(); Response.Redirect("/"); } diff --git a/Pages/Index.cshtml b/Pages/Index.cshtml index 27ba47f..df1a29e 100644 --- a/Pages/Index.cshtml +++ b/Pages/Index.cshtml @@ -3,25 +3,28 @@ @model IndexModel @{ ViewData["Title"] = "Home"; - if (Request.Query.ContainsKey("bookmark") && HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - HttpContext.Session.SetString("bookmark", Request.Query["bookmark"]); + if (Request.Query.ContainsKey("bookmark") && Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Cookies.Append("bookmark", Request.Query["bookmark"], new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/?bookmark=" + Request.Query["bookmark"]); } - if (!HttpContext.Session.Keys.Contains("bookmark") || !Guid.TryParseExact(HttpContext.Session.GetString("bookmark"), "D", out _)) { - HttpContext.Session.SetString("bookmark", Guid.NewGuid().ToString()); + else if (!Request.Cookies.ContainsKey("bookmark") || !Guid.TryParseExact(Request.Cookies["bookmark"], "D", out _)) { + var guid = Guid.NewGuid().ToString(); + Response.Cookies.Append("bookmark", guid, new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/?bookmark=" + guid); } - if (!Request.Query.ContainsKey("bookmark") || HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - Response.Redirect("/?bookmark=" + HttpContext.Session.GetString("bookmark")); + else if (!Request.Query.ContainsKey("bookmark") || Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Redirect("/?bookmark=" + Request.Cookies["bookmark"]); } }

Welcome to c3stream!

Your bookmark link:
- https://@Request.Host.Value?bookmark=@HttpContext.Session.GetString("bookmark")

+ https://@Request.Host.Value?bookmark=@Request.Cookies["bookmark"]

- 36c3 - 35c3 - 34c3 - 33c3 + 36c3 + 35c3 + 34c3 + 33c3
\ No newline at end of file diff --git a/Pages/Info.cshtml b/Pages/Info.cshtml index d1f90c5..d296fe7 100644 --- a/Pages/Info.cshtml +++ b/Pages/Info.cshtml @@ -10,14 +10,17 @@ return; } - if (Request.Query.ContainsKey("bookmark") && HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - HttpContext.Session.SetString("bookmark", Request.Query["bookmark"]); + if (Request.Query.ContainsKey("bookmark") && Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Cookies.Append("bookmark", Request.Query["bookmark"], new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/Info?guid=" + Request.Query["guid"] + "&bookmark=" + Request.Query["bookmark"]); } - if (!HttpContext.Session.Keys.Contains("bookmark") || !Guid.TryParseExact(HttpContext.Session.GetString("bookmark"), "D", out _)) { - HttpContext.Session.SetString("bookmark", Guid.NewGuid().ToString()); + else if (!Request.Cookies.ContainsKey("bookmark") || !Guid.TryParseExact(Request.Cookies["bookmark"], "D", out _)) { + var guid = Guid.NewGuid().ToString(); + Response.Cookies.Append("bookmark", guid, new CookieOptions {Expires = DateTimeOffset.MaxValue}); + Response.Redirect("/Info?guid=" + Request.Query["guid"] + "&bookmark=" + guid); } - if (!Request.Query.ContainsKey("bookmark") || HttpContext.Session.GetString("bookmark") != Request.Query["bookmark"]) { - Response.Redirect("/Info?guid=" + Request.Query["guid"] + "&bookmark=" + HttpContext.Session.GetString("bookmark")); + else if (!Request.Query.ContainsKey("bookmark") || Request.Cookies["bookmark"] != Request.Query["bookmark"]) { + Response.Redirect("/Info?guid=" + Request.Query["guid"] + "&bookmark=" + Request.Cookies["bookmark"]); } ConferenceModel.ReadEventMetadata(); @@ -34,8 +37,8 @@ description = "<missing description>"; } - var isWatched = talk.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "watched"; - var isMarked = talk.State.FirstOrDefault(q => q.Guid == HttpContext.Session.GetString("bookmark"))?.State == "marked"; + var isWatched = talk.State.FirstOrDefault(q => q.Guid == Request.Cookies["bookmark"])?.State == "watched"; + var isMarked = talk.State.FirstOrDefault(q => q.Guid == Request.Cookies["bookmark"])?.State == "marked"; var file = talk.Talk.Recordings.FirstOrDefault(p => System.IO.File.Exists(System.IO.Path.Combine(c3stream.CachePath, talk.Talk.ConferenceUrl.AbsoluteUri.Split("/").Last(), p.Filename))); var eventName = talk.Talk.Tags[0].Replace("-", "-
"); diff --git a/Startup.cs b/Startup.cs index a907fdb..2e92ba1 100644 --- a/Startup.cs +++ b/Startup.cs @@ -1,4 +1,3 @@ -using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -14,10 +13,6 @@ namespace c3stream { // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); - services.AddSession(opts => { - opts.Cookie.Name = "bookmark"; - opts.IdleTimeout = TimeSpan.MaxValue; - }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -29,7 +24,6 @@ namespace c3stream { // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseStaticFiles(); - app.UseSession(); app.UseRouting(); diff --git a/c3stream.csproj b/c3stream.csproj index 92812a4..29d31c4 100644 --- a/c3stream.csproj +++ b/c3stream.csproj @@ -11,6 +11,25 @@ <_ContentIncludedByDefault Remove="data\database.json" /> <_ContentIncludedByDefault Remove="data\_c3stream.json" /> + <_ContentIncludedByDefault Remove="data\33c3.json" /> + <_ContentIncludedByDefault Remove="data\34c3.json" /> + <_ContentIncludedByDefault Remove="data\35c3.json" /> + + + + + + + + + + + + + + + +