|
1 | 1 | import crypto from "k6/crypto"; |
2 | 2 | import encoding from "k6/encoding"; |
| 3 | +import { |
| 4 | + uuidv4, |
| 5 | +} from 'https://jslib.k6.io/k6-utils/1.1.0/index.js'; |
| 6 | +import { PRIVATE_KEY } from "./configuration.js"; |
3 | 7 |
|
4 | 8 | const algToHash = { |
5 | 9 | HS256: "sha256", |
6 | 10 | HS384: "sha384", |
7 | 11 | HS512: "sha512" |
8 | 12 | }; |
9 | 13 |
|
10 | | -export default function generateToken() { |
11 | | - |
| 14 | +export default function generateToken(miniAppType) { |
| 15 | + const issuedAtTime = (Date.now() / 1000) - 3; |
| 16 | + const expirationTime = issuedAtTime + 600; |
| 17 | + const payload = { |
| 18 | + iat: issuedAtTime, |
| 19 | + iss: "load-test-dev", |
| 20 | + exp: expirationTime, |
| 21 | + uid: uuidv4(), |
| 22 | + level_id: "none", |
| 23 | + execution_type: "RUN", |
| 24 | + mini_app_type: miniAppType, |
| 25 | + verified_teachers: uuidv4(), |
| 26 | + options: "{}", |
| 27 | + sid: uuidv4() |
| 28 | + }; |
| 29 | + let token = encode(payload); |
| 30 | + console.log("token: " + token); |
| 31 | + return token; |
12 | 32 | } |
13 | 33 |
|
14 | | -function sign(data, hashAlg, secret) { |
15 | | - let hasher = crypto.createHMAC(hashAlg, secret); |
16 | | - hasher.update(data); |
17 | | - |
18 | | - // Some manual base64 rawurl encoding as `Hasher.digest(encodingType)` |
19 | | - // doesn't support that encoding type yet. |
20 | | - return hasher.digest("base64").replace(/\//g, "_").replace(/\+/g, "-").replace(/=/g, ""); |
| 34 | +function sign(data) { |
| 35 | + let hash = crypto.hmac('sha256', PRIVATE_KEY, data, 'base64rawurl'); |
| 36 | + return hash; |
21 | 37 | } |
22 | 38 |
|
23 | | -function encode(payload, secret, algorithm) { |
24 | | - algorithm = algorithm || "HS256"; |
| 39 | +function encode(payload) { |
| 40 | + let algorithm = "HS256"; |
25 | 41 | let header = encoding.b64encode(JSON.stringify({ typ: "JWT", alg: algorithm }), "rawurl"); |
26 | | - payload = encoding.b64encode(JSON.stringify(payload), "rawurl"); |
27 | | - let sig = sign(header + "." + payload, algToHash[algorithm], secret); |
28 | | - return [header, payload, sig].join("."); |
| 42 | + let payloadEncoded = encoding.b64encode(JSON.stringify(payload), "rawurl"); |
| 43 | + let contentToEncode = header + "." + payloadEncoded; |
| 44 | + let sig = sign(contentToEncode, algToHash[algorithm]); |
| 45 | + return [header, payloadEncoded, sig].join("."); |
29 | 46 | } |
0 commit comments