Server F checks the dashboard's entry ticket as itsdangerous does (tools/ticket-oracle: tickets made by itsdangerous 2.2.0 itself), redeems it at /__auth for a session cookie (only the key's SHA-256 is kept) and decides at /sync by the session's grant: none, read or write; a frozen project is read by everyone; every refusal names its reason (one list in packages/protocol/src/sync.ts). A WebSocket from a page of another origin is refused. /svc/* with the service key makes, deletes, freezes and thaws projects, ends a person's grant or all their sessions (connections let go) and lists the sessions. Snapshots, restoring and copying move to F6 (they need the canonical doc.json and an epoch). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
202 lines
7.8 KiB
JSON
202 lines
7.8 KiB
JSON
{
|
|
"itsdangerous": "2.2.0",
|
|
"python": "3.13.5",
|
|
"secret": "filius-test-secret",
|
|
"salt": "mdg-filius-ticket",
|
|
"ttl": 60,
|
|
"signedAt": 1790000000,
|
|
"cases": [
|
|
{
|
|
"name": "plain",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.xwmcG5wEqkYKe3DxNMUxtEnXaQo",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "readLevel",
|
|
"ticket": ".eJwVi0kKwkAQAL8i7dWGzJoZb_qT3kYCIQRFL-Lf7dyKouoLb7jCxG2UEQ0DJcGsxbCNPmGIKZc6t04scIHNU-IQHdXxpnS62_LaF1tdiatzSrXK0a60PVyoOe8OdQSNkhgzlY7ZmmKXmZECu9ZsZdRj-6weP40Ufn9uhyly.arE7gA.CA_tdrFV7T4m5P4ZTVcLpUTBby8",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "read"
|
|
}
|
|
},
|
|
{
|
|
"name": "umlautsAndEmoji",
|
|
"ticket": ".eJwVi7sNwjAURVexTMuT4m9sRmABan-eo0jBQlGAArEDFW1KNmABL8QIvHRH99zz4Fd-4F10xRSJIIJKoLNBcMV3IKTSxvbOh5j4nle6higkYSY8tu88sPY-48xOOLaV_dbXh2QiuVPK2rRVU6gDDViJLwS2iCyTiqCD8aDRZfCpjxBEpDlrNMVu2W2i830eF-TPP73wMJ4.arE7gA.iCZHG4Ent52jQ4US5NkTWZ-62pw",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Jörg Ömer Weiß 🐧",
|
|
"c": "#3366cc",
|
|
"lang": "en",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "compressed",
|
|
"ticket": ".eJxVzstqwzAQBdBfEeo2I2LrETvLdp1Vv0CPUS2QZWNbSUnIv2cSKCWLgctw5zA3XvmR710XdWwRGis9qKARutjvoWml0ubQ9dZ5vuOFqqP9TWPKyRYU6zQPCYUf7JKnbUNxnoqoJYhrFQ7TOifMg60rFhjruuFCkwpBgaDTP8S-XxD7-oMYQYwgdq3s8x06vUGeoA8pjfHP_7ItP7QISHmmYGITWi8dKKt7UNgF6P3BgW0crYNCHc3z7JypfFnShvz-ALoRWAg.arE7gA.FCNmtMClRGk5V70ufHkfaOaYXuY",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "maximiliane.sophie.charlotte.von.und.zu.beispielhausen-musterstein",
|
|
"d": "Maximiliane Sophie Charlotte von und zu Beispielhausen-Musterstein",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "sixtySecondsOld",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.xwmcG5wEqkYKe3DxNMUxtEnXaQo",
|
|
"now": 1790000060,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "sixtyOneSecondsOld",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.xwmcG5wEqkYKe3DxNMUxtEnXaQo",
|
|
"now": 1790000061,
|
|
"error": "expired"
|
|
},
|
|
{
|
|
"name": "fromTheFuture",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.xwmcG5wEqkYKe3DxNMUxtEnXaQo",
|
|
"now": 1789999999,
|
|
"error": "expired"
|
|
},
|
|
{
|
|
"name": "otherSecret",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.4wnVSAZOvBXnfPb_aCCd2137AEI",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "scratchSalt",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.n87SY_X1-cvBv6gZmgmGTgGlIcs",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "tamperedPayload",
|
|
"ticket": ".eAwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA.xwmcG5wEqkYKe3DxNMUxtEnXaQo",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "noSignature",
|
|
"ticket": ".eJwVi0kKwzAMAL9S1GsF8Rq7t_YnsiQXQwih66H071VuwzDzhRecYWqlp-4VHQXGKEmx9Dqh8yGmPJdKjeEEq6XUnDcUw4vQ4arjsQ1dTLGpYwg5894utN5MiBpvBrk78RwaRkoVoxbBynNDcs20RE0979t7sfhzH0-F3x-ZYioB.arE7gA",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "garbage",
|
|
"ticket": "not a ticket",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "empty",
|
|
"ticket": "",
|
|
"now": 1790000000,
|
|
"error": "badSignature"
|
|
},
|
|
{
|
|
"name": "listPayload",
|
|
"ticket": "WyJ1IiwicCJd.arE7gA.pXsWj5Myfb6h4fhFYYSxWDxcBxU",
|
|
"now": 1790000000,
|
|
"payload": [
|
|
"u",
|
|
"p"
|
|
]
|
|
},
|
|
{
|
|
"name": "withoutLevel",
|
|
"ticket": ".eJwVykkKwkAQQNGrSLm1ID2m2525SU0tgRAC4irk7pa7z-Of8IUnTNxGGdEwUBLMWgzb6BOGmHKpc-vEAg_YfSUO0VM9X0q3xdbPsdrmJE73lGqV_7vR_nZQ8z486ggaJTFmKh2zNcUuMyMFdtZsZVS4fm3rJZo.arE7gA.gZ_wCIiMnGMbf1tD13qYm6XzNzI",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6"
|
|
}
|
|
},
|
|
{
|
|
"name": "unknownLevel",
|
|
"ticket": ".eJwVjUsKAjEQBa8i7daGyXcSd3qTTrojgRgGRDfi3e3siqIe7wtvuMJWUgvNChpyFT0HwdTyhsY6H-KeMpUKF5iaUjFWkRVvTKe79NfRZaiqqs7OxVhXO2g-VLAoHwqxGbbVFfQUMnpJjLnuBckU1ewltLhmn7FO-Nkn_P6Ydynf.arE7gA.VhUG56J86GGt_eX0M_Aq-Cr38qk",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "admin"
|
|
}
|
|
},
|
|
{
|
|
"name": "projectNotAUuid",
|
|
"ticket": ".eJwdikEOwiAURK9ivlupBQrS7vQmH_gYEtI0teqi8e6O7t68eTs9aaI-huKKEaXZJjVkJyqUsVfa2MH5Sxg5JjrRjJSjNsAMvGY-3KQ-lioNKkEdrfU-_drG8x0iC3gBdN1Ztv_xapjvtW5Cny86xCHC.arE7gA.2ayBJAFLfDUpzgXtbnEy8N95QXk",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"d": "Ada Beispiel",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "../etc",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "withoutName",
|
|
"ticket": ".eJwVi0sOwjAMBe9itlhqYsdNuE3sOAipQgjxWVTcHXc3bzRvhzdcYNE6y8yOqZMhj-JYZ1swZeIia21dDc5gkZ6IROxYW79fQwwPfgTITCMbKXIvDdnrwGarYk8aerCXKcfts0X8fd5eDr8_LEIh2g.arE7gA.hLO9zSKg8cblJgKFXxatwaRMJNI",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"c": "#3366cc",
|
|
"lang": "de",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "write"
|
|
}
|
|
},
|
|
{
|
|
"name": "onlyRequired",
|
|
"ticket": ".eJwNykEKAzEIQNG7uK4wJppJehuNuhpKKbSb0rvX3efzvvCGOxw2U7IFkvaN7BI4cx1IrbOMcy61DTd4FFWjVvmsHEnedjdklYUc03Ht01DJajuH5Ch6fa7Cr1CH3x9Dch1o.arE7gA.YCJxP6HbXDZ_cvikkPTvJIRfC7Q",
|
|
"now": 1790000000,
|
|
"payload": {
|
|
"u": "0b8f5f2e-1a3c-4d5e-8f90-123456789abc",
|
|
"n": "ab12",
|
|
"p": "6f1d2c3b-4a59-4e8d-9c7b-a1b2c3d4e5f6",
|
|
"lvl": "read"
|
|
}
|
|
}
|
|
]
|
|
}
|