myrtex-mf-signer 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/esm2020/lib/components/certificate-select/certificate-select.component.mjs +22 -0
- package/esm2020/lib/components/sign-modal/sign-modal.component.mjs +148 -0
- package/esm2020/lib/models/certificate.model.mjs +2 -0
- package/esm2020/lib/models/index.mjs +5 -0
- package/esm2020/lib/models/internal/verify.cert.model.mjs +2 -0
- package/esm2020/lib/models/internal/verify.cert.response.model.mjs +2 -0
- package/esm2020/lib/models/sign-request.model.mjs +2 -0
- package/esm2020/lib/models/sign-validate-response.model.mjs +2 -0
- package/esm2020/lib/models/signed-result.model.mjs +2 -0
- package/esm2020/lib/myrtex-signer.module.mjs +75 -0
- package/esm2020/lib/providers/crypto.provider.mjs +99 -0
- package/esm2020/lib/providers/cryptojinn.provider.mjs +47 -0
- package/esm2020/lib/providers/cryptots.provider.mjs +56 -0
- package/esm2020/lib/providers/empty.provider.mjs +19 -0
- package/esm2020/lib/providers/interfaces/isign.provider.mjs +2 -0
- package/esm2020/lib/providers/signprovider.factory.mjs +35 -0
- package/esm2020/lib/services/certificate.adjuster.mjs +66 -0
- package/esm2020/lib/services/crypto.api.service.mjs +28 -0
- package/esm2020/lib/services/crypto.base.service.mjs +15 -0
- package/esm2020/lib/services/crypto.service.mjs +116 -0
- package/esm2020/lib/services/cryptopro/crypto.pro.async.service.mjs +30 -0
- package/esm2020/lib/services/cryptopro/crypto.pro.base.service.mjs +47 -0
- package/esm2020/lib/services/cryptopro/crypto.pro.ts.service.mjs +50 -0
- package/esm2020/lib/services/download.service.mjs +36 -0
- package/esm2020/lib/services/public.sign.service.mjs +44 -0
- package/esm2020/myrtex-mf-signer.mjs +5 -0
- package/esm2020/public-api.mjs +12 -0
- package/fesm2015/myrtex-mf-signer.mjs +895 -0
- package/fesm2015/myrtex-mf-signer.mjs.map +1 -0
- package/fesm2020/myrtex-mf-signer.mjs +871 -0
- package/fesm2020/myrtex-mf-signer.mjs.map +1 -0
- package/lib/components/certificate-select/certificate-select.component.d.ts +16 -0
- package/lib/components/sign-modal/sign-modal.component.d.ts +46 -0
- package/lib/models/certificate.model.d.ts +18 -0
- package/lib/models/index.d.ts +4 -0
- package/lib/models/internal/verify.cert.model.d.ts +5 -0
- package/lib/models/internal/verify.cert.response.model.d.ts +4 -0
- package/lib/models/sign-request.model.d.ts +17 -0
- package/lib/models/sign-validate-response.model.d.ts +4 -0
- package/lib/models/signed-result.model.d.ts +23 -0
- package/lib/myrtex-signer.module.d.ts +13 -0
- package/lib/providers/crypto.provider.d.ts +17 -0
- package/lib/providers/cryptojinn.provider.d.ts +15 -0
- package/lib/providers/cryptots.provider.d.ts +15 -0
- package/lib/providers/empty.provider.d.ts +8 -0
- package/lib/providers/interfaces/isign.provider.d.ts +4 -0
- package/lib/providers/signprovider.factory.d.ts +17 -0
- package/lib/services/certificate.adjuster.d.ts +15 -0
- package/lib/services/crypto.api.service.d.ts +19 -0
- package/lib/services/crypto.base.service.d.ts +6 -0
- package/lib/services/crypto.service.d.ts +27 -0
- package/lib/services/cryptopro/crypto.pro.async.service.d.ts +7 -0
- package/lib/services/cryptopro/crypto.pro.base.service.d.ts +13 -0
- package/lib/services/cryptopro/crypto.pro.ts.service.d.ts +8 -0
- package/lib/services/download.service.d.ts +15 -0
- package/lib/services/public.sign.service.d.ts +12 -0
- package/myrtex-mf-signer.d.ts +5 -0
- package/package.json +39 -0
- package/public-api.d.ts +4 -0
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# MyrtexSigner
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project myrtex-signer` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project myrtex-signer`.
|
|
8
|
+
> Note: Don't forget to add `--project myrtex-signer` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build myrtex-signer` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build myrtex-signer`, go to the dist folder `cd dist/myrtex-signer` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test myrtex-signer` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
25
|
+
|
|
26
|
+
ng g m button --project=myrtex-mf-signer
|
|
27
|
+
|
|
28
|
+
# Команда создания компонента
|
|
29
|
+
ng g c button --project=myrtex-mf-signer
|
|
30
|
+
|
|
31
|
+
# Команда сборки проекта
|
|
32
|
+
ng build myrtex-mf-signer
|
|
33
|
+
|
|
34
|
+
# Команда публикации проекта
|
|
35
|
+
npm publish
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { SimpleModalComponent } from 'ngx-simple-modal';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class CertificateSelectComponent extends SimpleModalComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.certificates = [];
|
|
9
|
+
this.result = {};
|
|
10
|
+
}
|
|
11
|
+
ok(cert) {
|
|
12
|
+
this.result = { selected: cert };
|
|
13
|
+
this.close();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
CertificateSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CertificateSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
17
|
+
CertificateSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CertificateSelectComponent, selector: "lib-certificate-select", usesInheritance: true, ngImport: i0, template: "<div class=\"modal-content open accent-head certificate\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title\" [innerHTML]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442'\">\r\n </div>\r\n <span class='close close-click' (click)=\"close()\">\r\n <svg width='14' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'>\r\n <path d='M13 1L1 13M1 1l12 12' stroke='#3A3A3A' stroke-width='1.5' stroke-linecap='round'\r\n stroke-linejoin='round' />\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"modal-body text-center\">\r\n\r\n <div class=\"modal-body-other\">\r\n <div *ngFor=\"let cert of certificates\"> \r\n <div class=\"modal-body-info\" *ngIf=\"!cert.isExpired\">\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text\">\r\n \u0412\u043B\u0430\u0434\u0435\u043B\u0435\u0446:\r\n </span>\r\n <span class=\"text\">\r\n {{cert.cn}}<br/>\r\n {{cert.fio}}<span *ngIf=\"cert.post\">, {{cert.post}}</span>\r\n </span>\r\n </div>\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text\">\r\n \u0421\u0440\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F:\r\n </span>\r\n <span class=\"text\">\r\n {{cert.validFromDate}} - {{cert.validToDate}}\r\n </span>\r\n </div>\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text hash\">\r\n {{cert.thumbprint}} {{cert.isExpired ? \"(\u0438\u0441\u0442\u0435\u043A)\" : \"\"}}\r\n </span>\r\n </div>\r\n <button\r\n (click)=\"ok(cert)\"\r\n [disabled]=\"cert.isExpired\"\r\n class=\"btn btn-md\">\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u043E\u0434\u043F\u0438\u0441\u044C</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n </div>\r\n</div>", styles: [":host{display:contents}:host textarea{width:100%;height:600px;border:0}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CertificateSelectComponent, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
args: [{ selector: 'lib-certificate-select', template: "<div class=\"modal-content open accent-head certificate\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title\" [innerHTML]=\"'\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442'\">\r\n </div>\r\n <span class='close close-click' (click)=\"close()\">\r\n <svg width='14' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'>\r\n <path d='M13 1L1 13M1 1l12 12' stroke='#3A3A3A' stroke-width='1.5' stroke-linecap='round'\r\n stroke-linejoin='round' />\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"modal-body text-center\">\r\n\r\n <div class=\"modal-body-other\">\r\n <div *ngFor=\"let cert of certificates\"> \r\n <div class=\"modal-body-info\" *ngIf=\"!cert.isExpired\">\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text\">\r\n \u0412\u043B\u0430\u0434\u0435\u043B\u0435\u0446:\r\n </span>\r\n <span class=\"text\">\r\n {{cert.cn}}<br/>\r\n {{cert.fio}}<span *ngIf=\"cert.post\">, {{cert.post}}</span>\r\n </span>\r\n </div>\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text\">\r\n \u0421\u0440\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F:\r\n </span>\r\n <span class=\"text\">\r\n {{cert.validFromDate}} - {{cert.validToDate}}\r\n </span>\r\n </div>\r\n <div class=\"modal-body-info__item\">\r\n <span class=\"text hash\">\r\n {{cert.thumbprint}} {{cert.isExpired ? \"(\u0438\u0441\u0442\u0435\u043A)\" : \"\"}}\r\n </span>\r\n </div>\r\n <button\r\n (click)=\"ok(cert)\"\r\n [disabled]=\"cert.isExpired\"\r\n class=\"btn btn-md\">\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u043E\u0434\u043F\u0438\u0441\u044C</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n </div>\r\n</div>", styles: [":host{display:contents}:host textarea{width:100%;height:600px;border:0}\n"] }]
|
|
21
|
+
}], ctorParameters: function () { return []; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1zaWduZXIvc3JjL2xpYi9jb21wb25lbnRzL2NlcnRpZmljYXRlLXNlbGVjdC9jZXJ0aWZpY2F0ZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LW1mLXNpZ25lci9zcmMvbGliL2NvbXBvbmVudHMvY2VydGlmaWNhdGUtc2VsZWN0L2NlcnRpZmljYXRlLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFnQnhELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxvQkFBMEU7SUFLeEg7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhWLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUlwQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsRUFBRSxDQUFDLElBQXNCO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQzs7d0hBYlUsMEJBQTBCOzRHQUExQiwwQkFBMEIscUZDakJ2Qyxna0VBZ0RNOzRGRC9CTywwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpbXBsZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnbmd4LXNpbXBsZS1tb2RhbCc7XHJcbmltcG9ydCB7IENlcnRpZmljYXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDZXJ0aWZpY2F0ZVNlbGVjdE1vZGVsIHtcclxuICBjZXJ0aWZpY2F0ZXM6IENlcnRpZmljYXRlTW9kZWxbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDZXJ0aWZpY2F0ZVNlbGVjdFJlc3VsdE1vZGVsIHtcclxuICBzZWxlY3RlZD86IENlcnRpZmljYXRlTW9kZWw7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNlcnRpZmljYXRlLXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NlcnRpZmljYXRlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2VydGlmaWNhdGUtc2VsZWN0LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBTaW1wbGVNb2RhbENvbXBvbmVudDxDZXJ0aWZpY2F0ZVNlbGVjdE1vZGVsLCBDZXJ0aWZpY2F0ZVNlbGVjdFJlc3VsdE1vZGVsPlxyXG4gIGltcGxlbWVudHMgQ2VydGlmaWNhdGVTZWxlY3RNb2RlbCB7XHJcblxyXG4gIGNlcnRpZmljYXRlczogQ2VydGlmaWNhdGVNb2RlbFtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMucmVzdWx0ID0ge307XHJcbiAgfVxyXG5cclxuICBvayhjZXJ0OiBDZXJ0aWZpY2F0ZU1vZGVsKSB7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHtzZWxlY3RlZDogY2VydH07XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IG9wZW4gYWNjZW50LWhlYWQgY2VydGlmaWNhdGVcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBbaW5uZXJIVE1MXT1cIifQktGL0LHQtdGA0LjRgtC1INGB0LXRgNGC0LjRhNC40LrQsNGCJ1wiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz0nY2xvc2UgY2xvc2UtY2xpY2snIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgIDxzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPlxyXG4gICAgICAgIDxwYXRoIGQ9J00xMyAxTDEgMTNNMSAxbDEyIDEyJyBzdHJva2U9JyMzQTNBM0EnIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49J3JvdW5kJyAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSB0ZXh0LWNlbnRlclwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5LW90aGVyXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNlcnQgb2YgY2VydGlmaWNhdGVzXCI+IFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5LWluZm9cIiAqbmdJZj1cIiFjZXJ0LmlzRXhwaXJlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHktaW5mb19faXRlbVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHRcIj5cclxuICAgICAgICAgICAgICDQktC70LDQtNC10LvQtdGGOlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIHt7Y2VydC5jbn19PGJyLz5cclxuICAgICAgICAgICAgICB7e2NlcnQuZmlvfX08c3BhbiAqbmdJZj1cImNlcnQucG9zdFwiPiwge3tjZXJ0LnBvc3R9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keS1pbmZvX19pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgINCh0YDQvtC6INC00LXQudGB0YLQstC40Y86XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAge3tjZXJ0LnZhbGlkRnJvbURhdGV9fSAtIHt7Y2VydC52YWxpZFRvRGF0ZX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHktaW5mb19faXRlbVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQgaGFzaFwiPlxyXG4gICAgICAgICAgICAgIHt7Y2VydC50aHVtYnByaW50fX0ge3tjZXJ0LmlzRXhwaXJlZCA/IFwiKNC40YHRgtC10LopXCIgOiBcIlwifX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvayhjZXJ0KVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjZXJ0LmlzRXhwaXJlZFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1tZFwiPtCh0L7Qt9C00LDRgtGMINC/0L7QtNC/0LjRgdGMPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { DialogColor, DialogType } from 'myrtex-ui-composite';
|
|
3
|
+
import { SimpleModalComponent } from 'ngx-simple-modal';
|
|
4
|
+
import { Base64 } from 'js-base64';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../providers/signprovider.factory";
|
|
7
|
+
import * as i2 from "../../services/download.service";
|
|
8
|
+
import * as i3 from "myrtex-ui-composite";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
export class SignModalComponent extends SimpleModalComponent {
|
|
11
|
+
constructor(signProviderFactory, downloadService, alertService) {
|
|
12
|
+
super();
|
|
13
|
+
this.signProviderFactory = signProviderFactory;
|
|
14
|
+
this.downloadService = downloadService;
|
|
15
|
+
this.alertService = alertService;
|
|
16
|
+
this.title = '';
|
|
17
|
+
this.okLabel = '';
|
|
18
|
+
this.cancelLabel = '';
|
|
19
|
+
this.provider = 'empty';
|
|
20
|
+
this.signType = 'xml';
|
|
21
|
+
this.xmlToSign = '';
|
|
22
|
+
this.pdfToSign = '';
|
|
23
|
+
this.downloadingPdf = false;
|
|
24
|
+
this.result = { result: false };
|
|
25
|
+
}
|
|
26
|
+
get disabled() {
|
|
27
|
+
// todo как можно дизеблить кнопу
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
get pdfViewUrl() {
|
|
31
|
+
return this.pdfUrl ?
|
|
32
|
+
`/signer/pdfjs/web/viewer.html?file=${encodeURIComponent(this.pdfUrl)}` : '';
|
|
33
|
+
}
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
this.downloadXml();
|
|
36
|
+
this.downloadPdf();
|
|
37
|
+
}
|
|
38
|
+
ok() {
|
|
39
|
+
if (!this.signType) {
|
|
40
|
+
this.signType = 'xml';
|
|
41
|
+
}
|
|
42
|
+
let signData = this.xmlToSign;
|
|
43
|
+
switch (this.signType) {
|
|
44
|
+
case 'xml':
|
|
45
|
+
signData = Base64.encode(this.xmlToSign);
|
|
46
|
+
break;
|
|
47
|
+
case 'pdf':
|
|
48
|
+
signData = this.pdfToSign;
|
|
49
|
+
break;
|
|
50
|
+
case 'xmlts':
|
|
51
|
+
signData = this.xmlToSign;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
this.signProviderFactory.create(this.provider)
|
|
55
|
+
.sign(signData, this.withLog, {
|
|
56
|
+
skipServerCheck: this.skipServerCheck,
|
|
57
|
+
checkFio: this.checkFio,
|
|
58
|
+
checkOgrn: this.checkOgrn,
|
|
59
|
+
checkOrganization: this.checkOrganization,
|
|
60
|
+
checkInn: this.checkInn
|
|
61
|
+
})
|
|
62
|
+
.then((ok) => {
|
|
63
|
+
this.processResult(ok);
|
|
64
|
+
}).catch((error) => {
|
|
65
|
+
this.processError(error);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
cancel() {
|
|
69
|
+
this.close();
|
|
70
|
+
}
|
|
71
|
+
processResult(signResult) {
|
|
72
|
+
if (signResult.success) {
|
|
73
|
+
this.result = { model: signResult, result: true };
|
|
74
|
+
this.close();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.alertService.showDialog({
|
|
78
|
+
title: 'Ошибка проверки подписи',
|
|
79
|
+
message: 'Подпись не валидна',
|
|
80
|
+
color: DialogColor.red,
|
|
81
|
+
type: DialogType.alert,
|
|
82
|
+
okCallback: (ok) => {
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
processError(error) {
|
|
88
|
+
if (this.withLog) {
|
|
89
|
+
console.error(error);
|
|
90
|
+
}
|
|
91
|
+
this.alertService.showDialog({
|
|
92
|
+
title: 'Ошибка проверки подписи',
|
|
93
|
+
message: JSON.stringify(error),
|
|
94
|
+
color: DialogColor.red,
|
|
95
|
+
type: DialogType.alert,
|
|
96
|
+
okCallback: (ok) => {
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
downloadXml() {
|
|
101
|
+
if (!this.xmlUrl) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (this.withLog) {
|
|
105
|
+
console.log('Downloading xml');
|
|
106
|
+
}
|
|
107
|
+
this.downloadService.xml(this.xmlUrl).subscribe(result => {
|
|
108
|
+
if (this.withLog) {
|
|
109
|
+
console.log('xmlToSign = ', result);
|
|
110
|
+
}
|
|
111
|
+
this.xmlToSign = result;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
downloadPdf() {
|
|
115
|
+
if (!this.pdfUrl) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (this.withLog) {
|
|
119
|
+
console.log('Downloading pdf');
|
|
120
|
+
}
|
|
121
|
+
this.downloadingPdf = true;
|
|
122
|
+
this.downloadService.pdf(this.pdfUrl)
|
|
123
|
+
.subscribe(result => {
|
|
124
|
+
this.downloadingPdf = false;
|
|
125
|
+
// todo подумать, как правильно читать файл
|
|
126
|
+
// const blob = new Blob([result], {type: 'application/pdf'});
|
|
127
|
+
const reader = new FileReader();
|
|
128
|
+
reader.readAsDataURL(result);
|
|
129
|
+
reader.onloadend = () => {
|
|
130
|
+
let base64data = reader.result;
|
|
131
|
+
base64data = base64data.replace('data:application/pdf;base64,', '');
|
|
132
|
+
if (this.withLog) {
|
|
133
|
+
console.log('pdfToSign = ', base64data);
|
|
134
|
+
}
|
|
135
|
+
this.pdfToSign = base64data;
|
|
136
|
+
};
|
|
137
|
+
}, () => {
|
|
138
|
+
this.downloadingPdf = false;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
SignModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SignModalComponent, deps: [{ token: i1.SignProviderFactory }, { token: i2.DownloadService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
143
|
+
SignModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SignModalComponent, selector: "lib-sign-modal", usesInheritance: true, ngImport: i0, template: "<div class=\"modal-content accent-head\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title uppercase\">\r\n <h4 class=\"ng-binding\">{{title || '\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430'}}</h4>\r\n </div>\r\n <span class=\"close close-click\" (click)=\"close()\">\r\n <svg width=\"14\" height=\"14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13 1L1 13M1 1l12 12\" stroke=\"#3A3A3A\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <div class=\"widget\">\r\n <my-tabs>\r\n <app-tab tabTitle=\"\u0412\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\" *ngIf=\"pdfUrl\">\r\n <pre *ngIf=\"downloadingPdf\">\r\n \u041F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435, \u0438\u0434\u0435\u0442 \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\r\n </pre>\r\n <iframe *ngIf=\"!downloadingPdf\" [src]=\"pdfViewUrl | safeurl\"\r\n title=\"webviewer\" frameborder=\"0\" width=\"100%\" height=\"800\"></iframe>\r\n </app-tab>\r\n <app-tab tabTitle=\"\u041F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u043C\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\" *ngIf=\"xmlUrl\">\r\n <pre [innerText]=\"xmlToSign\"></pre>\r\n </app-tab>\r\n </my-tabs>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <div *ngIf=\"pdfUrl || xmlUrl\"\r\n class=\"modal-footer-item\">\r\n <a *ngIf=\"pdfUrl\"\r\n class=\"modal-footer-item__link\"\r\n target=\"_blank\"\r\n [href]=\"pdfUrl\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18 21.25H6C5.30964 21.25 4.75 20.6904 4.75 20V4C4.75 3.30964 5.30964 2.75 6 2.75H13.1893L19.25 8.81066V20C19.25 20.6904 18.6904 21.25 18 21.25Z\"\r\n stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span>\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442</span>\r\n </a>\r\n <a *ngIf=\"xmlUrl\"\r\n class=\"modal-footer-item__link\"\r\n target=\"_blank\"\r\n [href]=\"xmlUrl\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6 16L2 12L6 8\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M18 16L22 12L18 8\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n <path d=\"M7.56689 19.1782L15.5669 5.32182\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span>\u0421\u043A\u0430\u0447\u0430\u0442\u044C XML-\u0434\u0430\u043D\u043D\u044B\u0435</span>\r\n </a>\r\n </div>\r\n <div class=\"modal-footer-item\">\r\n <button\r\n class=\"mrx-btn mrx-btn-secondary mrx-btn-md wpx-120 mr-3\"\r\n (click)=\"cancel()\"\r\n >\r\n <div class=\"mrx-btn-label\">{{cancelLabel || '\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C'}}</div>\r\n </button>\r\n <button\r\n class=\"mrx-btn mrx-btn-primary mrx-btn-md wpx-120\"\r\n [disabled]=\"disabled\"\r\n (click)=\"ok()\"\r\n >\r\n <div class=\"mrx-btn-label\">{{okLabel || '\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u0442\u044C'}}</div>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}:host pre{width:100%;height:600px;border:0;text-align:left;overflow-y:scroll}.modal-footer{justify-content:space-between;align-items:center}.modal-footer-item__link{display:inline-flex;align-items:center;font-family:PT Sans,sans-serif;font-weight:700;font-size:14px;line-height:160%;color:var(--Main1);margin-right:16px}.modal-footer-item__link svg{margin-right:4px}.modal-body iframe{height:600px}pre{height:600px;overflow:scroll}\n"], components: [{ type: i3.TabsComponent, selector: "my-tabs" }, { type: i3.TabComponent, selector: "app-tab", inputs: ["tabTitle", "active"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "safeurl": i3.SafeUrlPipe } });
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SignModalComponent, decorators: [{
|
|
145
|
+
type: Component,
|
|
146
|
+
args: [{ selector: 'lib-sign-modal', template: "<div class=\"modal-content accent-head\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title uppercase\">\r\n <h4 class=\"ng-binding\">{{title || '\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430'}}</h4>\r\n </div>\r\n <span class=\"close close-click\" (click)=\"close()\">\r\n <svg width=\"14\" height=\"14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M13 1L1 13M1 1l12 12\" stroke=\"#3A3A3A\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"modal-body text-center\">\r\n <div class=\"widget\">\r\n <my-tabs>\r\n <app-tab tabTitle=\"\u0412\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\" *ngIf=\"pdfUrl\">\r\n <pre *ngIf=\"downloadingPdf\">\r\n \u041F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435, \u0438\u0434\u0435\u0442 \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\r\n </pre>\r\n <iframe *ngIf=\"!downloadingPdf\" [src]=\"pdfViewUrl | safeurl\"\r\n title=\"webviewer\" frameborder=\"0\" width=\"100%\" height=\"800\"></iframe>\r\n </app-tab>\r\n <app-tab tabTitle=\"\u041F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u043C\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\" *ngIf=\"xmlUrl\">\r\n <pre [innerText]=\"xmlToSign\"></pre>\r\n </app-tab>\r\n </my-tabs>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <div *ngIf=\"pdfUrl || xmlUrl\"\r\n class=\"modal-footer-item\">\r\n <a *ngIf=\"pdfUrl\"\r\n class=\"modal-footer-item__link\"\r\n target=\"_blank\"\r\n [href]=\"pdfUrl\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M18 21.25H6C5.30964 21.25 4.75 20.6904 4.75 20V4C4.75 3.30964 5.30964 2.75 6 2.75H13.1893L19.25 8.81066V20C19.25 20.6904 18.6904 21.25 18 21.25Z\"\r\n stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n <span>\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442</span>\r\n </a>\r\n <a *ngIf=\"xmlUrl\"\r\n class=\"modal-footer-item__link\"\r\n target=\"_blank\"\r\n [href]=\"xmlUrl\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6 16L2 12L6 8\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M18 16L22 12L18 8\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n <path d=\"M7.56689 19.1782L15.5669 5.32182\" stroke=\"#282828\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span>\u0421\u043A\u0430\u0447\u0430\u0442\u044C XML-\u0434\u0430\u043D\u043D\u044B\u0435</span>\r\n </a>\r\n </div>\r\n <div class=\"modal-footer-item\">\r\n <button\r\n class=\"mrx-btn mrx-btn-secondary mrx-btn-md wpx-120 mr-3\"\r\n (click)=\"cancel()\"\r\n >\r\n <div class=\"mrx-btn-label\">{{cancelLabel || '\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C'}}</div>\r\n </button>\r\n <button\r\n class=\"mrx-btn mrx-btn-primary mrx-btn-md wpx-120\"\r\n [disabled]=\"disabled\"\r\n (click)=\"ok()\"\r\n >\r\n <div class=\"mrx-btn-label\">{{okLabel || '\u041F\u043E\u0434\u043F\u0438\u0441\u0430\u0442\u044C'}}</div>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:contents}:host pre{width:100%;height:600px;border:0;text-align:left;overflow-y:scroll}.modal-footer{justify-content:space-between;align-items:center}.modal-footer-item__link{display:inline-flex;align-items:center;font-family:PT Sans,sans-serif;font-weight:700;font-size:14px;line-height:160%;color:var(--Main1);margin-right:16px}.modal-footer-item__link svg{margin-right:4px}.modal-body iframe{height:600px}pre{height:600px;overflow:scroll}\n"] }]
|
|
147
|
+
}], ctorParameters: function () { return [{ type: i1.SignProviderFactory }, { type: i2.DownloadService }, { type: i3.AlertService }]; } });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvY29tcG9uZW50cy9zaWduLW1vZGFsL3NpZ24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LW1mLXNpZ25lci9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1tb2RhbC9zaWduLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFnQixXQUFXLEVBQUUsVUFBVSxFQUFhLE1BQU0scUJBQXFCLENBQUM7QUFDdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBa0JuQyxNQUFNLE9BQU8sa0JBQ1gsU0FBUSxvQkFBMkQ7SUF1Qm5FLFlBQW9CLG1CQUF3QyxFQUNsRCxlQUFnQyxFQUNoQyxZQUEwQjtRQUNsQyxLQUFLLEVBQUUsQ0FBQztRQUhVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBdkI3QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBS2pCLGFBQVEsR0FBcUIsT0FBTyxDQUFDO1FBQ3JDLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFRdEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFNckIsSUFBSSxDQUFDLE1BQU0s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O1lBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO2dCQUN6QyxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFcEUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7WUFDOUIsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0hBbEtVLGtCQUFrQjtvR0FBbEIsa0JBQWtCLDZFQ3JCL0IsbzdIQTJFQTs0RkR0RGEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIERpYWxvZ0NvbG9yLCBEaWFsb2dUeXBlLCBVdGlsaXRpZXMgfSBmcm9tICdteXJ0ZXgtdWktY29tcG9zaXRlJztcclxuaW1wb3J0IHsgU2ltcGxlTW9kYWxDb21wb25lbnQgfSBmcm9tICduZ3gtc2ltcGxlLW1vZGFsJztcclxuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnanMtYmFzZTY0JztcclxuaW1wb3J0IHsgU2lnblByb3ZpZGVyVHlwZSwgU2lnblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTaWduZWRSZXN1bHRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zaWduZWQtcmVzdWx0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2lnblJlcXVlc3RNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zaWduLXJlcXVlc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb3dubG9hZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnblByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9zaWducHJvdmlkZXIuZmFjdG9yeSc7XHJcbmltcG9ydCB7IE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lZFJlc3BvbnNlTW9kZWwge1xyXG4gIHJlc3VsdDogYm9vbGVhbjtcclxuICBtb2RlbD86IFNpZ25lZFJlc3VsdE1vZGVsO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zaWduLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2lnbi1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2lnbi1tb2RhbC5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZ25Nb2RhbENvbXBvbmVudFxyXG4gIGV4dGVuZHMgU2ltcGxlTW9kYWxDb21wb25lbnQ8U2lnblJlcXVlc3RNb2RlbCwgU2lnbmVkUmVzcG9uc2VNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIFNpZ25SZXF1ZXN0TW9kZWwge1xyXG5cclxuICBwdWJsaWMgdGl0bGUgPSAnJztcclxuICBwdWJsaWMgb2tMYWJlbCA9ICcnO1xyXG4gIHB1YmxpYyBjYW5jZWxMYWJlbCA9ICcnO1xyXG5cclxuICBwdWJsaWMgeG1sVXJsPzogc3RyaW5nO1xyXG4gIHB1YmxpYyBwZGZVcmw/OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBwcm92aWRlcjogU2lnblByb3ZpZGVyVHlwZSA9ICdlbXB0eSc7XHJcbiAgcHVibGljIHNpZ25UeXBlOiBTaWduVHlwZSA9ICd4bWwnO1xyXG5cclxuICBwdWJsaWMgeG1sVG9TaWduID0gJyc7XHJcbiAgcHVibGljIHBkZlRvU2lnbiA9ICcnO1xyXG4gIHB1YmxpYyB3aXRoTG9nPzogYm9vbGVhbjtcclxuICBwdWJsaWMgc2tpcFNlcnZlckNoZWNrPzogYm9vbGVhbjtcclxuICBwdWJsaWMgY2hlY2tGaW8/OiBzdHJpbmc7XHJcbiAgcHVibGljIGNoZWNrT2dybj86IHN0cmluZztcclxuICBwdWJsaWMgY2hlY2tPcmdhbml6YXRpb24/OiBzdHJpbmc7XHJcbiAgcHVibGljIGNoZWNrSW5uPzogc3RyaW5nO1xyXG5cclxuICBkb3dubG9hZGluZ1BkZiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNpZ25Qcm92aWRlckZhY3Rvcnk6IFNpZ25Qcm92aWRlckZhY3RvcnksXHJcbiAgICBwcml2YXRlIGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMucmVzdWx0ID0geyByZXN1bHQ6IGZhbHNlIH07XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZWQoKSB7XHJcbiAgICAvLyB0b2RvINC60LDQuiDQvNC+0LbQvdC+INC00LjQt9C10LHQu9C40YLRjCDQutC90L7Qv9GDXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgcGRmVmlld1VybCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucGRmVXJsID9cclxuICAgICAgYC9zaWduZXIvcGRmanMvd2ViL3ZpZXdlci5odG1sP2ZpbGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5wZGZVcmwpfWAgOiAnJztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kb3dubG9hZFhtbCgpO1xyXG4gICAgdGhpcy5kb3dubG9hZFBkZigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9rKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5zaWduVHlwZSkge1xyXG4gICAgICB0aGlzLnNpZ25UeXBlID0gJ3htbCc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNpZ25EYXRhID0gdGhpcy54bWxUb1NpZ247XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnNpZ25UeXBlKSB7XHJcbiAgICBjYXNlICd4bWwnOlxyXG4gICAgICBzaWduRGF0YSA9IEJhc2U2NC5lbmNvZGUodGhpcy54bWxUb1NpZ24pO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgJ3BkZic6XHJcbiAgICAgIHNpZ25EYXRhID0gdGhpcy5wZGZUb1NpZ247XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAneG1sdHMnOlxyXG4gICAgICBzaWduRGF0YSA9IHRoaXMueG1sVG9TaWduO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNpZ25Qcm92aWRlckZhY3RvcnkuY3JlYXRlKHRoaXMucHJvdmlkZXIpXHJcbiAgICAgIC5zaWduKHNpZ25EYXRhLCB0aGlzLndpdGhMb2csIHtcclxuICAgICAgICBza2lwU2VydmVyQ2hlY2s6IHRoaXMuc2tpcFNlcnZlckNoZWNrLFxyXG4gICAgICAgIGNoZWNrRmlvOiB0aGlzLmNoZWNrRmlvLFxyXG4gICAgICAgIGNoZWNrT2dybjogdGhpcy5jaGVja09ncm4sXHJcbiAgICAgICAgY2hlY2tPcmdhbml6YXRpb246IHRoaXMuY2hlY2tPcmdhbml6YXRpb24sXHJcbiAgICAgICAgY2hlY2tJbm46IHRoaXMuY2hlY2tJbm5cclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKG9rOiBTaWduZWRSZXN1bHRNb2RlbCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdChvayk7XHJcbiAgICAgIH0pLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzRXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NSZXN1bHQoc2lnblJlc3VsdDogU2lnbmVkUmVzdWx0TW9kZWwpOiB2b2lkIHtcclxuICAgIGlmIChzaWduUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZXN1bHQgPSB7IG1vZGVsOiBzaWduUmVzdWx0LCByZXN1bHQ6IHRydWUgfTtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyh7XHJcbiAgICAgICAgdGl0bGU6ICfQntGI0LjQsdC60LAg0L/RgNC+0LLQtdGA0LrQuCDQv9C+0LTQv9C40YHQuCcsXHJcbiAgICAgICAgbWVzc2FnZTogJ9Cf0L7QtNC/0LjRgdGMINC90LUg0LLQsNC70LjQtNC90LAnLFxyXG4gICAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci5yZWQsXHJcbiAgICAgICAgdHlwZTogRGlhbG9nVHlwZS5hbGVydCxcclxuICAgICAgICBva0NhbGxiYWNrOiAob2spID0+IHtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2l0aExvZykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6ICfQntGI0LjQsdC60LAg0L/RgNC+0LLQtdGA0LrQuCDQv9C+0LTQv9C40YHQuCcsXHJcbiAgICAgIG1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KGVycm9yKSxcclxuICAgICAgY29sb3I6IERpYWxvZ0NvbG9yLnJlZCxcclxuICAgICAgdHlwZTogRGlhbG9nVHlwZS5hbGVydCxcclxuICAgICAgb2tDYWxsYmFjazogKG9rKSA9PiB7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb3dubG9hZFhtbCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy54bWxVcmwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpdGhMb2cpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Rvd25sb2FkaW5nIHhtbCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG93bmxvYWRTZXJ2aWNlLnhtbCh0aGlzLnhtbFVybCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmICh0aGlzLndpdGhMb2cpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygneG1sVG9TaWduID0gJywgcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnhtbFRvU2lnbiA9IHJlc3VsdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb3dubG9hZFBkZigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wZGZVcmwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpdGhMb2cpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Rvd25sb2FkaW5nIHBkZicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG93bmxvYWRpbmdQZGYgPSB0cnVlO1xyXG4gICAgdGhpcy5kb3dubG9hZFNlcnZpY2UucGRmKHRoaXMucGRmVXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZGluZ1BkZiA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRvZG8g0L/QvtC00YPQvNCw0YLRjCwg0LrQsNC6INC/0YDQsNCy0LjQu9GM0L3QviDRh9C40YLQsNGC0Ywg0YTQsNC50LtcclxuICAgICAgICAvLyBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlc3VsdF0sIHt0eXBlOiAnYXBwbGljYXRpb24vcGRmJ30pO1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwocmVzdWx0KTtcclxuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGJhc2U2NGRhdGEgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcclxuICAgICAgICAgIGJhc2U2NGRhdGEgPSBiYXNlNjRkYXRhLnJlcGxhY2UoJ2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwnLCAnJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMud2l0aExvZykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncGRmVG9TaWduID0gJywgYmFzZTY0ZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBkZlRvU2lnbiA9IGJhc2U2NGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZGluZ1BkZiA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgYWNjZW50LWhlYWRcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGUgdXBwZXJjYXNlXCI+XHJcbiAgICAgIDxoNCBjbGFzcz1cIm5nLWJpbmRpbmdcIj57e3RpdGxlIHx8ICfQn9C+0LTQv9C40YHQsNC90LjQtSDQtNC+0LrRg9C80LXQvdGC0LAnfX08L2g0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3BhbiBjbGFzcz1cImNsb3NlIGNsb3NlLWNsaWNrXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMUwxIDEzTTEgMWwxMiAxMlwiIHN0cm9rZT1cIiMzQTNBM0FcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHRleHQtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0XCI+XHJcbiAgICAgIDxteS10YWJzPlxyXG4gICAgICAgIDxhcHAtdGFiIHRhYlRpdGxlPVwi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC00L7QutGD0LzQtdC90YLQsFwiICpuZ0lmPVwicGRmVXJsXCI+XHJcbiAgICAgICAgICA8cHJlICpuZ0lmPVwiZG93bmxvYWRpbmdQZGZcIj5cclxuICAgICAgICAgICAg0J/QvtC00L7QttC00LjRgtC1LCDQuNC00LXRgiDRhNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwXHJcbiAgICAgICAgICA8L3ByZT5cclxuICAgICAgICAgIDxpZnJhbWUgKm5nSWY9XCIhZG93bmxvYWRpbmdQZGZcIiBbc3JjXT1cInBkZlZpZXdVcmwgfCBzYWZldXJsXCJcclxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ3ZWJ2aWV3ZXJcIiBmcmFtZWJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MDBcIj48L2lmcmFtZT5cclxuICAgICAgICA8L2FwcC10YWI+XHJcbiAgICAgICAgPGFwcC10YWIgdGFiVGl0bGU9XCLQn9C+0LTQv9C40YHRi9Cy0LDQtdC80YvQtSDQtNCw0L3QvdGL0LVcIiAqbmdJZj1cInhtbFVybFwiPlxyXG4gICAgICAgICAgPHByZSBbaW5uZXJUZXh0XT1cInhtbFRvU2lnblwiPjwvcHJlPlxyXG4gICAgICAgIDwvYXBwLXRhYj5cclxuICAgICAgPC9teS10YWJzPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJwZGZVcmwgfHwgeG1sVXJsXCJcclxuICAgICAgICAgY2xhc3M9XCJtb2RhbC1mb290ZXItaXRlbVwiPlxyXG4gICAgICA8YSAqbmdJZj1cInBkZlVybFwiXHJcbiAgICAgICAgIGNsYXNzPVwibW9kYWwtZm9vdGVyLWl0ZW1fX2xpbmtcIlxyXG4gICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICBbaHJlZl09XCJwZGZVcmxcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTggMjEuMjVINkM1LjMwOTY0IDIxLjI1IDQuNzUgMjAuNjkwNCA0Ljc1IDIwVjRDNC43NSAzLjMwOTY0IDUuMzA5NjQgMi43NSA2IDIuNzVIMTMuMTg5M0wxOS4yNSA4LjgxMDY2VjIwQzE5LjI1IDIwLjY5MDQgMTguNjkwNCAyMS4yNSAxOCAyMS4yNVpcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzcGFuPtCh0LrQsNGH0LDRgtGMINC00L7QutGD0LzQtdC90YI8L3NwYW4+XHJcbiAgICAgIDwvYT5cclxuICAgICAgPGEgKm5nSWY9XCJ4bWxVcmxcIlxyXG4gICAgICAgICBjbGFzcz1cIm1vZGFsLWZvb3Rlci1pdGVtX19saW5rXCJcclxuICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgW2hyZWZdPVwieG1sVXJsXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTYgMTZMMiAxMkw2IDhcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xOCAxNkwyMiAxMkwxOCA4XCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTcuNTY2ODkgMTkuMTc4MkwxNS41NjY5IDUuMzIxODJcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8c3Bhbj7QodC60LDRh9Cw0YLRjCBYTUwt0LTQsNC90L3Ri9C1PC9zcGFuPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXItaXRlbVwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cIm1yeC1idG4gbXJ4LWJ0bi1zZWNvbmRhcnkgbXJ4LWJ0bi1tZCB3cHgtMTIwIG1yLTNcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtcngtYnRuLWxhYmVsXCI+e3tjYW5jZWxMYWJlbCB8fCAn0J7RgtC80LXQvdC40YLRjCd9fTwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJtcngtYnRuIG1yeC1idG4tcHJpbWFyeSBtcngtYnRuLW1kIHdweC0xMjBcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgIChjbGljayk9XCJvaygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtcngtYnRuLWxhYmVsXCI+e3tva0xhYmVsIHx8ICfQn9C+0LTQv9C40YHQsNGC0YwnfX08L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvbW9kZWxzL2NlcnRpZmljYXRlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlTW9kZWwge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNuOiBzdHJpbmc7XHJcbiAgZmlvOiBzdHJpbmc7XHJcbiAgcG9zdDogc3RyaW5nO1xyXG4gIGNlcnRpZmljYXRlOiBhbnk7XHJcbiAgaW5uOiBzdHJpbmc7XHJcbiAgb2dybjogc3RyaW5nO1xyXG4gIG9yZ2FuaXphdGlvbjogc3RyaW5nO1xyXG4gIHNlcmlhbE51bWJlcjogc3RyaW5nO1xyXG4gIGlzc3Vlck5hbWU6IHN0cmluZztcclxuICBzdWJqZWN0TmFtZTogc3RyaW5nO1xyXG4gIHZhbGlkRnJvbURhdGU6IHN0cmluZztcclxuICB2YWxpZFRvRGF0ZTogc3RyaW5nO1xyXG4gIHRodW1icHJpbnQ6IHN0cmluZztcclxuICBpc0V4cGlyZWQ6IGJvb2xlYW47XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './sign-request.model';
|
|
2
|
+
export * from './certificate.model';
|
|
3
|
+
export * from './sign-validate-response.model';
|
|
4
|
+
export * from './signed-result.model';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NpZ24tcmVxdWVzdC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY2VydGlmaWNhdGUubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NpZ24tdmFsaWRhdGUtcmVzcG9uc2UubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NpZ25lZC1yZXN1bHQubW9kZWwnO1xyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmNlcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvbW9kZWxzL2ludGVybmFsL3ZlcmlmeS5jZXJ0Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFZlcmlmeUNlcnRNb2RlbCB7XHJcbiAgZGF0YTogc3RyaW5nO1xyXG4gIHNpZ25hdHVyZTogc3RyaW5nO1xyXG4gIGRldGFjaGVkOiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmNlcnQucmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvbW9kZWxzL2ludGVybmFsL3ZlcmlmeS5jZXJ0LnJlc3BvbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFZlcmlmeUNlcnRSZXNwb25zZU1vZGVsIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGVycm9yOiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1yZXF1ZXN0Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LW1mLXNpZ25lci9zcmMvbGliL21vZGVscy9zaWduLXJlcXVlc3QubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFNpZ25Qcm92aWRlclR5cGUgPSAnZW1wdHknIHwgJ2NyeXB0b3RzJyB8ICdjcnlwdG8nIHwgJ2NyeXB0b2ppbm4nO1xyXG5leHBvcnQgdHlwZSBTaWduVHlwZSA9ICd4bWwnIHwgJ3htbHRzJyB8ICdwZGYnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaWduUmVxdWVzdE1vZGVsIHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBva0xhYmVsPzogc3RyaW5nO1xyXG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xyXG4gIHhtbFVybD86IHN0cmluZztcclxuICBwZGZVcmw/OiBzdHJpbmc7XHJcbiAgcHJvdmlkZXI6IFNpZ25Qcm92aWRlclR5cGU7XHJcbiAgc2lnblR5cGU/OiBTaWduVHlwZTtcclxuICB3aXRoTG9nPzogYm9vbGVhbjtcclxuICBza2lwU2VydmVyQ2hlY2s/OiBib29sZWFuO1xyXG4gIGNoZWNrRmlvPzogc3RyaW5nO1xyXG4gIGNoZWNrT2dybj86IHN0cmluZztcclxuICBjaGVja09yZ2FuaXphdGlvbj86IHN0cmluZztcclxuICBjaGVja0lubj86IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi12YWxpZGF0ZS1yZXNwb25zZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1zaWduZXIvc3JjL2xpYi9tb2RlbHMvc2lnbi12YWxpZGF0ZS1yZXNwb25zZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTaWduVmFsaWRhdGVSZXNwb25zZSB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICB2YWxpZGF0ZVJlc3VsdDogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVkLXJlc3VsdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1zaWduZXIvc3JjL2xpYi9tb2RlbHMvc2lnbmVkLXJlc3VsdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VydGlmaWNhdGVNb2RlbCB9IGZyb20gJy4vY2VydGlmaWNhdGUubW9kZWwnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaWduZWRSZXN1bHRNb2RlbCB7XHJcblxyXG4gIC8qKlxyXG4gICAqINCf0L7QtNC/0LjRgdGL0LLQsNC10LzRi9C1INC00LDQvdC90YvQtVxyXG4gICAqL1xyXG4gIGRhdGE/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqINCf0L7QtNC/0LjRgdGMXHJcbiAgICovXHJcbiAgc2lnbmVkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiDQntC/0LXRgNCw0YbQuNGPINGD0YHQv9C10YjQvdC+INC/0YDQvtCy0LXRgNC10L3QsFxyXG4gICAqL1xyXG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiDQoNC10LfRg9C70YzRgtCw0YIg0LLQsNC70LjQtNCw0YbQuNC4INCyINGC0LXQutGB0YLQvtCy0L7QvCDQstC40LTQtVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlUmVzdWx0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiDQlNCw0L3QvdGL0LUg0L4g0YHQtdGA0YLQuNGE0LjQutCw0YLQtVxyXG4gICAqL1xyXG4gIGNlcnRpZmljYXRlPzogQ2VydGlmaWNhdGVNb2RlbCB8IHVuZGVmaW5lZDtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { SignModalComponent } from './components/sign-modal/sign-modal.component';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { HttpClientModule } from '@angular/common/http';
|
|
5
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { MyrtexUiCompositeModule } from 'myrtex-ui-composite';
|
|
7
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
8
|
+
import { SignService } from './services/public.sign.service';
|
|
9
|
+
import { DownloadService } from './services/download.service';
|
|
10
|
+
import { CertificateSelectComponent } from './components/certificate-select/certificate-select.component';
|
|
11
|
+
import { CryptoApiService } from './services/crypto.api.service';
|
|
12
|
+
import { SignProviderFactory } from './providers/signprovider.factory';
|
|
13
|
+
import { CryptoProvider } from './providers/crypto.provider';
|
|
14
|
+
import { CryptoJinnProvider } from './providers/cryptojinn.provider';
|
|
15
|
+
import { CryptoTsProvider } from './providers/cryptots.provider';
|
|
16
|
+
import { EmptyProvider } from './providers/empty.provider';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
export class MyrtexSignerModule {
|
|
19
|
+
}
|
|
20
|
+
MyrtexSignerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MyrtexSignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
21
|
+
MyrtexSignerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MyrtexSignerModule, declarations: [SignModalComponent,
|
|
22
|
+
CertificateSelectComponent], imports: [CommonModule,
|
|
23
|
+
FormsModule,
|
|
24
|
+
ReactiveFormsModule,
|
|
25
|
+
HttpClientModule,
|
|
26
|
+
NgSelectModule,
|
|
27
|
+
MyrtexUiCompositeModule], exports: [SignModalComponent] });
|
|
28
|
+
MyrtexSignerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MyrtexSignerModule, providers: [
|
|
29
|
+
SignProviderFactory,
|
|
30
|
+
CryptoProvider,
|
|
31
|
+
CryptoJinnProvider,
|
|
32
|
+
CryptoTsProvider,
|
|
33
|
+
EmptyProvider,
|
|
34
|
+
CryptoApiService,
|
|
35
|
+
SignService,
|
|
36
|
+
DownloadService
|
|
37
|
+
], imports: [[
|
|
38
|
+
CommonModule,
|
|
39
|
+
FormsModule,
|
|
40
|
+
ReactiveFormsModule,
|
|
41
|
+
HttpClientModule,
|
|
42
|
+
NgSelectModule,
|
|
43
|
+
MyrtexUiCompositeModule
|
|
44
|
+
]] });
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MyrtexSignerModule, decorators: [{
|
|
46
|
+
type: NgModule,
|
|
47
|
+
args: [{
|
|
48
|
+
declarations: [
|
|
49
|
+
SignModalComponent,
|
|
50
|
+
CertificateSelectComponent
|
|
51
|
+
],
|
|
52
|
+
imports: [
|
|
53
|
+
CommonModule,
|
|
54
|
+
FormsModule,
|
|
55
|
+
ReactiveFormsModule,
|
|
56
|
+
HttpClientModule,
|
|
57
|
+
NgSelectModule,
|
|
58
|
+
MyrtexUiCompositeModule
|
|
59
|
+
],
|
|
60
|
+
exports: [
|
|
61
|
+
SignModalComponent
|
|
62
|
+
],
|
|
63
|
+
providers: [
|
|
64
|
+
SignProviderFactory,
|
|
65
|
+
CryptoProvider,
|
|
66
|
+
CryptoJinnProvider,
|
|
67
|
+
CryptoTsProvider,
|
|
68
|
+
EmptyProvider,
|
|
69
|
+
CryptoApiService,
|
|
70
|
+
SignService,
|
|
71
|
+
DownloadService
|
|
72
|
+
]
|
|
73
|
+
}]
|
|
74
|
+
}] });
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlydGV4LXNpZ25lci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtbWYtc2lnbmVyL3NyYy9saWIvbXlydGV4LXNpZ25lci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBOEIzRCxNQUFNLE9BQU8sa0JBQWtCOztnSEFBbEIsa0JBQWtCO2lIQUFsQixrQkFBa0IsaUJBMUIzQixrQkFBa0I7UUFDbEIsMEJBQTBCLGFBRzFCLFlBQVk7UUFDWixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsdUJBQXVCLGFBR3ZCLGtCQUFrQjtpSEFjVCxrQkFBa0IsYUFabEI7UUFDVCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsYUFBYTtRQUViLGdCQUFnQjtRQUNoQixXQUFXO1FBQ1gsZUFBZTtLQUNoQixZQXJCUTtZQUNQLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2QsdUJBQXVCO1NBQ3hCOzRGQWdCVSxrQkFBa0I7a0JBNUI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixrQkFBa0I7d0JBQ2xCLDBCQUEwQjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCx1QkFBdUI7cUJBQ3hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7cUJBQ25CO29CQUNELFNBQVMsRUFBRTt3QkFDVCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBRWIsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGVBQWU7cUJBQ2hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2lnbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NpZ24tbW9kYWwvc2lnbi1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTXlydGV4VWlDb21wb3NpdGVNb2R1bGUgfSBmcm9tICdteXJ0ZXgtdWktY29tcG9zaXRlJztcclxuaW1wb3J0IHsgTmdTZWxlY3RNb2R1bGUgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wdWJsaWMuc2lnbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kb3dubG9hZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2VydGlmaWNhdGUtc2VsZWN0L2NlcnRpZmljYXRlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDcnlwdG9BcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jcnlwdG8uYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduUHJvdmlkZXJGYWN0b3J5IH0gZnJvbSAnLi9wcm92aWRlcnMvc2lnbnByb3ZpZGVyLmZhY3RvcnknO1xyXG5pbXBvcnQgeyBDcnlwdG9Qcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXJzL2NyeXB0by5wcm92aWRlcic7XHJcbmltcG9ydCB7IENyeXB0b0ppbm5Qcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXJzL2NyeXB0b2ppbm4ucHJvdmlkZXInO1xyXG5pbXBvcnQgeyBDcnlwdG9Uc1Byb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcnMvY3J5cHRvdHMucHJvdmlkZXInO1xyXG5pbXBvcnQgeyBFbXB0eVByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlcnMvZW1wdHkucHJvdmlkZXInO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFNpZ25Nb2RhbENvbXBvbmVudCxcclxuICAgIENlcnRpZmljYXRlU2VsZWN0Q29tcG9uZW50XHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgTmdTZWxlY3RNb2R1bGUsXHJcbiAgICBNeXJ0ZXhVaUNvbXBvc2l0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgU2lnbk1vZGFsQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFNpZ25Qcm92aWRlckZhY3RvcnksXHJcbiAgICBDcnlwdG9Qcm92aWRlcixcclxuICAgIENyeXB0b0ppbm5Qcm92aWRlcixcclxuICAgIENyeXB0b1RzUHJvdmlkZXIsXHJcbiAgICBFbXB0eVByb3ZpZGVyLFxyXG5cclxuICAgIENyeXB0b0FwaVNlcnZpY2UsXHJcbiAgICBTaWduU2VydmljZSxcclxuICAgIERvd25sb2FkU2VydmljZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE15cnRleFNpZ25lck1vZHVsZSB7IH1cclxuIl19
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Base64 } from 'js-base64';
|
|
3
|
+
import { CryptoProAsyncService } from '../services/cryptopro/crypto.pro.async.service';
|
|
4
|
+
import { CertificateSelectComponent } from '../components/certificate-select/certificate-select.component';
|
|
5
|
+
import { DialogColor, DialogType } from 'myrtex-ui-composite';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "ngx-simple-modal";
|
|
8
|
+
import * as i2 from "../services/crypto.service";
|
|
9
|
+
import * as i3 from "myrtex-ui-composite";
|
|
10
|
+
import * as i4 from "../services/crypto.api.service";
|
|
11
|
+
export class CryptoProvider {
|
|
12
|
+
constructor(simpleModalService, cryptoService, alertService, cryptoApiService) {
|
|
13
|
+
this.simpleModalService = simpleModalService;
|
|
14
|
+
this.cryptoService = cryptoService;
|
|
15
|
+
this.alertService = alertService;
|
|
16
|
+
this.cryptoApiService = cryptoApiService;
|
|
17
|
+
}
|
|
18
|
+
async sign(data, withLog, options) {
|
|
19
|
+
await this.cryptoService.startUp(withLog);
|
|
20
|
+
const service = await this.cryptoService.getService(CryptoProAsyncService.key);
|
|
21
|
+
const list = await service.getCertificates();
|
|
22
|
+
const modalResult = await this.simpleModalService
|
|
23
|
+
.addModal(CertificateSelectComponent, { certificates: list }).toPromise();
|
|
24
|
+
if (!modalResult.selected) {
|
|
25
|
+
if (withLog) {
|
|
26
|
+
console.log('No certificate selected, rejecting');
|
|
27
|
+
}
|
|
28
|
+
return Promise.reject();
|
|
29
|
+
}
|
|
30
|
+
let certificateFail = 0;
|
|
31
|
+
if (window.CRYPTO_SKIP_CHECK !== true) {
|
|
32
|
+
if (options.checkFio &&
|
|
33
|
+
modalResult.selected.fio.toLowerCase() !== options.checkFio.toLowerCase()) {
|
|
34
|
+
certificateFail = 1;
|
|
35
|
+
}
|
|
36
|
+
if ((options.checkOgrn || options.checkOrganization) &&
|
|
37
|
+
(modalResult.selected.ogrn?.toLowerCase() !== options.checkOgrn?.toLowerCase() &&
|
|
38
|
+
modalResult.selected.organization?.toLowerCase() !== options.checkOrganization?.toLowerCase())) {
|
|
39
|
+
certificateFail = 2;
|
|
40
|
+
}
|
|
41
|
+
// if (this.options.checkInn &&
|
|
42
|
+
// result.inn.toLowerCase() == this.options.checkFio.toLowerCase()) {
|
|
43
|
+
// certificateFail = true;
|
|
44
|
+
// }
|
|
45
|
+
}
|
|
46
|
+
if (certificateFail > 0) {
|
|
47
|
+
this.alertService.showDialog({
|
|
48
|
+
title: 'Ошибка сертификата',
|
|
49
|
+
message: certificateFail == 1 ?
|
|
50
|
+
'Данные лица, подписывающего заявку не совпадают с данными усиленной квалифицированной подписи.' :
|
|
51
|
+
'Данные организации не совпадают с данными усиленной квалифицированной подписи. ' +
|
|
52
|
+
'Убедитесь, что вы используете сертификат, выданные от организации.',
|
|
53
|
+
color: DialogColor.red,
|
|
54
|
+
type: DialogType.alert,
|
|
55
|
+
okCallback: (ok) => {
|
|
56
|
+
//
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return Promise.reject();
|
|
60
|
+
}
|
|
61
|
+
if (withLog) {
|
|
62
|
+
console.log('Signing data', data);
|
|
63
|
+
}
|
|
64
|
+
const signedData = await service.signBase64(modalResult.selected.certificate, data, true);
|
|
65
|
+
if (withLog) {
|
|
66
|
+
console.log('Signing data', data);
|
|
67
|
+
}
|
|
68
|
+
if (!options.skipServerCheck) {
|
|
69
|
+
const verifyResult = await this.cryptoApiService.verify({
|
|
70
|
+
data: data,
|
|
71
|
+
signature: Base64.encode(signedData),
|
|
72
|
+
detached: true
|
|
73
|
+
}).toPromise();
|
|
74
|
+
return {
|
|
75
|
+
data,
|
|
76
|
+
success: verifyResult.success,
|
|
77
|
+
signed: signedData,
|
|
78
|
+
certificate: modalResult.selected,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return {
|
|
83
|
+
data,
|
|
84
|
+
success: true,
|
|
85
|
+
signed: signedData,
|
|
86
|
+
certificate: modalResult.selected,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
CryptoProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoProvider, deps: [{ token: i1.SimpleModalService }, { token: i2.CryptoService }, { token: i3.AlertService }, { token: i4.CryptoApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
92
|
+
CryptoProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoProvider, providedIn: 'root' });
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoProvider, decorators: [{
|
|
94
|
+
type: Injectable,
|
|
95
|
+
args: [{
|
|
96
|
+
providedIn: 'root'
|
|
97
|
+
}]
|
|
98
|
+
}], ctorParameters: function () { return [{ type: i1.SimpleModalService }, { type: i2.CryptoService }, { type: i3.AlertService }, { type: i4.CryptoApiService }]; } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LW1mLXNpZ25lci9zcmMvbGliL3Byb3ZpZGVycy9jcnlwdG8ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSW5DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBRzNHLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFPNUUsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0Isa0JBQXNDLEVBQ2hELGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGdCQUFrQztRQUh4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2hELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFDNUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBWSxFQUFFLE9BQWlCLEVBQUUsT0FBYTtRQUM5RCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQXdCLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQjthQUM5QyxR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QUFXLENBQUMsUUFBUTthQUNsQyxDQUFDO1NBQ0g7SUFDSCxDQUFDOzs0R0F6RlUsY0FBYztnSEFBZCxjQUFjLGNBRmIsTUFBTTs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSAnanMtYmFzZTY0JztcclxuaW1wb3J0IHsgU2ltcGxlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LXNpbXBsZS1tb2RhbCc7XHJcbmltcG9ydCB7IElTaWduUHJvdmlkZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvaXNpZ24ucHJvdmlkZXInO1xyXG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnlwdG9Qcm9Bc3luY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jcnlwdG9wcm8vY3J5cHRvLnByby5hc3luYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NlcnRpZmljYXRlLXNlbGVjdC9jZXJ0aWZpY2F0ZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3J5cHRvQXBpU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NyeXB0by5hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25lZFJlc3VsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBEaWFsb2dDb2xvciwgRGlhbG9nVHlwZSB9IGZyb20gJ215cnRleC11aS1jb21wb3NpdGUnO1xyXG5cclxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENyeXB0b1Byb3ZpZGVyIGltcGxlbWVudHMgSVNpZ25Qcm92aWRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ltcGxlTW9kYWxTZXJ2aWNlOiBTaW1wbGVNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnlwdG9BcGlTZXJ2aWNlOiBDcnlwdG9BcGlTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2lnbihkYXRhOiBzdHJpbmcsIHdpdGhMb2c/OiBib29sZWFuLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxTaWduZWRSZXN1bHRNb2RlbD4ge1xyXG4gICAgYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLnN0YXJ0VXAod2l0aExvZyk7XHJcbiAgICBjb25zdCBzZXJ2aWNlID0gYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLmdldFNlcnZpY2U8Q3J5cHRvUHJvQXN5bmNTZXJ2aWNlPihDcnlwdG9Qcm9Bc3luY1NlcnZpY2Uua2V5KTtcclxuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBzZXJ2aWNlLmdldENlcnRpZmljYXRlcygpO1xyXG4gICAgY29uc3QgbW9kYWxSZXN1bHQgPSBhd2FpdCB0aGlzLnNpbXBsZU1vZGFsU2VydmljZVxyXG4gICAgICAuYWRkTW9kYWwoQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQsIHsgY2VydGlmaWNhdGVzOiBsaXN0IH0pLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGlmICghbW9kYWxSZXN1bHQuc2VsZWN0ZWQpIHtcclxuICAgICAgaWYgKHdpdGhMb2cpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTm8gY2VydGlmaWNhdGUgc2VsZWN0ZWQsIHJlamVjdGluZycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjZXJ0aWZpY2F0ZUZhaWwgPSAwO1xyXG4gICAgaWYgKHdpbmRvdy5DUllQVE9fU0tJUF9DSEVDSyAhPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAob3B0aW9ucy5jaGVja0ZpbyAmJlxyXG4gICAgICAgIG1vZGFsUmVzdWx0LnNlbGVjdGVkLmZpby50b0xvd2VyQ2FzZSgpICE9PSBvcHRpb25zLmNoZWNrRmlvLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICBjZXJ0aWZpY2F0ZUZhaWwgPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKG9wdGlvbnMuY2hlY2tPZ3JuIHx8IG9wdGlvbnMuY2hlY2tPcmdhbml6YXRpb24pICYmXHJcbiAgICAgICAgKG1vZGFsUmVzdWx0LnNlbGVjdGVkLm9ncm4/LnRvTG93ZXJDYXNlKCkgIT09IG9wdGlvbnMuY2hlY2tPZ3JuPy50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICBtb2RhbFJlc3VsdC5zZWxlY3RlZC5vcmdhbml6YXRpb24/LnRvTG93ZXJDYXNlKCkgIT09IG9wdGlvbnMuY2hlY2tPcmdhbml6YXRpb24/LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgY2VydGlmaWNhdGVGYWlsID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgKHRoaXMub3B0aW9ucy5jaGVja0lubiAmJlxyXG4gICAgICAvLyAgIHJlc3VsdC5pbm4udG9Mb3dlckNhc2UoKSA9PSB0aGlzLm9wdGlvbnMuY2hlY2tGaW8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAvLyAgICAgY2VydGlmaWNhdGVGYWlsID0gdHJ1ZTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjZXJ0aWZpY2F0ZUZhaWwgPiAwKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICAgIHRpdGxlOiAn0J7RiNC40LHQutCwINGB0LXRgNGC0LjRhNC40LrQsNGC0LAnLFxyXG4gICAgICAgIG1lc3NhZ2U6IGNlcnRpZmljYXRlRmFpbCA9PSAxID9cclxuICAgICAgICAgICfQlNCw0L3QvdGL0LUg0LvQuNGG0LAsINC/0L7QtNC/0LjRgdGL0LLQsNGO0YnQtdCz0L4g0LfQsNGP0LLQutGDINC90LUg0YHQvtCy0L/QsNC00LDRjtGCINGBINC00LDQvdC90YvQvNC4INGD0YHQuNC70LXQvdC90L7QuSDQutCy0LDQu9C40YTQuNGG0LjRgNC+0LLQsNC90L3QvtC5INC/0L7QtNC/0LjRgdC4LicgOlxyXG4gICAgICAgICAgJ9CU0LDQvdC90YvQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4INC90LUg0YHQvtCy0L/QsNC00LDRjtGCINGBINC00LDQvdC90YvQvNC4INGD0YHQuNC70LXQvdC90L7QuSDQutCy0LDQu9C40YTQuNGG0LjRgNC+0LLQsNC90L3QvtC5INC/0L7QtNC/0LjRgdC4LiAnICtcclxuICAgICAgICAgICfQo9Cx0LXQtNC40YLQtdGB0YwsINGH0YLQviDQstGLINC40YHQv9C+0LvRjNC30YPQtdGC0LUg0YHQtdGA0YLQuNGE0LjQutCw0YIsINCy0YvQtNCw0L3QvdGL0LUg0L7RgiDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4LicsXHJcbiAgICAgICAgY29sb3I6IERpYWxvZ0NvbG9yLnJlZCxcclxuICAgICAgICB0eXBlOiBEaWFsb2dUeXBlLmFsZXJ0LFxyXG4gICAgICAgIG9rQ2FsbGJhY2s6IChvaykgPT4ge1xyXG4gICAgICAgICAgLy9cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpdGhMb2cpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1NpZ25pbmcgZGF0YScsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNpZ25lZERhdGEgPSBhd2FpdCBzZXJ2aWNlLnNpZ25CYXNlNjQobW9kYWxSZXN1bHQuc2VsZWN0ZWQuY2VydGlmaWNhdGUsIGRhdGEsIHRydWUpO1xyXG5cclxuICAgIGlmICh3aXRoTG9nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTaWduaW5nIGRhdGEnLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNlcnZlckNoZWNrKSB7XHJcbiAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IHRoaXMuY3J5cHRvQXBpU2VydmljZS52ZXJpZnkoe1xyXG4gICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgc2lnbmF0dXJlOiBCYXNlNjQuZW5jb2RlKHNpZ25lZERhdGEpLFxyXG4gICAgICAgIGRldGFjaGVkOiB0cnVlXHJcbiAgICAgIH0pLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIHN1Y2Nlc3M6IHZlcmlmeVJlc3VsdC5zdWNjZXNzLFxyXG4gICAgICAgIHNpZ25lZDogc2lnbmVkRGF0YSxcclxuICAgICAgICBjZXJ0aWZpY2F0ZTogbW9kYWxSZXN1bHQuc2VsZWN0ZWQsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBzaWduZWQ6IHNpZ25lZERhdGEsXHJcbiAgICAgICAgY2VydGlmaWNhdGU6IG1vZGFsUmVzdWx0LnNlbGVjdGVkLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { CryptoProAsyncService } from '../services/cryptopro/crypto.pro.async.service';
|
|
3
|
+
import { CertificateSelectComponent } from '../components/certificate-select/certificate-select.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ngx-simple-modal";
|
|
6
|
+
import * as i2 from "../services/crypto.service";
|
|
7
|
+
import * as i3 from "../services/crypto.api.service";
|
|
8
|
+
export class CryptoJinnProvider {
|
|
9
|
+
constructor(simpleModalService, cryptoService, cryptoApiService) {
|
|
10
|
+
this.simpleModalService = simpleModalService;
|
|
11
|
+
this.cryptoService = cryptoService;
|
|
12
|
+
this.cryptoApiService = cryptoApiService;
|
|
13
|
+
}
|
|
14
|
+
async sign(data, withLog, options) {
|
|
15
|
+
await this.cryptoService.startUp(withLog);
|
|
16
|
+
const service = await this.cryptoService.getService(CryptoProAsyncService.key);
|
|
17
|
+
const list = await service.getCertificates();
|
|
18
|
+
const modalResult = await this.simpleModalService
|
|
19
|
+
.addModal(CertificateSelectComponent, { certificates: list }).toPromise();
|
|
20
|
+
if (!modalResult.selected) {
|
|
21
|
+
if (withLog) {
|
|
22
|
+
console.log('No certificate selected, rejecting');
|
|
23
|
+
}
|
|
24
|
+
return Promise.reject();
|
|
25
|
+
}
|
|
26
|
+
if (withLog) {
|
|
27
|
+
console.log('Signing data', data);
|
|
28
|
+
}
|
|
29
|
+
const signedData = await service.signXml(modalResult.selected.certificate, data);
|
|
30
|
+
const verifyResult = await this.cryptoApiService.validate(signedData).toPromise();
|
|
31
|
+
return {
|
|
32
|
+
data: signedData,
|
|
33
|
+
success: verifyResult.success,
|
|
34
|
+
certificate: modalResult.selected,
|
|
35
|
+
validateResult: verifyResult.validateResult
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
CryptoJinnProvider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoJinnProvider, deps: [{ token: i1.SimpleModalService }, { token: i2.CryptoService }, { token: i3.CryptoApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
CryptoJinnProvider.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoJinnProvider, providedIn: 'root' });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CryptoJinnProvider, decorators: [{
|
|
42
|
+
type: Injectable,
|
|
43
|
+
args: [{
|
|
44
|
+
providedIn: 'root'
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i1.SimpleModalService }, { type: i2.CryptoService }, { type: i3.CryptoApiService }]; } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvamlubi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1zaWduZXIvc3JjL2xpYi9wcm92aWRlcnMvY3J5cHRvamlubi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDOzs7OztBQU8zRyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFlBQW9CLGtCQUFzQyxFQUNoRCxhQUE0QixFQUM1QixnQkFBa0M7UUFGeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUNoRCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBQzVDLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQVksRUFBRSxPQUFpQixFQUFFLE9BQWE7UUFDOUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUF3QixxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0I7YUFDOUMsUUFBUSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFNUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDekIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DO1FBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpGLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVsRixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBQzdCLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUTtZQUNqQyxjQUFjLEVBQUUsWUFBWSxDQUFDLGNBQWM7U0FDNUMsQ0FBQztJQUNKLENBQUM7O2dIQW5DVSxrQkFBa0I7b0hBQWxCLGtCQUFrQixjQUZqQixNQUFNOzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2ltcGxlTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LXNpbXBsZS1tb2RhbCc7XHJcbmltcG9ydCB7IElTaWduUHJvdmlkZXIgfSBmcm9tICcuL2ludGVyZmFjZXMvaXNpZ24ucHJvdmlkZXInO1xyXG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnlwdG9Qcm9Bc3luY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jcnlwdG9wcm8vY3J5cHRvLnByby5hc3luYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NlcnRpZmljYXRlLXNlbGVjdC9jZXJ0aWZpY2F0ZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3J5cHRvQXBpU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NyeXB0by5hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25lZFJlc3VsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENyeXB0b0ppbm5Qcm92aWRlciBpbXBsZW1lbnRzIElTaWduUHJvdmlkZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNpbXBsZU1vZGFsU2VydmljZTogU2ltcGxlTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjcnlwdG9BcGlTZXJ2aWNlOiBDcnlwdG9BcGlTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2lnbihkYXRhOiBzdHJpbmcsIHdpdGhMb2c/OiBib29sZWFuLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxTaWduZWRSZXN1bHRNb2RlbD4ge1xyXG4gICAgYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLnN0YXJ0VXAod2l0aExvZyk7XHJcbiAgICBjb25zdCBzZXJ2aWNlID0gYXdhaXQgdGhpcy5jcnlwdG9TZXJ2aWNlLmdldFNlcnZpY2U8Q3J5cHRvUHJvQXN5bmNTZXJ2aWNlPihDcnlwdG9Qcm9Bc3luY1NlcnZpY2Uua2V5KTtcclxuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBzZXJ2aWNlLmdldENlcnRpZmljYXRlcygpO1xyXG4gICAgY29uc3QgbW9kYWxSZXN1bHQgPSBhd2FpdCB0aGlzLnNpbXBsZU1vZGFsU2VydmljZVxyXG4gICAgICAuYWRkTW9kYWwoQ2VydGlmaWNhdGVTZWxlY3RDb21wb25lbnQsIHsgY2VydGlmaWNhdGVzOiBsaXN0IH0pLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgIGlmICghbW9kYWxSZXN1bHQuc2VsZWN0ZWQpIHtcclxuICAgICAgaWYgKHdpdGhMb2cpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTm8gY2VydGlmaWNhdGUgc2VsZWN0ZWQsIHJlamVjdGluZycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aXRoTG9nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTaWduaW5nIGRhdGEnLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzaWduZWREYXRhID0gYXdhaXQgc2VydmljZS5zaWduWG1sKG1vZGFsUmVzdWx0LnNlbGVjdGVkLmNlcnRpZmljYXRlLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCB2ZXJpZnlSZXN1bHQgPSBhd2FpdCB0aGlzLmNyeXB0b0FwaVNlcnZpY2UudmFsaWRhdGUoc2lnbmVkRGF0YSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0YTogc2lnbmVkRGF0YSxcclxuICAgICAgc3VjY2VzczogdmVyaWZ5UmVzdWx0LnN1Y2Nlc3MsXHJcbiAgICAgIGNlcnRpZmljYXRlOiBtb2RhbFJlc3VsdC5zZWxlY3RlZCxcclxuICAgICAgdmFsaWRhdGVSZXN1bHQ6IHZlcmlmeVJlc3VsdC52YWxpZGF0ZVJlc3VsdFxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
|