mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-01 16:44:16 +00:00
* added jsonwebtoken as inbuilt library * removed bundling * handle callback in quickjs * chore: tests folder restructure * chore: lint fix --------- Co-authored-by: Sid <siddharth@usebruno.com>
110 lines
2.7 KiB
Plaintext
110 lines
2.7 KiB
Plaintext
meta {
|
|
name: sign
|
|
type: http
|
|
seq: 1
|
|
}
|
|
|
|
post {
|
|
url: {{host}}/api/echo
|
|
body: none
|
|
auth: inherit
|
|
}
|
|
|
|
script:pre-request {
|
|
const jwt = require('jsonwebtoken');
|
|
|
|
const payload = {
|
|
userId: 123,
|
|
username: 'testuser',
|
|
role: 'admin',
|
|
iat: Math.floor(Date.now() / 1000)
|
|
};
|
|
|
|
const secret = bru.getEnvVar('secret');
|
|
|
|
const options = {
|
|
algorithm: 'HS256',
|
|
expiresIn: '1h'
|
|
};
|
|
|
|
try {
|
|
console.log('Testing JWT encoding...');
|
|
const token = jwt.sign(payload, secret, options);
|
|
|
|
console.log('JWT Token encoded successfully:', token);
|
|
|
|
bru.setEnvVar('jwt_token', token);
|
|
|
|
bru.setEnvVar('original_payload', JSON.stringify(payload));
|
|
|
|
console.log('JWT encoding test passed!');
|
|
|
|
} catch (error) {
|
|
console.error('JWT encoding failed:', error.message);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
tests {
|
|
const atob = require('atob')
|
|
|
|
test("JWT token should be generated", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
expect(jwtToken).to.exist;
|
|
});
|
|
|
|
test("JWT token should be a string", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
expect(typeof jwtToken).to.equal('string');
|
|
});
|
|
|
|
test("JWT token should have 3 parts (header.payload.signature)", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
const parts = jwtToken.split('.');
|
|
expect(parts.length).to.equal(3);
|
|
});
|
|
|
|
test("JWT token should be valid base64", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
const parts = jwtToken.split('.');
|
|
|
|
// Test that each part is valid base64
|
|
parts.forEach((part, index) => {
|
|
try {
|
|
atob(part);
|
|
} catch (e) {
|
|
throw new Error(`JWT part ${index + 1} is not valid base64`);
|
|
}
|
|
});
|
|
});
|
|
|
|
test("JWT token should contain expected payload data", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
const originalPayload = JSON.parse(bru.getEnvVar('original_payload'));
|
|
|
|
// Decode the payload part (second part of JWT)
|
|
const parts = jwtToken.split('.');
|
|
const payloadPart = parts[1];
|
|
const decodedPayload = JSON.parse(atob(payloadPart));
|
|
console.log(decodedPayload)
|
|
|
|
expect(decodedPayload.userId).to.equal(originalPayload.userId);
|
|
expect(decodedPayload.username).to.equal(originalPayload.username);
|
|
expect(decodedPayload.role).to.equal(originalPayload.role);
|
|
});
|
|
|
|
test("JWT token should have proper header", function() {
|
|
const jwtToken = bru.getEnvVar('jwt_token');
|
|
const parts = jwtToken.split('.');
|
|
const headerPart = parts[0];
|
|
const header = JSON.parse(atob(headerPart));
|
|
|
|
expect(header.alg).to.equal('HS256');
|
|
expect(header.typ).to.equal('JWT');
|
|
});
|
|
}
|
|
|
|
settings {
|
|
encodeUrl: true
|
|
}
|