@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
158 lines (152 loc) • 5.44 kB
text/typescript
import { StateParams } from '@uirouter/angularjs';
import { module } from 'angular';
import {
Application,
APPLICATION_STATE_PROVIDER,
ApplicationModelBuilder,
ApplicationStateProvider,
} from 'core/application';
import { CloudProviderRegistry } from 'core/cloudProvider';
import { INestedState, STATE_CONFIG_PROVIDER, StateConfigProvider } from 'core/navigation';
import { SecurityGroupDetails } from './SecurityGroupDetails';
import { SecurityGroups } from './SecurityGroups';
import { filterModelConfig } from './filter/SecurityGroupFilterModel';
import { SecurityGroupFilters } from './filter/SecurityGroupFilters';
import { FirewallLabels } from './label';
import { SecurityGroupReader } from './securityGroupReader.service';
export const SECURITY_GROUP_STATES = 'spinnaker.core.securityGroup.states';
module(SECURITY_GROUP_STATES, [APPLICATION_STATE_PROVIDER, STATE_CONFIG_PROVIDER]).config([
'applicationStateProvider',
'stateConfigProvider',
(applicationStateProvider: ApplicationStateProvider, stateConfigProvider: StateConfigProvider) => {
const firewallDetails: INestedState = {
name: 'firewallDetails',
url: '/firewallDetails/:provider/:accountId/:region/:vpcId/:name',
params: {
vpcId: {
value: null,
squash: true,
},
},
views: {
'detail@../insight': {
component: SecurityGroupDetails,
$type: 'react',
},
},
resolve: {
accountId: ['$stateParams', ($stateParams: StateParams) => $stateParams.accountId],
resolvedSecurityGroup: [
'$stateParams',
($stateParams: StateParams) => {
return {
name: $stateParams.name,
accountId: $stateParams.accountId,
provider: $stateParams.provider,
region: $stateParams.region,
vpcId: $stateParams.vpcId,
};
},
],
},
data: {
pageTitleDetails: {
title: `${FirewallLabels.get('Firewall')} Details`,
nameParam: 'name',
accountParam: 'accountId',
regionParam: 'region',
},
history: {
type: 'securityGroups',
},
},
};
const securityGroupSummary: INestedState = {
url: `/firewalls?${stateConfigProvider.paramsToQuery(filterModelConfig)}`,
name: 'firewalls',
views: {
nav: { component: SecurityGroupFilters, $type: 'react' },
master: {
component: SecurityGroups,
$type: 'react',
},
},
params: stateConfigProvider.buildDynamicParams(filterModelConfig),
data: {
pageTitleSection: {
title: FirewallLabels.get('Firewalls'),
},
},
};
const standaloneFirewall: INestedState = {
name: 'firewallDetails',
url: '/firewallDetails/:provider/:accountId/:region/:vpcId/:name',
params: {
vpcId: {
value: null,
squash: true,
},
},
views: {
'main@': {
templateUrl: require('../presentation/standalone.view.html'),
controllerProvider: [
'$stateParams',
($stateParams: StateParams) => {
return CloudProviderRegistry.getValue($stateParams.provider, 'securityGroup.detailsController');
},
],
controllerAs: 'ctrl',
},
},
resolve: {
resolvedSecurityGroup: [
'$stateParams',
($stateParams: StateParams) => {
return {
name: $stateParams.name,
accountId: $stateParams.accountId,
provider: $stateParams.provider,
region: $stateParams.region,
vpcId: $stateParams.vpcId,
};
},
],
app: [
'$stateParams',
'securityGroupReader',
($stateParams: StateParams, securityGroupReader: SecurityGroupReader): PromiseLike<Application> => {
// we need the application to have a firewall index (so rules get attached and linked properly)
// and its name should just be the name of the firewall (so cloning works as expected)
return securityGroupReader.loadSecurityGroups().then((securityGroupsIndex) => {
const application: Application = ApplicationModelBuilder.createStandaloneApplication($stateParams.name);
application['securityGroupsIndex'] = securityGroupsIndex; // TODO: refactor the securityGroupsIndex out
return application;
});
},
],
},
data: {
pageTitleDetails: {
title: `${FirewallLabels.get('Firewall')} Details`,
nameParam: 'name',
accountParam: 'accountId',
regionParam: 'region',
},
history: {
type: 'securityGroups',
},
},
};
applicationStateProvider.addInsightState(securityGroupSummary);
applicationStateProvider.addInsightDetailState(firewallDetails);
stateConfigProvider.addToRootState(standaloneFirewall);
stateConfigProvider.addRewriteRule(
'/applications/{application}/securityGroups',
'/applications/{application}/firewalls',
);
stateConfigProvider.addRewriteRule(/(.+?)\/securityGroupDetails\/(.*)/, ($match: string[]) => {
return `${$match[1]}/firewallDetails/${$match[2]}`;
});
},
]);