fix(core.gbapp): #387 adding /setupSecurity multiple tokens. Refresh token fix. @othonlima.
This commit is contained in:
parent
be0abaf6c7
commit
b0163b6096
3 changed files with 48 additions and 36 deletions
|
@ -602,28 +602,22 @@ export class GBVMService extends GBService {
|
||||||
return new Promise(resolve => setTimeout(resolve, ms));
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
}
|
}
|
||||||
|
|
||||||
const tokenStops = {};
|
const ensureTokens = async () => {
|
||||||
|
const tokens = this.tokens ? this.tokens.split(',') : [];
|
||||||
// Setups refresh token mechanism.
|
|
||||||
const tokens = this.tokens ? this.tokens.split(',') : [];
|
for(i in tokens) {
|
||||||
const interval = 60000 * 60;
|
|
||||||
|
|
||||||
for(i in tokens) {
|
|
||||||
|
|
||||||
const token = tokens[i];
|
const token = tokens[i];
|
||||||
tokenStops[token] = false;
|
const expiresOn = new Date(global[i + "_expiresOn"]);
|
||||||
|
|
||||||
const waitAndRefreshToken = async (token) => {
|
if (expiresOn.getTime() > new Date().getTime()) {
|
||||||
await timeout(interval);
|
|
||||||
global[i] = await sys.getCustomToken({pid, token});
|
{token, expiresOn} = await sys.getCustomToken({pid, token});
|
||||||
if (!tokenStops[token]) {
|
|
||||||
await waitAndRefreshToken(token);
|
global[i] = token;
|
||||||
}
|
global[i + "_expiresOn"]= expiresOn;
|
||||||
};
|
}
|
||||||
(async (token) => {
|
}
|
||||||
await waitAndRefreshToken(token);
|
});
|
||||||
})(token);
|
|
||||||
}
|
|
||||||
|
|
||||||
try{
|
try{
|
||||||
${code}
|
${code}
|
||||||
|
@ -962,10 +956,15 @@ export class GBVMService extends GBService {
|
||||||
const tokens = await min.core['findParam'](min.instance, strFind);
|
const tokens = await min.core['findParam'](min.instance, strFind);
|
||||||
let tokensList = [];
|
let tokensList = [];
|
||||||
await CollectionUtil.asyncForEach(tokens, async t => {
|
await CollectionUtil.asyncForEach(tokens, async t => {
|
||||||
const token = t.replace(strFind, '');
|
const tokenName = t.replace(strFind, '');
|
||||||
tokensList.push(token);
|
tokensList.push(tokenName);
|
||||||
try {
|
try {
|
||||||
variables[token] = await sys.getCustomToken({pid, token});
|
let {token, expiresOn} = await sys.getCustomToken({pid, tokenName});
|
||||||
|
|
||||||
|
variables[token] = token;
|
||||||
|
variables[token + '_expiresOn'] = expiresOn;
|
||||||
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
variables[t] = 'ERROR: Configure /setupSecurity before using token variables.';
|
variables[t] = 'ERROR: Configure /setupSecurity before using token variables.';
|
||||||
}
|
}
|
||||||
|
|
|
@ -374,7 +374,8 @@ export class KeywordsExpressions {
|
||||||
if (__calls < __totalCalls && __pageMode === "auto") {
|
if (__calls < __totalCalls && __pageMode === "auto") {
|
||||||
|
|
||||||
// Performs GET request using the constructed URL
|
// Performs GET request using the constructed URL
|
||||||
|
|
||||||
|
await ensureTokens();
|
||||||
__data = await sys.getHttp ({pid: pid, file: __url, addressOrHeaders: headers, httpUsername, httpPs});
|
__data = await sys.getHttp ({pid: pid, file: __url, addressOrHeaders: headers, httpUsername, httpPs});
|
||||||
|
|
||||||
// Updates current variable handlers.
|
// Updates current variable handlers.
|
||||||
|
@ -669,7 +670,10 @@ export class KeywordsExpressions {
|
||||||
|
|
||||||
// Handles the GET http version.
|
// Handles the GET http version.
|
||||||
else {
|
else {
|
||||||
return `${$1} = await sys.getHttp ({pid: pid, file: ${$2}, addressOrHeaders: headers, httpUsername, httpPs})`;
|
return `
|
||||||
|
await ensureTokens();
|
||||||
|
${$1} = await sys.getHttp ({pid: pid, file: ${$2}, addressOrHeaders: headers, httpUsername, httpPs})
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
@ -824,14 +828,20 @@ export class KeywordsExpressions {
|
||||||
|
|
||||||
const args = $2.split(',');
|
const args = $2.split(',');
|
||||||
|
|
||||||
return `${$1} = await sys.postByHttp ({pid: pid, url:${args[0]}, data:${args[1]}, headers})`;
|
return `
|
||||||
|
await ensureTokens();
|
||||||
|
${$1} = await sys.postByHttp ({pid: pid, url:${args[0]}, data:${args[1]}, headers})
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
keywords[i++] = [
|
keywords[i++] = [
|
||||||
/^\s*((?:[a-z]+.?)(?:(?:\w+).)(?:\w+)*)\s*=\s*put\s*(.*),\s*(.*)/gim,
|
/^\s*((?:[a-z]+.?)(?:(?:\w+).)(?:\w+)*)\s*=\s*put\s*(.*),\s*(.*)/gim,
|
||||||
($0, $1, $2, $3) => {
|
($0, $1, $2, $3) => {
|
||||||
return `${$1} = await sys.putByHttp ({pid: pid, url:${$2}, data:${$3}, headers})`;
|
return `
|
||||||
|
await ensureTokens();
|
||||||
|
${$1} = await sys.putByHttp ({pid: pid, url:${$2}, data:${$3}, headers})
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -1670,19 +1670,22 @@ export class SystemKeywords {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getCustomToken({ pid, token }): Promise<string> {
|
public async getCustomToken({ pid, token: tokenName }) {
|
||||||
|
|
||||||
const { min } = await DialogKeywords.getProcessInfo(pid);
|
const { min } = await DialogKeywords.getProcessInfo(pid);
|
||||||
GBLogEx.info(min, `GET TOKEN: ${token}`);
|
GBLogEx.info(min, `GET TOKEN: ${tokenName}`);
|
||||||
|
|
||||||
return await (min.adminService as any)['acquireElevatedToken']
|
const token = await (min.adminService as any)['acquireElevatedToken']
|
||||||
(min.instance.instanceId, false,
|
(min.instance.instanceId, false,
|
||||||
token,
|
tokenName,
|
||||||
min.core.getParam(min.instance, `${token} Client ID`, null),
|
min.core.getParam(min.instance, `${tokenName} Client ID`, null),
|
||||||
min.core.getParam(min.instance, `${token} Client Secret`, null),
|
min.core.getParam(min.instance, `${tokenName} Client Secret`, null),
|
||||||
min.core.getParam(min.instance, `${token} Host`, null),
|
min.core.getParam(min.instance, `${tokenName} Host`, null),
|
||||||
min.core.getParam(min.instance, `${token} Tenant`, null)
|
min.core.getParam(min.instance, `${tokenName} Tenant`, null)
|
||||||
);
|
);
|
||||||
|
const expiresOn = await min.adminService.getValue(min.instanceId, `${tokenName}expiresOn`);
|
||||||
|
|
||||||
|
return { token, expiresOn };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2586,7 +2589,7 @@ export class SystemKeywords {
|
||||||
array = [];
|
array = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!baseUrl){
|
if (!baseUrl) {
|
||||||
let obj = await GBDeployer.internalGetDriveClient(min);
|
let obj = await GBDeployer.internalGetDriveClient(min);
|
||||||
baseUrl = obj.baseUrl;
|
baseUrl = obj.baseUrl;
|
||||||
client = obj.client;
|
client = obj.client;
|
||||||
|
|
Loading…
Add table
Reference in a new issue