Skip to content

Commit ca08448

Browse files
authored
coco/remove http trigger url show when bind custom domain (#891)
1 parent 35e828a commit ca08448

2 files changed

Lines changed: 46 additions & 9 deletions

File tree

src/lib/deploy/deploy-by-tpl.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ async function deployTrigger(serviceName, functionName, triggerName, triggerDefi
8282
}
8383
}
8484

85-
async function deployTriggers(serviceName, functionName, events) {
85+
async function deployTriggers(serviceName, functionName, events, tplPath) {
8686
if (_.isEmpty(events)) { return; }
8787

8888
let localTriggerNames = Object.keys(events);
@@ -95,7 +95,8 @@ async function deployTriggers(serviceName, functionName, events) {
9595
for (const [triggerName, triggerDefinition] of Object.entries(events)) {
9696
console.log(`\t\tWaiting for ${yellow(triggerDefinition.Type)} trigger ${triggerName} to be deployed...`);
9797
await deployTrigger(serviceName, functionName, triggerName, triggerDefinition);
98-
await displayTriggerInfo(serviceName, functionName, triggerName, triggerDefinition.Type, triggerDefinition.Properties, '\t\t');
98+
const tpl = await getTpl(tplPath);
99+
await displayTriggerInfo(serviceName, functionName, triggerName, triggerDefinition.Type, triggerDefinition.Properties, '\t\t', tpl);
99100
console.log(green(`\t\ttrigger ${triggerName} deploy success`));
100101
}
101102
}
@@ -124,7 +125,7 @@ async function deployFunction({ baseDir, nasConfig, vpcConfig, useNas, assumeYes
124125
}, onlyConfig, tplPath, useNas, assumeYes);
125126

126127
if (!skipTrigger) {
127-
await deployTriggers(serviceName, functionName, functionRes.Events);
128+
await deployTriggers(serviceName, functionName, functionRes.Events, tplPath);
128129
}
129130

130131
return rs;

src/lib/trigger.js

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
'use strict';
22

3-
const getProfile = require('./profile').getProfile;
4-
const { getFcClient } = require('./client');
5-
const debug = require('debug')('fun:trigger');
63
const _ = require('lodash');
4+
75
const ram = require('./ram');
86
const util = require('util');
7+
const debug = require('debug')('fun:trigger');
8+
const getProfile = require('./profile').getProfile;
9+
910
const { red, yellow } = require('colors');
11+
const { getFcClient } = require('./client');
12+
const { iterateResources } = require('./definition');
1013

1114
const triggerTypeMapping = {
1215
'Datahub': 'datahub',
@@ -421,7 +424,36 @@ async function makeTrigger({
421424
return trigger;
422425
}
423426

424-
async function displayTriggerInfo(serviceName, functionName, triggerName, triggerType, triggerProperties, wrap) {
427+
function findFunctionsInCustomDomain(tpl) {
428+
const functions = [];
429+
430+
iterateResources(tpl.Resources, 'Aliyun::Serverless::CustomDomain', (domainLogicId, domainDefinition) => {
431+
const properties = (domainDefinition.Properties || {});
432+
const routeConfig = properties.RouteConfig || {};
433+
const routes = routeConfig.Routes || routeConfig.routes;
434+
435+
if (_.isEmpty(routes)) { return; }
436+
437+
for (const route of Object.entries(routes)) {
438+
const serviceName = route[1].ServiceName || route[1].serviceName;
439+
const functionName = route[1].FunctionName || route[1].functionName;
440+
functions.push({
441+
serviceName,
442+
functionName
443+
});
444+
}
445+
});
446+
447+
return functions;
448+
}
449+
450+
function functionBindCustomDomain(serviceName, functionName, tpl) {
451+
const functions = findFunctionsInCustomDomain(tpl);
452+
const bindFunction = _.find(functions, { serviceName, functionName });
453+
return !_.isEmpty(bindFunction);
454+
}
455+
456+
async function displayTriggerInfo(serviceName, functionName, triggerName, triggerType, triggerProperties, wrap, tpl) {
425457
if (triggerType === 'HTTP' || triggerType === 'http') {
426458

427459
const profile = await getProfile();
@@ -434,9 +466,13 @@ async function displayTriggerInfo(serviceName, functionName, triggerName, trigge
434466
if (triggerName) {
435467
console.log(`${resolveWrap}triggerName: ${yellow(triggerName)}`);
436468
}
469+
437470
console.log(`${resolveWrap}methods: ${yellow(triggerProperties.Methods || triggerProperties.methods)}`);
438-
console.log(`${resolveWrap}url: ` + yellow(`https://${accountId}.${region}.fc.aliyuncs.com/2016-08-15/proxy/${serviceName}/${functionName}/`));
439-
console.log(red(`${resolveWrap}Http Trigger will forcefully add a 'Content-Disposition: attachment' field to the response header, which cannot be overwritten \n${resolveWrap}and will cause the response to be downloaded as an attachment in the browser. This issue can be avoided by using CustomDomain.\n`));
471+
472+
if (!functionBindCustomDomain(serviceName, functionName, tpl)) {
473+
console.log(`${resolveWrap}url: ` + yellow(`https://${accountId}.${region}.fc.aliyuncs.com/2016-08-15/proxy/${serviceName}/${functionName}/`));
474+
console.log(red(`${resolveWrap}Http Trigger will forcefully add a 'Content-Disposition: attachment' field to the response header, which cannot be overwritten \n${resolveWrap}and will cause the response to be downloaded as an attachment in the browser. This issue can be avoided by using CustomDomain.\n`));
475+
}
440476
}
441477
}
442478

0 commit comments

Comments
 (0)