refactor cookies

This commit is contained in:
Laura Hausmann 2020-01-04 00:42:36 +01:00
parent 9049976524
commit 1c9dfcefea
Signed by: zotan
GPG key ID: 5EC1D38FFC321311
7 changed files with 58 additions and 44 deletions

View file

@ -11,12 +11,6 @@
<e p="c3stream.cs" t="Include" />
<e p="c3stream.csproj" t="IncludeRecursive" />
<e p="c3stream.sln" t="IncludeFlat" />
<e p="data" t="Include">
<e p="33c3.json" t="Include" />
<e p="34c3.json" t="Include" />
<e p="35c3.json" t="Include" />
<e p="_c3stream.json" t="Include" />
</e>
<e p="LICENSE" t="Include" />
<e p="obj" t="ExcludeRecursive">
<e p="Debug" t="Include">

View file

@ -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("-", "-<br/>");
var category = tagFormat switch {

View file

@ -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("/");
}

View file

@ -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"]);
}
}
<div style="text-align: center">
<h1>Welcome to c3stream!</h1>
Your bookmark link:<br/>
<code onclick="copyToClipboard(this)">https://@Request.Host.Value?bookmark=@HttpContext.Session.GetString("bookmark")</code><br/><br/>
<code onclick="copyToClipboard(this)">https://@Request.Host.Value?bookmark=@Request.Cookies["bookmark"]</code><br/><br/>
<div class="btn-group">
<a type="button" class="btn btn-primary" href="/Conference?c=36c3&bookmark=@HttpContext.Session.GetString("bookmark")">36c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=35c3&bookmark=@HttpContext.Session.GetString("bookmark")">35c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=34c3&bookmark=@HttpContext.Session.GetString("bookmark")">34c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=33c3&bookmark=@HttpContext.Session.GetString("bookmark")">33c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=36c3&bookmark=@Request.Cookies["bookmark"]">36c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=35c3&bookmark=@Request.Cookies["bookmark"]">35c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=34c3&bookmark=@Request.Cookies["bookmark"]">34c3</a>
<a type="button" class="btn btn-primary" href="/Conference?c=33c3&bookmark=@Request.Cookies["bookmark"]">33c3</a>
</div>
</div>

View file

@ -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 = "&lt;missing description&gt;";
}
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("-", "-<br/>");

View file

@ -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();

View file

@ -11,6 +11,25 @@
<ItemGroup>
<_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" />
</ItemGroup>
<ItemGroup>
<Compile Remove="data\**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Remove="data\**" />
</ItemGroup>
<ItemGroup>
<None Remove="data\**" />
</ItemGroup>
<ItemGroup>
<Content Remove="data\**" />
</ItemGroup>