mirror of https://github.com/rancher/ui.git
200 lines
4.5 KiB
JavaScript
200 lines
4.5 KiB
JavaScript
import Ember from 'ember';
|
|
|
|
// New Format: [hostname][:srcPort][/path][=dstPort]
|
|
// Older format: dstPort:[hostname][/path]
|
|
export function parseTarget(str) {
|
|
var srcPort = null, dstPort = null, hostname = null, path = null;
|
|
str = str.trim();
|
|
|
|
var match;
|
|
if ( match = str.match(/^(\d+)$/) )
|
|
{
|
|
// New Format: just a dstPort
|
|
hostname = null;
|
|
srcPort = null;
|
|
path = null;
|
|
dstPort = parseInt(match[1], 10);
|
|
}
|
|
else if ( str.indexOf('=') === -1 && (match = str.match(/^(\d+):([^\/]+)?(\/.*)?$/)) )
|
|
{
|
|
// Old Format: dstPort[:hostname][:srcPort][/path]
|
|
hostname = match[2] || null;
|
|
if ( hostname )
|
|
{
|
|
var idx = hostname.indexOf(':');
|
|
if ( hostname && idx >= 0 )
|
|
{
|
|
srcPort = parseInt(hostname.substr(idx+1), 10);
|
|
hostname = hostname.substr(0,idx);
|
|
}
|
|
}
|
|
|
|
path = match[3] || null;
|
|
dstPort = parseInt(match[1], 10);
|
|
}
|
|
else if ( match = str.match(/^([^/=:]+)?(:(\d+))?(\/[^=]+)?(=(\d+))?$/) )
|
|
{
|
|
// New Format: [hostname][:srcPort][/path][=dstPort]
|
|
if ( match[1] && match[1].match(/^\d+$/) && !match[2] )
|
|
{
|
|
// It's a port
|
|
hostname = null;
|
|
srcPort = parseInt(match[1], 10) || null;
|
|
}
|
|
else
|
|
{
|
|
hostname = match[1] || null;
|
|
srcPort = parseInt(match[3], 10) || null;
|
|
}
|
|
|
|
dstPort = parseInt(match[6], 10) || null;
|
|
path = match[4] || null;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return Ember.Object.create({
|
|
hostname: hostname,
|
|
srcPort: srcPort,
|
|
dstPort: dstPort,
|
|
path: path
|
|
});
|
|
}
|
|
|
|
export function stringifyTarget(tgt) {
|
|
var srcPort = Ember.get(tgt,'srcPort');
|
|
var dstPort = Ember.get(tgt,'dstPort');
|
|
var hostname = Ember.get(tgt,'hostname');
|
|
var path = Ember.get(tgt,'path');
|
|
|
|
// New Format: [hostname][:srcPort][/path][=dstPort]
|
|
if ( hostname || path || dstPort )
|
|
{
|
|
var str = hostname || '';
|
|
if ( srcPort )
|
|
{
|
|
str += (str ? ':' : '') + srcPort;
|
|
}
|
|
|
|
if ( path )
|
|
{
|
|
str += (path.substr(0,1) === '/' ? '' : '/') + path;
|
|
}
|
|
|
|
if ( dstPort )
|
|
{
|
|
str += (str ? '=' : '') + dstPort;
|
|
}
|
|
|
|
return str;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
export default Ember.Mixin.create({
|
|
actions: {
|
|
addTargetService: function() {
|
|
this.get('targetsArray').pushObject(Ember.Object.create({isService: true, value: null}));
|
|
},
|
|
removeTarget: function(obj) {
|
|
this.get('targetsArray').removeObject(obj);
|
|
},
|
|
|
|
setAdvanced: function() {
|
|
this.set('isAdvanced', true);
|
|
},
|
|
},
|
|
|
|
targetsArray: null,
|
|
initTargets: function(service) {
|
|
this.set('isAdvanced', this.get('editing'));
|
|
|
|
var out = [];
|
|
var existing = null;
|
|
if ( service )
|
|
{
|
|
existing = service.get('consumedServicesWithNames');
|
|
}
|
|
|
|
if ( existing )
|
|
{
|
|
existing.forEach((map) => {
|
|
if ( map.get('ports.length') )
|
|
{
|
|
map.get('ports').forEach((str) => {
|
|
var obj = parseTarget(str);
|
|
if ( obj )
|
|
{
|
|
this.set('isAdvanced', true);
|
|
|
|
obj.setProperties({
|
|
isService: true,
|
|
value: map.get('service.id'),
|
|
});
|
|
|
|
out.pushObject(obj);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
out.pushObject(Ember.Object.create({
|
|
isService: true,
|
|
value: map.get('service.id'),
|
|
}));
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
out.pushObject(Ember.Object.create({
|
|
isService: true,
|
|
value: null
|
|
}));
|
|
}
|
|
|
|
this.set('targetsArray', out);
|
|
},
|
|
|
|
hasMultipleTargets: function() {
|
|
return this.get('targetsArray').filterBy('value').get('length') >= 2;
|
|
}.property('targetsArray.@each.value'),
|
|
|
|
targetResources: function() {
|
|
var out = [];
|
|
this.get('targetsArray').filterBy('isService',true).filterBy('value').map((choice) => {
|
|
var serviceId = Ember.get(choice,'value');
|
|
|
|
var entry = out.filterBy('serviceId', serviceId)[0];
|
|
if ( !entry )
|
|
{
|
|
entry = Ember.Object.create({
|
|
serviceId: serviceId,
|
|
ports: [],
|
|
});
|
|
out.pushObject(entry);
|
|
}
|
|
|
|
var str = stringifyTarget(choice);
|
|
if ( str )
|
|
{
|
|
entry.get('ports').pushObject(str);
|
|
}
|
|
});
|
|
|
|
return out;
|
|
}.property('targetsArray.@each.{isService,value,hostname,path,srcPort,dstPort}'),
|
|
|
|
hasAdvancedSourcePorts: function() {
|
|
return this.get('targetsArray').filterBy('isService',true).filter((target) => {
|
|
return parseInt(target.get('srcPort'),10) > 0;
|
|
}).get('length') > 0;
|
|
}.property('targetsArray.@each.{isService,srcPort}'),
|
|
});
|