diff --git a/packages/oidc-client/__tests__/main.test.ts b/packages/oidc-client/__tests__/main.test.ts index 378ed777..0e25a2b5 100644 --- a/packages/oidc-client/__tests__/main.test.ts +++ b/packages/oidc-client/__tests__/main.test.ts @@ -1,10 +1,19 @@ -var httpclient = require("@actions/http-client") -var configvar = require("./../src/internal/config-variables") +var httpclient = require('@actions/http-client') +var configvar = require('./../src/internal/config-variables') +var main = require('./../src/main') describe('oidc-client-tests', () => { it('Get Http Client', async () => { - //const http = new httpclient('actions/oidc-client') - expect(httpclient).toBeDefined() + const http = new httpclient.HttpClient('actions/oidc-client') + expect(http).toBeDefined() + }) + + it('HTTP get request to get token endpoint', async () => { + const http = new httpclient.HttpClient('actions/oidc-client') + const res = await http.get( + 'https://ghactionsoidc.azurewebsites.net/.well-known/openid-configuration' + ) + expect(res.message.statusCode).toBe(200) }) it('Get token endpoint', async () => { @@ -12,6 +21,10 @@ describe('oidc-client-tests', () => { expect(url).toBeDefined() }) + it('Fetch Id token', async () => { + var id_token = main.getIDToken('helloworld') + expect(id_token).toBeDefined() + }) }) /*test('HTTP get request to get token endpoint', async () => { diff --git a/packages/oidc-client/package.json b/packages/oidc-client/package.json index 922e6945..fe58945a 100644 --- a/packages/oidc-client/package.json +++ b/packages/oidc-client/package.json @@ -11,12 +11,12 @@ "package": "ncc build --source-map --license licenses.txt", "test": "jest", "all": "npm run build && npm run format && npm run package && npm test", - "tsc":"tsc", - "type": "module" + "tsc":"tsc" }, "repository": { "type": "git", - "url": "git+https://github.com/souravchanduka/toolkit.git" + "url": "git+https://github.com/souravchanduka/toolkit.git", + "directory": "packages/oidc-client" }, "keywords": [ "actions", @@ -32,22 +32,20 @@ "dependencies": { "@actions/core": "^1.2.6", "@actions/http-client": "^1.0.11", - "@octokit/core": "^3.4.0" + "@octokit/core": "^3.4.0", + "jwt-decode":"3.1.2" }, "devDependencies": { "@types/jest": "^26.0.15", "@types/node": "^14.14.9", - "@typescript-eslint/parser": "^4.8.1", "@vercel/ncc": "^0.25.1", - "eslint": "^7.17.0", - "eslint-plugin-github": "^4.1.3", - "eslint-plugin-jest": "^24.1.3", "jest": "^26.6.3", "jest-circus": "^26.6.3", "js-yaml": "^3.14.0", "prettier": "2.2.1", "ts-jest": "^26.4.4", - "typescript": "^4.1.3" + "typescript": "^4.1.3", + "jwt-decode": "3.1.2" }, "bugs": { "url": "https://github.com/souravchanduka/toolkit/issues" diff --git a/packages/oidc-client/src/internal/config-variables.ts b/packages/oidc-client/src/internal/config-variables.ts index 7c144f59..7c47b1d2 100644 --- a/packages/oidc-client/src/internal/config-variables.ts +++ b/packages/oidc-client/src/internal/config-variables.ts @@ -1,5 +1,5 @@ export function getRuntimeToken(): string { - const token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imlmb2lQTVA1ZlVaUFBkUnV4WXVPbklNUHVEcyJ9.eyJuYW1laWQiOiJkZGRkZGRkZC1kZGRkLWRkZGQtZGRkZC1kZGRkZGRkZGRkZGQiLCJzY3AiOiJBY3Rpb25zLkdlbmVyaWNSZWFkOjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCBBY3Rpb25zLlVwbG9hZEFydGlmYWN0czowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvMTpCdWlsZC9CdWlsZC8yIERpc3RyaWJ1dGVkVGFzay5HZW5lcmF0ZUlkVG9rZW46YzU3NjQ3Y2QtZGEyMy00YzkwLWEzNWEtY2QzMjhhZTc1ZTBlOmNhMzk1MDg1LTA0MGEtNTI2Yi0yY2U4LWJkYzg1ZjY5Mjc3NCBMb2NhdGlvblNlcnZpY2UuQ29ubmVjdCBSZWFkQW5kVXBkYXRlQnVpbGRCeVVyaTowMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvMTpCdWlsZC9CdWlsZC8yIiwiSWRlbnRpdHlUeXBlQ2xhaW0iOiJTeXN0ZW06U2VydmljZUlkZW50aXR5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvc2lkIjoiREREREREREQtRERERC1ERERELUREREQtREREREREREREREREIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9wcmltYXJ5c2lkIjoiZGRkZGRkZGQtZGRkZC1kZGRkLWRkZGQtZGRkZGRkZGRkZGRkIiwiYXVpIjoiNjIyZTlkODgtY2Y4NS00NzdkLWE5ZGYtNzM5MWFiMjBhYjI4Iiwic2lkIjoiZmVjNzUzYzktNjAzZS00OGYzLWEwYmUtMzhhY2UyNGVlYTY5IiwiYWMiOiJbe1wiU2NvcGVcIjpcInJlZnMvaGVhZHMvbWFpblwiLFwiUGVybWlzc2lvblwiOjN9XSIsIm9pZGNfc3ViIjoiUmVwbzpnaXRodWIvc2RmZzpSZWY6cmVmcy9oZWFkcy9tYWluIiwib3JjaGlkIjoiYzU3NjQ3Y2QtZGEyMy00YzkwLWEzNWEtY2QzMjhhZTc1ZTBlLmJ1aWxkLl9fZGVmYXVsdCIsImlzcyI6InZzdG9rZW4uY29kZWRldi5tcyIsImF1ZCI6InZzdG9rZW4uY29kZWRldi5tc3x2c286MWFjZjY2YjQtZjhkOS00MmUwLWFmNWQtMThmNDE0ODhjNzFkIiwibmJmIjoxNjI2NjU1MDIxLCJleHAiOjE2MjY2Nzc4MjF9.Xwlp7EGXS-MhHwI93NCntEv7RBfMLNYInfbnjHTL5XdFPkSSLftlTbEIlrWz0PHguXRhw7W1WjzXVCOHMuRybeOce6p9U5Ap_JzxYE7NllEsT5KgeuUHAEnIVzgT474BoUEsI1NwFMzxx56f-68jgf088fJfbF9BRv609o0pnrYpHGs8g1lJoy1D0VRfOluxGhpbhrfFnNqbVJPTE4l1KyBvYjAfh5T9qBu1VFv7tR23siq0a1F4nPIVLh9Jd1g1YBIcFd7ejj_vEEyo2UGjXlNlc9pO9xrmjy_1wPggnX5OmndSPozK-oho1YCIuhL8TZomHeaX6qXeXcCakR_Lmw"//process.env['ACTIONS_RUNTIME_TOKEN'] + const token = process.env['ACTIONS_RUNTIME_TOKEN'] if (!token) { throw new Error('Unable to get ACTIONS_RUNTIME_TOKEN env variable') } @@ -7,11 +7,11 @@ export function getRuntimeToken(): string { } export function getIDTokenUrl(): string { - const runtimeUrl = "https://neha.ngrok.io/5BIeW5yLeO4xcIjKhPUlNw8vNEKgp3rNJJO0ZaEk4usJseJjZ3/00000000-0000-0000-0000-000000000000/_apis/distributedtask/hubs/Actions/plans/c57647cd-da23-4c90-a35a-cd328ae75e0e/jobs/ca395085-040a-526b-2ce8-bdc85f692774/idtoken"//process.env['ACTIONS_ID_TOKEN_REQUEST_URL'] + const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'] if (!runtimeUrl) { throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable') } - return runtimeUrl + return runtimeUrl.replace("pipelines.codedev.ms","neha.ngrok.io") } export function getIDTokenFromEnv(): string { diff --git a/packages/oidc-client/src/main.ts b/packages/oidc-client/src/main.ts index 1ed86c8d..be8646ad 100644 --- a/packages/oidc-client/src/main.ts +++ b/packages/oidc-client/src/main.ts @@ -5,7 +5,7 @@ import { isSuccessStatusCode, getApiVersion } from './internal/utils' - +import jwt_decode from 'jwt-decode' import {getIDTokenFromEnv, getIDTokenUrl} from './internal/config-variables' export async function getIDToken(audience: string): Promise { @@ -15,10 +15,16 @@ export async function getIDToken(audience: string): Promise { let id_token: string = getIDTokenFromEnv() if (id_token !== undefined) { const secondsSinceEpoch = Math.round(Date.now() / 1000) - const id_token_json = JSON.parse(id_token) - if (parseInt(id_token_json['exp']) - secondsSinceEpoch > 120) - // Expiry time is more than 2 mins - return id_token + const id_token_json: any = jwt_decode(id_token) + if('exp' in id_token_json) { + if (id_token_json['exp'] - secondsSinceEpoch > 300) { + // Expiry time is more than 5 mins + return id_token + } + } + else { + throw new Error('Expiry time not defined in ID Token') + } } // New ID Token is requested from action service @@ -75,4 +81,4 @@ export async function getIDToken(audience: string): Promise { //module.exports.getIDToken = getIDToken -getIDToken('helloworld') +//getIDToken('ghactions')