ui/app/components/cru-certificate/component.js

67 lines
1.8 KiB
JavaScript

import Component from '@ember/component';
import { get, set, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import ViewNewEdit from 'shared/mixins/view-new-edit';
import OptionallyNamespaced from 'shared/mixins/optionally-namespaced';
import layout from './template';
import { validateCertWeakly, validateKeyWeakly } from 'shared/utils/util';
export default Component.extend(ViewNewEdit, OptionallyNamespaced, {
intl: service(),
layout,
model: null,
titleKey: 'newCertificate.title',
scope: 'project',
namespace: null,
projectType: 'certificate',
namespacedType: 'namespacedCertificate',
isEncrypted: computed('model.key', function() {
var key = get(this, 'model.key') || '';
return key.match(/^Proc-Type: 4,ENCRYPTED$/m) || key.match(/^-----BEGIN ENCRYPTED.* KEY-----$/m);
}),
validate() {
this._super();
var errors = get(this, 'errors') || [];
if ( get(this, 'scope') !== 'project' ) {
errors.pushObjects(get(this, 'namespaceErrors') || []);
}
var intl = get(this, 'intl');
if (get(this, 'isEncrypted')) {
errors.push(intl.t('newCertificate.errors.encrypted'));
}
const key = get(this, 'model.key');
if ( key ) {
if ( !validateKeyWeakly(key) ) {
errors.push(intl.t('newCertificate.errors.key.invalidFormat'));
}
} else {
errors.push(intl.t('newCertificate.errors.key.required'));
}
const certs = get(this, 'model.certs');
if ( certs ) {
if ( !validateCertWeakly(certs) ) {
errors.push(intl.t('newCertificate.errors.cert.invalidFormat'));
}
} else {
errors.push(intl.t('newCertificate.errors.cert.required'));
}
set(this, 'errors', errors);
return get(this, 'errors.length') === 0;
},
});