Skip to content

Commit

Permalink
Update login script to only login when the JWT expires
Browse files Browse the repository at this point in the history
- Move Login script to external file
  • Loading branch information
Mythicaeda committed Dec 6, 2023
1 parent de528eb commit abd0fd1
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 17 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"url": "https://github.com/NASA-AMMOS/aerie-gateway.git"
},
"scripts": {
"build": "npm run clean && tsc",
"build": "npm run clean && tsc && cp ./src/packages/api-playground/pre-request-script dist/packages/api-playground",
"clean": "rm -rf dist",
"format": "prettier --write ./src",
"lint": "eslint ./src --ext .js,.ts",
Expand Down
18 changes: 2 additions & 16 deletions src/packages/api-playground/api-playground.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,13 @@
import { altairExpress } from 'altair-express-middleware';
import type { Express } from 'express';
import { getEnv } from '../../env.js';
import { readFileSync } from 'fs';

export default (app: Express) => {
const { GQL_API_URL: endpointURL, GQL_API_WS_URL: subscriptionsEndpoint } = getEnv();
const initialQuery = '{ plan { id name } }';
const initialHeaders = { Authorization: 'Bearer {{user}}', 'x-hasura-role': 'viewer' };
const initialPreRequestScript =
`
// Fetch a new token from the Gateway
const res = await altair.helpers.request(
'POST',
'/auth/login', // AUTH ENDPOINT OF THE DEPLOYMENT
{
body: { "username": "<YOUR_AERIE_USERNAME>", "password": "<YOUR_AERIE_PASSWORD>"}, // CREDENTIALS TO LOG IN AS
headers: {"Content-Type": "application/json"}
});
if(res.success) {
const token = res.token;
await altair.helpers.setEnvironment("user", token);
} else {
altair.log(res);
}`;
const initialPreRequestScript = readFileSync('dist/packages/api=p/pre-request-script').toString();
const initialSettings = {
addQueryDepthLimit: 5,
enableExperimental: true,
Expand Down
24 changes: 24 additions & 0 deletions src/packages/api-playground/pre-request-script
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const nowInSeconds = () => Date.now() / 1000;
const tokenExpiry = await altair.storage.get("token_exp") || 0;

if (nowInSeconds() >= Number(tokenExpiry)) {
// Fetch a new token from the Gateway
const res = await altair.helpers.request(
'POST',
'/auth/login', // AUTH ENDPOINT OF THE DEPLOYMENT
{
body: { "username": "<YOUR_AERIE_USERNAME>", "password": "<YOUR_AERIE_PASSWORD>"}, // CREDENTIALS TO LOG IN AS
headers: {"Content-Type": "application/json"}
});
if(res.success) {
const token = res.token;
await altair.storage.set("token", token);
// Set JWT expiry
const atob = await altair.importModule('atob');
const body = JSON.parse(atob(token.split('.')[1]));
await altair.storage.set("token_exp", body.exp);
} else { altair.log(res); }
}
// Set the token in the environment
const token = await altair.storage.get("token");
altair.helpers.setEnvironment('user', token);

0 comments on commit abd0fd1

Please sign in to comment.