mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
167 lines
6.6 KiB
TypeScript
167 lines
6.6 KiB
TypeScript
|
|
// import { testEnvironment } from '@test/helpers'
|
|
// import { logger } from '@test/testSetup'
|
|
|
|
import { createKeyPair, decode, decrypt, encode, encrypt, encryptAndSign, verify, verifyAndDecrypt } from './JWT'
|
|
import { EncryptedJWEJwtPayloadType } from './payloadtypes/EncryptedJWEJwtPayloadType'
|
|
import { OpenConnectionJwtPayloadType } from './payloadtypes/OpenConnectionJwtPayloadType'
|
|
|
|
// let con: DataSource
|
|
// let testEnv: {
|
|
// mutate: ApolloServerTestClient['mutate']
|
|
// query: ApolloServerTestClient['query']
|
|
// con: DataSource
|
|
// }
|
|
let keypairComA: { publicKey: string; privateKey: string }
|
|
let keypairComB: { publicKey: string; privateKey: string }
|
|
|
|
beforeAll(async () => {
|
|
// testEnv = await testEnvironment(logger)
|
|
// con = testEnv.con
|
|
// await cleanDB()
|
|
|
|
keypairComA = await createKeyPair()
|
|
keypairComB = await createKeyPair()
|
|
})
|
|
|
|
afterAll(async () => {
|
|
// await cleanDB()
|
|
// await con.destroy()
|
|
})
|
|
|
|
describe('test JWS creation and verification', () => {
|
|
let jwsComA: string
|
|
let jwsComB: string
|
|
beforeEach(async () => {
|
|
jest.clearAllMocks()
|
|
jwsComA = await encode(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5001/api/'), keypairComA.privateKey)
|
|
jwsComB = await encode(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5002/api/'), keypairComB.privateKey)
|
|
})
|
|
it('decode jwsComA', async () => {
|
|
const decodedJwsComA = await decode(jwsComA)
|
|
expect(decodedJwsComA).toEqual({
|
|
expiration: '10m',
|
|
handshakeID: 'handshakeID',
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5001/api/',
|
|
})
|
|
})
|
|
it('decode jwsComB', async () => {
|
|
const decodedJwsComB = await decode(jwsComB)
|
|
expect(decodedJwsComB).toEqual({
|
|
expiration: '10m',
|
|
handshakeID: 'handshakeID',
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5002/api/',
|
|
})
|
|
})
|
|
it('verify jwsComA', async () => {
|
|
const verifiedJwsComA = await verify('handshakeID', jwsComA, keypairComA.publicKey)
|
|
expect(verifiedJwsComA).toEqual(expect.objectContaining({
|
|
payload: expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5001/api/',
|
|
})
|
|
}))
|
|
})
|
|
it('verify jwsComB', async () => {
|
|
const verifiedJwsComB = await verify('handshakeID', jwsComB, keypairComB.publicKey)
|
|
expect(verifiedJwsComB).toEqual(expect.objectContaining({
|
|
payload: expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5002/api/',
|
|
})
|
|
}))
|
|
})
|
|
})
|
|
|
|
describe('test JWE encryption and decryption', () => {
|
|
let jweComA: string
|
|
let jweComB: string
|
|
beforeEach(async () => {
|
|
jest.clearAllMocks()
|
|
jweComA = await encrypt(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5001/api/'), keypairComB.publicKey)
|
|
jweComB = await encrypt(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5002/api/'), keypairComA.publicKey)
|
|
})
|
|
it('decrypt jweComA', async () => {
|
|
const decryptedAJwT = await decrypt('handshakeID', jweComA, keypairComB.privateKey)
|
|
expect(JSON.parse(decryptedAJwT)).toEqual(expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5001/api/',
|
|
handshakeID: 'handshakeID',
|
|
}))
|
|
})
|
|
it('decrypt jweComB', async () => {
|
|
const decryptedBJwT = await decrypt('handshakeID', jweComB, keypairComA.privateKey)
|
|
expect(JSON.parse(decryptedBJwT)).toEqual(expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5002/api/',
|
|
handshakeID: 'handshakeID',
|
|
}))
|
|
})
|
|
})
|
|
|
|
describe('test encrypted and signed JWT', () => {
|
|
let jweComA: string
|
|
let jwsComA: string
|
|
let jweComB: string
|
|
let jwsComB: string
|
|
beforeEach(async () => {
|
|
jest.clearAllMocks()
|
|
jweComA = await encrypt(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5001/api/'), keypairComB.publicKey)
|
|
jwsComA = await encode(new EncryptedJWEJwtPayloadType('handshakeID', jweComA), keypairComA.privateKey)
|
|
jweComB = await encrypt(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5002/api/'), keypairComA.publicKey)
|
|
jwsComB = await encode(new EncryptedJWEJwtPayloadType('handshakeID', jweComB), keypairComB.privateKey)
|
|
})
|
|
it('verify jwsComA', async () => {
|
|
const verifiedJwsComA = await verify('handshakeID', jwsComA, keypairComA.publicKey)
|
|
expect(verifiedJwsComA).toEqual(expect.objectContaining({
|
|
payload: expect.objectContaining({
|
|
jwe: jweComA,
|
|
tokentype: EncryptedJWEJwtPayloadType.ENCRYPTED_JWE_TYPE,
|
|
handshakeID: 'handshakeID',
|
|
})
|
|
}))
|
|
})
|
|
it('verify jwsComB', async () => {
|
|
const verifiedJwsComB = await verify('handshakeID', jwsComB, keypairComB.publicKey)
|
|
expect(verifiedJwsComB).toEqual(expect.objectContaining({
|
|
payload: expect.objectContaining({
|
|
jwe: jweComB,
|
|
tokentype: EncryptedJWEJwtPayloadType.ENCRYPTED_JWE_TYPE,
|
|
handshakeID: 'handshakeID',
|
|
})
|
|
}))
|
|
})
|
|
it('decrypt jweComA', async () => {
|
|
expect(JSON.parse(await decrypt('handshakeID', jweComA, keypairComB.privateKey))).toEqual(expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5001/api/',
|
|
handshakeID: 'handshakeID',
|
|
}))
|
|
})
|
|
it('decrypt jweComB', async () => {
|
|
expect(JSON.parse(await decrypt('handshakeID', jweComB, keypairComA.privateKey))).toEqual(expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5002/api/',
|
|
handshakeID: 'handshakeID',
|
|
}))
|
|
})
|
|
})
|
|
|
|
|
|
describe('test encryptAndSign and verifyAndDecrypt', () => {
|
|
let jwtComA: string
|
|
beforeEach(async () => {
|
|
jest.clearAllMocks()
|
|
jwtComA = await encryptAndSign(new OpenConnectionJwtPayloadType('handshakeID', 'http://localhost:5001/api/'), keypairComA.privateKey, keypairComB.publicKey)
|
|
})
|
|
it('verifyAndDecrypt jwtComA', async () => {
|
|
const verifiedAndDecryptedPayload = await verifyAndDecrypt('handshakeID', jwtComA, keypairComB.privateKey, keypairComA.publicKey)
|
|
expect(verifiedAndDecryptedPayload).toEqual(expect.objectContaining({
|
|
tokentype: OpenConnectionJwtPayloadType.OPEN_CONNECTION_TYPE,
|
|
url: 'http://localhost:5001/api/',
|
|
handshakeID: 'handshakeID',
|
|
}))
|
|
})
|
|
}) |