Merge pull request #441 from grubersjoe/gql-auth

Improve GQL introspection request
This commit is contained in:
Anoop M D
2023-10-08 04:17:00 +05:30
committed by GitHub
6 changed files with 58 additions and 305 deletions

View File

@@ -469,7 +469,7 @@ const registerNetworkIpc = (mainWindow) => {
});
});
ipcMain.handle('fetch-gql-schema', async (event, endpoint, environment, request, collectionVariables) => {
ipcMain.handle('fetch-gql-schema', async (event, endpoint, environment, request, collection) => {
try {
const envVars = getEnvVars(environment);
const preparedRequest = prepareGqlIntrospectionRequest(endpoint, envVars, request);
@@ -483,7 +483,8 @@ const registerNetworkIpc = (mainWindow) => {
});
}
interpolateVars(preparedRequest, envVars, collectionVariables);
const processEnvVars = getProcessEnvVars(collection.uid);
interpolateVars(preparedRequest, envVars, collection.collectionVariables, processEnvVars);
const response = await axios(preparedRequest);

View File

@@ -1,16 +1,12 @@
const Mustache = require('mustache');
const Handlebars = require('handlebars');
const { getIntrospectionQuery } = require('graphql');
const { get } = require('lodash');
// override the default escape function to prevent escaping
Mustache.escape = function (value) {
return value;
};
const prepareGqlIntrospectionRequest = (endpoint, envVars, request) => {
if (endpoint && endpoint.length) {
endpoint = Mustache.render(endpoint, envVars);
endpoint = Handlebars.compile(endpoint, { noEscape: true })(envVars);
}
const introspectionQuery = getIntrospectionQuery();
const queryParams = {
query: introspectionQuery
@@ -20,6 +16,7 @@ const prepareGqlIntrospectionRequest = (endpoint, envVars, request) => {
method: 'POST',
url: endpoint,
headers: {
...mapHeaders(request.headers),
Accept: 'application/json',
'Content-Type': 'application/json'
},
@@ -42,4 +39,10 @@ const prepareGqlIntrospectionRequest = (endpoint, envVars, request) => {
return axiosRequest;
};
const mapHeaders = (headers) => {
const entries = headers.filter((header) => header.enabled).map(({ name, value }) => [name, value]);
return Object.fromEntries(entries);
};
module.exports = prepareGqlIntrospectionRequest;