switched to koa-session
Massimo Melina committed
Dec 27, 2021 at 17:53 UTC
bc49438aae95b1ca2bf9d8c95abceb27e9a7a2fd
7 files changed
+233
-69
package-lock.json
+215
@@ -16,6 +16,7 @@
16
"koa-bodyparser": "^4.3.0",
17
"koa-compress": "^5.1.0",
18
"koa-mount": "^4.0.0",
19
+ "koa-session": "^6.2.0",
20
"lodash": "^4.17.21",
21
"minimist": "^1.2.5",
22
"yaml": "^1.10.2"
@@ -27,6 +28,7 @@
28
"@types/koa-bodyparser": "^4.3.4",
29
"@types/koa-compress": "^4.0.3",
30
"@types/koa-mount": "^4.0.1",
31
+ "@types/koa-session": "^5.10.4",
32
"@types/koa-static": "^4.0.2",
33
"@types/lodash": "^4.14.178",
34
"@types/micromatch": "^4.0.2",
@@ -328,6 +330,16 @@
330
"@types/koa": "*"
331
}
332
},
333
+ "node_modules/@types/koa-session": {
334
+ "version": "5.10.4",
335
+ "resolved": "https://registry.npmjs.org/@types/koa-session/-/koa-session-5.10.4.tgz",
336
+ "integrity": "sha512-Xz9RPq+2raVvw6UN1JzDVL9/s2qr9E5AZOiiQti328HNhEj6IqT5rcssFQPNxCzh9bNG6uqqGMsACr5bdjylXA==",
337
+ "dev": true,
338
+ "dependencies": {
339
+ "@types/cookies": "*",
340
+ "@types/koa": "*"
341
+ }
342
+ },
343
"node_modules/@types/koa-static": {
344
"version": "4.0.2",
345
"resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz",
@@ -531,6 +543,25 @@
543
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
544
"dev": true
545
},
546
+ "node_modules/base64-js": {
547
+ "version": "1.5.1",
548
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
549
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
550
+ "funding": [
551
+ {
552
+ "type": "github",
553
+ "url": "https://github.com/sponsors/feross"
554
+ },
555
+ {
556
+ "type": "patreon",
557
+ "url": "https://www.patreon.com/feross"
558
+ },
559
+ {
560
+ "type": "consulting",
561
+ "url": "https://feross.org/support"
562
+ }
563
+ ]
564
+ },
565
"node_modules/binary-extensions": {
566
"version": "2.2.0",
567
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -589,6 +620,29 @@
620
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
621
"dev": true
622
},
623
+ "node_modules/buffer": {
624
+ "version": "5.7.1",
625
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
626
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
627
+ "funding": [
628
+ {
629
+ "type": "github",
630
+ "url": "https://github.com/sponsors/feross"
631
+ },
632
+ {
633
+ "type": "patreon",
634
+ "url": "https://www.patreon.com/feross"
635
+ },
636
+ {
637
+ "type": "consulting",
638
+ "url": "https://feross.org/support"
639
+ }
640
+ ],
641
+ "dependencies": {
642
+ "base64-js": "^1.3.1",
643
+ "ieee754": "^1.1.13"
644
+ }
645
+ },
646
"node_modules/bytes": {
647
"version": "3.1.1",
648
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -887,6 +941,19 @@
941
"resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
942
"integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
943
},
944
+ "node_modules/core-util-is": {
945
+ "version": "1.0.3",
946
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
947
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
948
+ },
949
+ "node_modules/crc": {
950
+ "version": "3.8.0",
951
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
952
+ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
953
+ "dependencies": {
954
+ "buffer": "^5.1.0"
955
+ }
956
+ },
957
"node_modules/create-require": {
958
"version": "1.1.1",
959
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -1387,6 +1454,25 @@
1454
"node": ">=0.10.0"
1455
}
1456
},
1457
+ "node_modules/ieee754": {
1458
+ "version": "1.2.1",
1459
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1460
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1461
+ "funding": [
1462
+ {
1463
+ "type": "github",
1464
+ "url": "https://github.com/sponsors/feross"
1465
+ },
1466
+ {
1467
+ "type": "patreon",
1468
+ "url": "https://www.patreon.com/feross"
1469
+ },
1470
+ {
1471
+ "type": "consulting",
1472
+ "url": "https://feross.org/support"
1473
+ }
1474
+ ]
1475
+ },
1476
"node_modules/ignore-by-default": {
1477
"version": "1.0.1",
1478
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -1467,6 +1553,11 @@
1553
"is-ci": "bin.js"
1554
}
1555
},
1556
+ "node_modules/is-class-hotfix": {
1557
+ "version": "0.0.6",
1558
+ "resolved": "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz",
1559
+ "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="
1560
+ },
1561
"node_modules/is-extglob": {
1562
"version": "2.1.1",
1563
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1572,6 +1663,16 @@
1663
"node": ">=8"
1664
}
1665
},
1666
+ "node_modules/is-type-of": {
1667
+ "version": "1.2.1",
1668
+ "resolved": "https://registry.npmjs.org/is-type-of/-/is-type-of-1.2.1.tgz",
1669
+ "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==",
1670
+ "dependencies": {
1671
+ "core-util-is": "^1.0.2",
1672
+ "is-class-hotfix": "~0.0.6",
1673
+ "isstream": "~0.1.2"
1674
+ }
1675
+ },
1676
"node_modules/is-typedarray": {
1677
"version": "1.0.0",
1678
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -1748,6 +1849,28 @@
1849
"node": ">= 7.6.0"
1850
}
1851
},
1852
+ "node_modules/koa-session": {
1853
+ "version": "6.2.0",
1854
+ "resolved": "https://registry.npmjs.org/koa-session/-/koa-session-6.2.0.tgz",
1855
+ "integrity": "sha512-l2ZC6D1BnRkIXhWkRgpewdqKn38/9/2WScmxyShuN408TxX+J/gUzdzGBIvGZaRwmezOU819sNpGmfFGLeDckg==",
1856
+ "dependencies": {
1857
+ "crc": "^3.4.4",
1858
+ "debug": "^3.1.0",
1859
+ "is-type-of": "^1.0.0",
1860
+ "uuid": "^3.3.2"
1861
+ },
1862
+ "engines": {
1863
+ "node": ">=7.6"
1864
+ }
1865
+ },
1866
+ "node_modules/koa-session/node_modules/debug": {
1867
+ "version": "3.2.7",
1868
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
1869
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
1870
+ "dependencies": {
1871
+ "ms": "^2.1.1"
1872
+ }
1873
+ },
1874
"node_modules/latest-version": {
1875
"version": "5.1.0",
1876
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@@ -2905,6 +3028,15 @@
3028
"node": ">=4"
3029
}
3030
},
3031
+ "node_modules/uuid": {
3032
+ "version": "3.4.0",
3033
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
3034
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
3035
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
3036
+ "bin": {
3037
+ "uuid": "bin/uuid"
3038
+ }
3039
+ },
3040
"node_modules/vary": {
3041
"version": "1.1.2",
3042
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -3364,6 +3496,16 @@
3496
"@types/koa": "*"
3497
}
3498
},
3499
+ "@types/koa-session": {
3500
+ "version": "5.10.4",
3501
+ "resolved": "https://registry.npmjs.org/@types/koa-session/-/koa-session-5.10.4.tgz",
3502
+ "integrity": "sha512-Xz9RPq+2raVvw6UN1JzDVL9/s2qr9E5AZOiiQti328HNhEj6IqT5rcssFQPNxCzh9bNG6uqqGMsACr5bdjylXA==",
3503
+ "dev": true,
3504
+ "requires": {
3505
+ "@types/cookies": "*",
3506
+ "@types/koa": "*"
3507
+ }
3508
+ },
3509
"@types/koa-static": {
3510
"version": "4.0.2",
3511
"resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz",
@@ -3540,6 +3682,11 @@
3682
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
3683
"dev": true
3684
},
3685
+ "base64-js": {
3686
+ "version": "1.5.1",
3687
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
3688
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
3689
+ },
3690
"binary-extensions": {
3691
"version": "2.2.0",
3692
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -3586,6 +3733,15 @@
3733
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
3734
"dev": true
3735
},
3736
+ "buffer": {
3737
+ "version": "5.7.1",
3738
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
3739
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
3740
+ "requires": {
3741
+ "base64-js": "^1.3.1",
3742
+ "ieee754": "^1.1.13"
3743
+ }
3744
+ },
3745
"bytes": {
3746
"version": "3.1.1",
3747
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
@@ -3813,6 +3969,19 @@
3969
"resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
3970
"integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
3971
},
3972
+ "core-util-is": {
3973
+ "version": "1.0.3",
3974
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
3975
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
3976
+ },
3977
+ "crc": {
3978
+ "version": "3.8.0",
3979
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
3980
+ "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
3981
+ "requires": {
3982
+ "buffer": "^5.1.0"
3983
+ }
3984
+ },
3985
"create-require": {
3986
"version": "1.1.1",
3987
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -4175,6 +4344,11 @@
4344
"safer-buffer": ">= 2.1.2 < 3"
4345
}
4346
},
4347
+ "ieee754": {
4348
+ "version": "1.2.1",
4349
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
4350
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
4351
+ },
4352
"ignore-by-default": {
4353
"version": "1.0.1",
4354
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -4237,6 +4411,11 @@
4411
"ci-info": "^2.0.0"
4412
}
4413
},
4414
+ "is-class-hotfix": {
4415
+ "version": "0.0.6",
4416
+ "resolved": "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz",
4417
+ "integrity": "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="
4418
+ },
4419
"is-extglob": {
4420
"version": "2.1.1",
4421
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -4303,6 +4482,16 @@
4482
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
4483
"dev": true
4484
},
4485
+ "is-type-of": {
4486
+ "version": "1.2.1",
4487
+ "resolved": "https://registry.npmjs.org/is-type-of/-/is-type-of-1.2.1.tgz",
4488
+ "integrity": "sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==",
4489
+ "requires": {
4490
+ "core-util-is": "^1.0.2",
4491
+ "is-class-hotfix": "~0.0.6",
4492
+ "isstream": "~0.1.2"
4493
+ }
4494
+ },
4495
"is-typedarray": {
4496
"version": "1.0.0",
4497
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -4451,6 +4640,27 @@
4640
"koa-compose": "^4.1.0"
4641
}
4642
},
4643
+ "koa-session": {
4644
+ "version": "6.2.0",
4645
+ "resolved": "https://registry.npmjs.org/koa-session/-/koa-session-6.2.0.tgz",
4646
+ "integrity": "sha512-l2ZC6D1BnRkIXhWkRgpewdqKn38/9/2WScmxyShuN408TxX+J/gUzdzGBIvGZaRwmezOU819sNpGmfFGLeDckg==",
4647
+ "requires": {
4648
+ "crc": "^3.4.4",
4649
+ "debug": "^3.1.0",
4650
+ "is-type-of": "^1.0.0",
4651
+ "uuid": "^3.3.2"
4652
+ },
4653
+ "dependencies": {
4654
+ "debug": {
4655
+ "version": "3.2.7",
4656
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
4657
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
4658
+ "requires": {
4659
+ "ms": "^2.1.1"
4660
+ }
4661
+ }
4662
+ }
4663
+ },
4664
"latest-version": {
4665
"version": "5.1.0",
4666
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@@ -5270,6 +5480,11 @@
5480
"prepend-http": "^2.0.0"
5481
}
5482
},
5483
+ "uuid": {
5484
+ "version": "3.4.0",
5485
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
5486
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
5487
+ },
5488
"vary": {
5489
"version": "1.1.2",
5490
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
package.json
+2
@@ -25,6 +25,7 @@
25
"koa-bodyparser": "^4.3.0",
26
"koa-compress": "^5.1.0",
27
"koa-mount": "^4.0.0",
28
+ "koa-session": "^6.2.0",
29
"lodash": "^4.17.21",
30
"minimist": "^1.2.5",
31
"yaml": "^1.10.2"
@@ -36,6 +37,7 @@
37
"@types/koa-bodyparser": "^4.3.4",
38
"@types/koa-compress": "^4.0.3",
39
"@types/koa-mount": "^4.0.1",
40
+ "@types/koa-session": "^5.10.4",
41
"@types/koa-static": "^4.0.2",
42
"@types/lodash": "^4.14.178",
43
"@types/micromatch": "^4.0.2",
src/apis.ts
+6
-23
@@ -3,12 +3,9 @@ import { vfs, VfsNode, walkNode } from './vfs'
3
import { stat } from 'fs/promises'
4
import _ from 'lodash'
5
import { getCurrentUsername, getCurrentUsernameExpanded, updateAccount, verifyLogin } from './perm'
6
-import { sessions } from './sessions'
6
import createSSE from './sse'
7
import { basename } from 'path'
8
10
-export const SESSION_COOKIE = 'hfs_$id'
11
-
9
type ApiHandler = (params:any, ctx:Koa.Context) => any
10
type ApiHandlers = Record<string, ApiHandler>
11
@@ -99,34 +96,20 @@ export const frontEndApis: ApiHandlers = {
96
return ctx.status = 400
97
if (!await verifyLogin(user, password))
98
return ctx.status = 401
102
- const sess = sessions.create(user)
103
- ctx.cookies.set(SESSION_COOKIE, sess.id)
104
- return sess
99
+ if (ctx.session)
100
+ ctx.session.user = user
101
+ return true
102
},
103
104
async logout({}, ctx) {
108
- const sid = ctx.cookies.get(SESSION_COOKIE)
109
- if (!sid)
110
- return ctx.status = 401
111
- if (!sessions.destroy(sid))
112
- return ctx.status = 500
105
+ if (ctx.session)
106
+ ctx.session.user = undefined
107
ctx.status = 200
114
- ctx.cookies.set(SESSION_COOKIE, null)
108
return true
109
},
110
111
async refresh_session({}, ctx) {
119
- const prevId = ctx.cookies.get(SESSION_COOKIE)
120
- if (!prevId) return
121
- const sess = sessions.refresh(prevId)
122
- if (!sess) {
123
- ctx.cookies.set(SESSION_COOKIE)
124
- ctx.status = 400
125
- ctx.message = 'session not found'
126
- return
127
- }
128
- ctx.cookies.set(SESSION_COOKIE, sess.id)
129
- return sess
112
+ return { user: ctx.session?.user }
113
},
114
115
async change_pwd({ newPassword }, ctx) {
src/index.ts
+8
@@ -11,10 +11,18 @@ import proxy from 'koa-better-http-proxy'
11
import compress from 'koa-compress'
12
import { Server } from 'http'
13
import { subscribe } from './config'
14
+import session from 'koa-session'
15
16
const BUILD_TIMESTAMP = ""
17
18
const app = new Koa()
19
+app.keys = ['hfs-keys-test']
20
+app.use(session({
21
+ key: 'hfs_$id',
22
+ signed: true,
23
+ rolling: true,
24
+ maxAge: 30*60_000,
25
+}, app))
26
app.use(async (ctx, next) => {
27
// log all requests
28
console.debug(new Date().toLocaleTimeString(), ctx.request.method, ctx.url)
src/perm.ts
+1
-4
@@ -5,8 +5,6 @@ import yaml from 'yaml'
5
import { hashPassword, verifyPassword } from './crypt'
6
import { argv } from './const'
7
import { readFileBusy, setHidden, wantArray } from './misc'
8
-import { SESSION_COOKIE } from './apis'
9
-import { sessions } from './sessions'
8
import Koa from 'koa'
9
10
const PATH = argv.accounts || 'accounts.yaml'
@@ -22,8 +20,7 @@ interface Accounts { [username:string]: Account }
20
let accounts: Accounts = {}
21
22
export async function getCurrentUsername(ctx: Koa.Context) {
25
- const id = ctx.cookies.get(SESSION_COOKIE)
26
- return id && sessions.get(id)?.user || ''
23
+ return ctx.session?.user || ''
24
}
25
26
export async function getCurrentUsernameExpanded(ctx: Koa.Context) {
src/sessions.ts
deleted
-42
@@ -1,42 +0,0 @@
1
-import { randomUUID } from 'crypto'
2
-
3
-const EXP_TIME = 5*60_000
4
-
5
-type SessionId = string
6
-class Session {
7
- id: string
8
- user?: string
9
- exp: Date
10
- constructor(init:Session | string){
11
- if (typeof init === 'string')
12
- this.user = init
13
- else
14
- Object.assign(this, init)
15
- this.id = randomUUID()
16
- this.exp = new Date(Date.now() + EXP_TIME)
17
- }
18
-}
19
-
20
-export const sessions = {
21
- all: new Map(),
22
- create(user:string) : Session {
23
- const sess = new Session(user)
24
- this.all.set(sess.id, sess)
25
- setTimeout(()=> this.all.delete(sess.id), EXP_TIME)
26
- return sess
27
- },
28
- get(id:SessionId) : Session | undefined {
29
- return this.all.get(id)
30
- },
31
- refresh(id:SessionId) : Session | undefined {
32
- let sess = this.get(id)
33
- if (!sess) return
34
- this.all.delete(sess.id)
35
- sess = new Session(sess)
36
- this.all.set(sess.id, sess)
37
- return sess
38
- },
39
- destroy(id:SessionId) {
40
- return this.all.delete(id)
41
- }
42
-}
todo.md
+1
@@ -1,4 +1,5 @@
1
# To do
2
+- anti-csrf
3
- file sorting
4
- folders before?
5
- upload