File size: 2,236 Bytes
c24174e
eed224b
c24174e
 
 
eed224b
cd60ce3
0fb7b7d
eed224b
 
0a48e3f
 
3980956
0a48e3f
eed224b
 
 
 
 
c01a583
 
eed224b
 
a73f02a
eed224b
 
 
a45209c
 
3575ef9
eed224b
a45209c
 
 
 
 
 
 
b6543fb
a45209c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eed224b
cd60ce3
c24174e
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import Koa from "koa";
import bodyParser from "koa-bodyparser";

const app = new Koa();

app.use(bodyParser());

app.use(async (ctx) => {
  if (ctx.request.method === "POST") {
    const { cookie } = ctx.request.body as { cookie: string };
    ctx.set("Set-Cookie", [
      `cookie-none=${cookie.replace(/[^A-Za-z0-9]+/g, '-')}; SameSite=None; Secure`,
      `cookie-lax=${cookie.replace(/[^A-Za-z0-9]+/g, '-')}; SameSite=Lax; Secure`,
    ]);
    ctx.redirect( "/");
  } else {
    ctx.body = `<html>
    <body>
      <pre>${JSON.stringify(Object.fromEntries(Object.entries(ctx.request.headers)), null, 2)}</pre>
      <p>Cookie SameSite=None: ${ctx.cookies.get("cookie-none")?.replace(/</g, '$lt;')}</p>
      <p>Cookie SameSite=Lax: ${ctx.cookies.get("cookie-lax")?.replace(/</g, '$lt;')}</p>
      <form method="POST">
        <label>Cookie value<br>
          <input type="text" name="cookie" />
        </label>
        <button>Send</button>
      </form>
      <p>Browser supports storage access API: <span id="storage-access-api"></span></p>
      <p>Page can store cookies: <span id="page-can-store-cookies"></span></p>
      <button id="request-storage-access" style="display: none;" type="button">Request storage access</button>
    </body>
    <script>
      const storageAccess = document.getElementById("storage-access-api");
      const pageCanStoreCookies = document.getElementById("page-can-store-cookies");
      const requestStorageAccess = document.getElementById("request-storage-access");
      if ("hasStorageAccess" in document) {
        storageAccess.innerText = "Yes";
        document.hasStorageAccess().then((hasAccess) => {
          console.log("has access", hasAccess);
          pageCanStoreCookies.innerText = hasAccess ? "Yes" : "No";
          if (!hasAccess) {
            requestStorageAccess.style.display = "block";
          }
        });
      } else {
        storageAccess.innerText = "No";
      }
      requestStorageAccess.addEventListener("click", () => {
        document.requestStorageAccess().then(() => {
          pageCanStoreCookies.innerText = "Yes";
          requestStorageAccess.style.display = "none";
        });
      });
    </script>
  </html>`;
  }
});

app.listen(7860);