ui/lib/istio/addon/components/traffic-policy-tls/component.js

104 lines
2.9 KiB
JavaScript

import { alias } from '@ember/object/computed';
import { get, set, observer } from '@ember/object';
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import layout from './template';
const NONE = 'NONE';
const ISTIO_MUTUAL = 'ISTIO_MUTUAL';
const DISABLE = 'DISABLE';
const SIMPLE = 'SIMPLE';
const MUTUAL = 'MUTUAL';
export default Component.extend({
intl: service(),
layout,
tlsMode: NONE,
trafficPolicy: null,
errors: null,
model: alias('trafficPolicy.tls'),
init() {
this._super(...arguments);
this.initTls();
},
actions: {
setSubjectAltNames(subjectAltNames) {
set(this, 'model.subjectAltNames', subjectAltNames);
}
},
tlsModeDidChange: observer('tlsMode', function() {
const tlsMode = get(this, 'tlsMode');
const trafficPolicy = get(this, 'trafficPolicy');
if ( tlsMode === NONE ) {
delete trafficPolicy['tls'];
} else if ( tlsMode === ISTIO_MUTUAL ) {
set(this, 'model', { mode: ISTIO_MUTUAL });
} else if ( tlsMode === DISABLE ) {
set(this, 'model', { mode: DISABLE });
} else if ( tlsMode === SIMPLE ) {
const out = { mode: SIMPLE };
if ( get(this, 'model.caCertificates') ) {
set(out, 'caCertificates', get(this, 'model.caCertificates'))
}
if ( get(this, 'model.sni') ) {
set(out, 'sni', get(this, 'model.sni'))
}
if ( get(this, 'model.subjectAltNames.length') > 0 ) {
set(out, 'subjectAltNames', get(this, 'model.subjectAltNames'))
}
set(this, 'model', out);
} else if ( tlsMode === MUTUAL ) {
const out = { mode: MUTUAL };
if ( get(this, 'model.clientCertificate') ) {
set(out, 'clientCertificate', get(this, 'model.clientCertificate'))
}
if ( get(this, 'model.privateKey') ) {
set(out, 'privateKey', get(this, 'model.privateKey'))
}
if ( get(this, 'model.caCertificates') ) {
set(out, 'caCertificates', get(this, 'model.caCertificates'))
}
if ( get(this, 'model.sni') ) {
set(out, 'sni', get(this, 'model.sni'))
}
if ( get(this, 'model.subjectAltNames.length') > 0 ) {
set(out, 'subjectAltNames', get(this, 'model.subjectAltNames'))
}
set(this, 'model', out);
}
}),
validate: observer('tlsMode', 'model.clientCertificate', 'model.privateKey', function() {
const errors = [];
if ( get(this, 'tlsMode') === MUTUAL ) {
if ( !get(this, 'model.clientCertificate') ) {
errors.push(get(this, 'intl').t('cruDestinationRule.tls.clientCertificate.error'));
}
if ( !get(this, 'model.privateKey') ) {
errors.push(get(this, 'intl').t('cruDestinationRule.tls.privateKey.error'));
}
}
set(this, 'errors', errors);
}),
initTls() {
if ( !get(this, 'model') || !get(this, 'model.mode') ) {
set(this, 'tlsMode', NONE);
} else {
set(this, 'tlsMode', get(this, 'model.mode'));
}
},
});