'use-strict'; import { remote, OpenDialogOptions } from 'electron'; import path from 'path'; import BaseComponent from '../../components/base'; import * as CertificateUtil from '../../utils/certificate-util'; import * as DomainUtil from '../../utils/domain-util'; import * as t from '../../utils/translation-util'; const { dialog } = remote; export default class AddCertificate extends BaseComponent { // TODO: TypeScript - Here props should be object type props: any; _certFile: string; $addCertificate: Element | null; addCertificateButton: Element | null; serverUrl: HTMLInputElement | null; constructor(props: any) { super(); this.props = props; this._certFile = ''; } template(): string { return `
${t.__('Organization URL')}
${t.__('Certificate file')}
`; } init(): void { this.$addCertificate = this.generateNodeFromTemplate(this.template()); this.props.$root.append(this.$addCertificate); this.addCertificateButton = this.$addCertificate.querySelector('#add-certificate-button'); this.serverUrl = this.$addCertificate.querySelectorAll('input.setting-input-value')[0] as HTMLInputElement; this.initListeners(); } validateAndAdd(): void { const certificate = this._certFile; const serverUrl = this.serverUrl.value; if (certificate !== '' && serverUrl !== '') { const server = encodeURIComponent(DomainUtil.formatUrl(serverUrl)); const fileName = path.basename(certificate); const copy = CertificateUtil.copyCertificate(server, certificate, fileName); if (!copy) { return; } CertificateUtil.setCertificate(server, fileName); dialog.showMessageBox({ title: 'Success', message: 'Certificate saved!' }); this.serverUrl.value = ''; } else { dialog.showErrorBox('Error', `Please, ${serverUrl === '' ? 'Enter an Organization URL' : 'Choose certificate file'}`); } } async addHandler(): Promise { const showDialogOptions: OpenDialogOptions = { title: 'Select file', properties: ['openFile'], filters: [{ name: 'crt, pem', extensions: ['crt', 'pem'] }] }; const { filePaths, canceled } = await dialog.showOpenDialog(showDialogOptions); if (!canceled) { this._certFile = filePaths[0] || ''; this.validateAndAdd(); } } initListeners(): void { this.addCertificateButton.addEventListener('click', () => { this.addHandler(); }); this.serverUrl.addEventListener('keypress', event => { if (event.key === 'Enter') { this.addHandler(); } }); } }