-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
vzakharchenko
committed
Apr 27, 2020
1 parent
5546dfc
commit 8cff249
Showing
17 changed files
with
652 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,5 +14,7 @@ example/* | |
.circleci/* | ||
.idea/* | ||
.coverage | ||
__mocks__ | ||
__tests__ | ||
keycloak-cloudfront-dynamodb | ||
package-lock.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
|
||
const fs = jest.genMockFromModule('fs'); | ||
fs.promises = {}; | ||
fs.promises.readFile = async (fullPath) => { | ||
const filename = fullPath.replace(/^.*[\\\/]/, ''); // eslint-disable-line no-useless-escape | ||
if (filename === 'storage.json') { | ||
return JSON.stringify({ | ||
'oldId':{ | ||
exp:0 | ||
} | ||
}); | ||
} | ||
throw new Error('file does not exists'); | ||
}; | ||
fs.promises.writeFile = async () =>{}; | ||
module.exports = fs; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
jest.mock('../../../src/clientAuthorization'); | ||
jest.mock('jsonwebtoken'); | ||
|
||
const jsonwebtoken = require('jsonwebtoken'); | ||
const { clientJWT } = require('../../../src/clientAuthorization'); | ||
const { | ||
signState, | ||
validateState, | ||
tenantName, | ||
updateResponse, | ||
getHostUrl, | ||
} = require('../../../src/edge/lambdaEdgeUtils'); | ||
|
||
describe('testing lambdaEdgeUtils', () => { | ||
beforeEach(() => { | ||
clientJWT.mockImplementation(async () => 'signature'); | ||
jsonwebtoken.decode.mockImplementation(() => ({ | ||
header: { alg: 'rs256' }, | ||
})); | ||
jsonwebtoken.verify.mockImplementation(() => ({ | ||
n: 'undefined-undefined', | ||
})); | ||
}); | ||
|
||
afterEach(() => { | ||
}); | ||
|
||
test('test signState', async () => { | ||
const ret = await signState('/', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: | ||
{ sessionOptions: { sessionOptions: {} } }, | ||
}); | ||
expect(ret).toEqual('signature'); | ||
}); | ||
|
||
test('test validateState', async () => { | ||
const ret = await validateState('Token', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
expect(ret).toEqual({ n: 'undefined-undefined' }); | ||
}); | ||
|
||
test('test validateState none', async () => { | ||
jsonwebtoken.decode.mockImplementation(() => ({ | ||
header: { alg: 'none' }, | ||
})); | ||
try { | ||
await validateState('Token', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
throw new Error('Unexpected state'); | ||
} catch (e) { | ||
expect(e.message).toEqual('invalid token'); | ||
} | ||
}); | ||
|
||
|
||
test('test validateState invalid token', async () => { | ||
jsonwebtoken.decode.mockImplementation(() => ({ | ||
})); | ||
try { | ||
await validateState('Token', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
throw new Error('Unexpected state'); | ||
} catch (e) { | ||
expect(e.message).toEqual('invalid token (header part)'); | ||
} | ||
}); | ||
|
||
test('test validateState invalid token 3', async () => { | ||
const newVar = await validateState(null, { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
expect(newVar).toEqual(null); | ||
}); | ||
|
||
test('test validateState invalid token 2', async () => { | ||
jsonwebtoken.decode.mockImplementation(() => null); | ||
try { | ||
await validateState('Token', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
throw new Error('Unexpected state'); | ||
} catch (e) { | ||
expect(e.message).toEqual('invalid token (header part)'); | ||
} | ||
}); | ||
|
||
test('test validateState hs', async () => { | ||
jsonwebtoken.decode.mockImplementation(() => ({ | ||
header: { alg: 'hs64' }, | ||
})); | ||
try { | ||
await validateState('Token', { | ||
logger: console, | ||
keycloakJson: {}, | ||
sessionManager: { | ||
sessionOptions: { keys: { publicKey: { key: 'PUBLIC_KEY' } } }, | ||
}, | ||
}); | ||
throw new Error('Unexpected state'); | ||
} catch (e) { | ||
expect(e.message).toEqual('invalid token'); | ||
} | ||
}); | ||
|
||
test('test tenantName', async () => { | ||
const tn = tenantName({ realm: 'name', resource: 'resource' }); | ||
expect(tn).toEqual('name-resource'); | ||
}); | ||
|
||
test('test getHostUrl', async () => { | ||
const request = { headers: { referer: [{ value: 'https:/test.com' }] } }; | ||
const url = getHostUrl(request); | ||
expect(url).toEqual('https:/test.com'); | ||
}); | ||
|
||
test('updateResponse test empty', async () => { | ||
const request = {}; | ||
const response = {}; | ||
updateResponse(request, response); | ||
expect(response).toEqual({}); | ||
}); | ||
|
||
test('updateResponse test', async () => { | ||
const request = {}; | ||
const response = { | ||
headers: { | ||
'set-cookie': [{ value: 'test' }], | ||
}, | ||
}; | ||
updateResponse(request, response); | ||
expect(response).toEqual({ | ||
headers: { | ||
'set-cookie': [ | ||
{ | ||
value: 'test', | ||
}, | ||
], | ||
}, | ||
}); | ||
}); | ||
test('updateResponse test 2', async () => { | ||
const request = { headers: { referer: [{ value: 'https:/test.com' }] } }; | ||
const response = { | ||
headers: { | ||
'set-cookie': [{ value: 'test' }], | ||
}, | ||
}; | ||
updateResponse(request, response); | ||
expect(response).toEqual({ | ||
headers: { | ||
'set-cookie': [ | ||
{ | ||
value: 'test; Domain=https:/test.com; Secure', | ||
}, | ||
], | ||
}, | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
jest.mock('../../../src/edge/router'); | ||
jest.mock('../../../src/edge/lambdaEdgeUtils'); | ||
const { getRoute } = require('../../../src/edge/router'); | ||
|
||
const { updateResponse } = require('../../../src/edge/lambdaEdgeUtils'); | ||
|
||
const lamdaEdge = require('../../../src/edge/lamdaEdge'); | ||
|
||
describe('testing lamdaEdge', () => { | ||
beforeEach(() => { | ||
getRoute.mockImplementation(async () => ({ handle: async (request, config, f) => { f(null, { response: 'test' }); } })); | ||
updateResponse.mockImplementation((request, response) => response); | ||
}); | ||
|
||
afterEach(() => { | ||
}); | ||
|
||
test('test lambdaEdgeRouter', async () => { | ||
await lamdaEdge.lambdaEdgeRouter({ | ||
Records: [{ | ||
cf: { request: {}, config: {} }, | ||
}], | ||
}, {}, {}, (error, response) => { | ||
expect(response.response).toEqual('test'); | ||
}); | ||
}); | ||
|
||
test('test lambdaEdgeRouter error', async () => { | ||
getRoute.mockImplementation(() => ({ handle: async () => { throw new Error('test'); } })); | ||
await lamdaEdge.lambdaEdgeRouter({ | ||
Records: [{ | ||
cf: { request: {}, config: {} }, | ||
}], | ||
}, {}, { | ||
sessionOptions: { | ||
route: { | ||
internalServerError: (request, callback) => { | ||
callback(null, { response: 'error' }); | ||
}, | ||
}, | ||
}, | ||
}, (error, response) => { | ||
expect(response.response).toEqual('error'); | ||
}); | ||
}); | ||
test('test lambdaEdgeRouter error2', async () => { | ||
getRoute.mockImplementation(async () => ({ handle: async () => { throw new Error('test'); } })); | ||
await lamdaEdge.lambdaEdgeRouter({ Records: [] }, {}, { | ||
sessionOptions: { | ||
route: { | ||
internalServerError: (request, callback) => { | ||
callback(null, { response: 'error' }); | ||
}, | ||
}, | ||
}, | ||
}, (error, response) => { | ||
expect(response.response).toEqual('error'); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
jest.mock('yallist'); | ||
const yallist = require('yallist'); | ||
|
||
yallist.create.mockImplementation(() => ({ | ||
toArray: () => [{ name: 'test', isRoute: () => true }], | ||
push: () => { | ||
}, | ||
|
||
})); | ||
const router = require('../../../src/edge/router'); | ||
|
||
describe('testing edgeRouter', () => { | ||
beforeEach(() => { | ||
|
||
}); | ||
|
||
afterEach(() => { | ||
}); | ||
|
||
test('test registerRoute/getRouter', async () => { | ||
router.registerRoute({}); | ||
const route = await router.getRoute({}, {}); | ||
expect(route.name).toEqual('test'); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
|
||
describe('testing callback', () => { | ||
beforeEach(() => { | ||
|
||
}); | ||
|
||
afterEach(() => { | ||
}); | ||
|
||
test('test callback', async () => { | ||
expect(true).toEqual(true); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
jest.mock('cookie'); | ||
jest.mock('querystring'); | ||
jest.mock('../../../../src/edge/lambdaEdgeUtils'); | ||
jest.mock('../../../../src/utils/restCalls'); | ||
// const cookie = require('cookie'); | ||
// | ||
const qs = require('querystring'); | ||
// | ||
// const { tenantName, getHostUrl } = require('../../../../src/edge/lambdaEdgeUtils'); | ||
// | ||
// const { getKeycloakUrl } = require('../../../../src/utils/restCalls'); | ||
|
||
const { tenantLogout } = require('../../../../src/edge/routes/Logout'); | ||
|
||
describe('testing logout', () => { | ||
beforeEach(() => { | ||
qs.parse.mockImplementation(() => ({ url: '/url' })); | ||
}); | ||
|
||
afterEach(() => { | ||
}); | ||
|
||
test('test tenantLogout', async () => { | ||
const ret = await tenantLogout({}, { keycloakJson: { realm: 'name', resource: 'resource' } }); | ||
expect(ret).toEqual({ | ||
body: 'Redirect to logout page', | ||
headers: { | ||
location: [ | ||
{ | ||
key: 'Location', | ||
value: 'undefined/realms/name/protocol/openid-connect/logout?redirect_uri=/url', | ||
}, | ||
], | ||
'set-cookie': [ | ||
{ | ||
key: 'Set-Cookie', | ||
}, | ||
{ | ||
key: 'Set-Cookie', | ||
}, | ||
], | ||
}, | ||
status: '302', | ||
statusDescription: 'Found', | ||
}); | ||
}); | ||
}); |
Oops, something went wrong.