mask response as secret if configured

Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
This commit is contained in:
Frank Jogeleit
2023-12-17 15:41:37 +01:00
parent 25a5a55111
commit 2d6a2f17dc
7 changed files with 124 additions and 10 deletions

View File

@@ -19,6 +19,10 @@ class GithubActions {
core.setOutput(name, output)
}
setSecret(value) {
core.setSecret(value)
}
setFailed(message) {
core.setFailed(message)
}

21
src/handler/mask.js Normal file
View File

@@ -0,0 +1,21 @@
'use strict'
const axios = require('axios');
const { GithubActions } = require('../githubActions');
/**
* @param {GithubActions} actions
*
* @returns {(response: axios.AxiosResponse) => void}
*/
const createMaskHandler = (actions) => (response) => {
let data = response.data
if (typeof data == 'object') {
data = JSON.stringify(data)
}
actions.setSecret(data)
}
module.exports = { createMaskHandler }

16
src/handler/output.js Normal file
View File

@@ -0,0 +1,16 @@
'use strict'
const axios = require('axios');
const { GithubActions } = require('../githubActions');
/**
* @param {GithubActions} actions
*
* @returns {(response: axios.AxiosResponse) => void}
*/
const createOutputHandler = (actions) => (response) => {
actions.setOutput('response', response.data)
actions.setOutput('headers', response.headers)
}
module.exports = { createOutputHandler }

View File

@@ -119,9 +119,6 @@ const request = async({ method, instanceConfig, data, files, file, actions, opti
return null
}
actions.setOutput('response', JSON.stringify(response.data))
actions.setOutput('headers', response.headers)
return response
} catch (error) {
if ((typeof error === 'object') && (error.isAxiosError === true)) {

View File

@@ -5,7 +5,10 @@ const axios = require('axios');
const https = require('https');
const { request, METHOD_POST } = require('./httpClient');
const { GithubActions } = require('./githubActions');
const { createPersistHandler } = require('./handler/persist');
const { createOutputHandler } = require('./handler/output');
const { createMaskHandler } = require('./handler/mask');
let customHeaders = {}
@@ -73,9 +76,16 @@ if (typeof ignoreStatusCodes === 'string' && ignoreStatusCodes.length > 0) {
ignoredCodes = ignoreStatusCodes.split(',').map(statusCode => parseInt(statusCode.trim()))
}
const handler = [];
const actions = new GithubActions();
const handler = [];
if (core.getBooleanInput('maskResponse')) {
handler.push(createMaskHandler(actions))
}
handler.push(createOutputHandler(actions))
if (!!responseFile) {
handler.push(createPersistHandler(responseFile, actions))
}
@@ -89,7 +99,7 @@ const options = {
}
request({ data, method, instanceConfig, files, file, actions, options }).then(response => {
if (typeof response == 'object') {
if (response && typeof response == 'object') {
handler.forEach(h => h(response))
}
})