File size: 2,864 Bytes
c24174e
eed224b
c24174e
 
 
eed224b
cd60ce3
0fb7b7d
eed224b
 
0a48e3f
 
3980956
0a48e3f
eed224b
 
 
 
 
c01a583
 
eed224b
 
a73f02a
eed224b
 
 
a45209c
 
01903e8
3575ef9
131324f
eed224b
a45209c
 
 
 
01903e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a45209c
01903e8
a45209c
 
 
 
131324f
 
 
 
a45209c
01903e8
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
61
62
63
64
65
66
67
68
69
70
71
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="check-storage-access" type="button">Re-check storage access</button>
      <button id="request-storage-access" style="display: none;" type="button">Request storage access</button>
      <p style="color: red" id="error-p"></p>
    </body>
    <script>
      const storageAccess = document.getElementById("storage-access-api");
      const pageCanStoreCookies = document.getElementById("page-can-store-cookies");
      const requestStorageAccess = document.getElementById("request-storage-access");
      const checkStorageAccessBtn = document.getElementById("check-storage-access");
      const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
      function checkStorageAccess() {
        if ("hasStorageAccess" in document) {
          storageAccess.innerText = "Yes";
          document.hasStorageAccess().then((hasAccess) => {
            console.log("has access", hasAccess);
            pageCanStoreCookies.innerText = hasAccess ? "Yes" : (isFirefox ? "No, on firefox" : "No");
            if (!hasAccess) {
              requestStorageAccess.style.display = "block";
            }
          });
        } else {
          storageAccess.innerText = "No";
        }
      }
      checkStorageAccess();
      requestStorageAccess.addEventListener("click", () => {
        document.requestStorageAccess().then(() => {
          pageCanStoreCookies.innerText = "Yes";
          requestStorageAccess.style.display = "none";
        }).catch((e) => {
          console.error(e);
          document.getElementById("error-p").innerText = e.message;
        })
      });
      checkStorageAccessBtn.addEventListener("click", checkStorageAccess);
    </script>
  </html>`;
  }
});

app.listen(7860);