You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
62 KiB
2 lines
62 KiB
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"+M5x":function(t,e){t.exports=".no-space-break {\n white-space:nowrap;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcGhvbmVib29rLW5ldy9waG9uZWJvb2stbmV3LmNvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7SUFDSSxrQkFBa0I7RUFDcEIiLCJmaWxlIjoic3JjL2FwcC9waG9uZWJvb2stbmV3L3Bob25lYm9vay1uZXcuY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5uby1zcGFjZS1icmVhayB7XG4gICAgd2hpdGUtc3BhY2U6bm93cmFwO1xuICB9XG4iXX0= */"},"+nPA":function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3JlZ2lzdGVyL3JlZ2lzdGVyLmNvbXBvbmVudC5jc3MifQ== */"},"/+rS":function(t,e){t.exports='#new-text-preview {\n font-family: "Courier New"\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvdGV4dC10ZW1wbGF0ZS1uZXcvdGV4dC10ZW1wbGF0ZS1uZXcuY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtJQUNJO0FBQ0oiLCJmaWxlIjoic3JjL2FwcC90ZXh0LXRlbXBsYXRlLW5ldy90ZXh0LXRlbXBsYXRlLW5ldy5jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiI25ldy10ZXh0LXByZXZpZXcge1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCJcbn1cbiJdfQ== */'},"/ZKd":function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3RleHQtdGVtcGxhdGUvdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQuY3NzIn0= */"},0:function(t,e,n){t.exports=n("zUnb")},"0KVQ":function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <h4>Login</h4>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-username" class="pr-2 mt-auto mb-auto">Username</label>\n <input type="text" class="flex-grow-1" id="login-username" [(ngModel)]="username" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-password" class="pr-2 mt-auto mb-auto">Password</label>\n <input type="password" class="flex-grow-1" id="login-password" [(ngModel)]="password" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="login()" class="btn btn-primary mr-3">Login</button>\n <button type="button" (click)="routeRegister()" class="btn btn-primary">Register</button>\n </div>\n </div>\n </div>\n<div>\n'},"2eZ0":function(t,e){t.exports='<div class="row">\n <div class="col-12 mb-3 d-flux">\n <button type="button" *ngIf="currCampaign.currentStatus === \'Running\'" (click)="pauseCampaign()" class="btn btn-warning mr-2">Pause Campaign</button>\n <button type="button" *ngIf="currCampaign.currentStatus !== \'Running\'" (click)="startCampaign()" class="btn btn-primary mr-2">Start Campaign</button>\n <button type="button" class="btn btn-danger ml-auto" data-toggle="modal" data-target="#completeModal">Delete</button>\n </div>\n</div>\n\n\n<div class="row">\n <div class="col-12">\n <div class="input-group mb-3">\n <div class="input-group-prepend">\n <span class="input-group-text">Campaign Name</span>\n </div>\n <input type="text" class="form-control campaign-details" value="{{ currCampaign.name }}" readonly>\n </div>\n <div class="input-group mb-3">\n <div class="input-group-prepend">\n <span class="input-group-text">Campaign Size</span>\n </div>\n <input type="text" class="form-control campaign-details" value="{{ currCampaign.size }}" readonly>\n </div>\n <div class="input-group mb-3">\n <div class="input-group-prepend">\n <span class="input-group-text">Campaign Status</span>\n </div>\n <input type="text" class="form-control campaign-details" value="{{ currCampaign.currentStatus }}" readonly>\n </div>\n </div>\n</div>\n\n<div class="row mt-2">\n <div class="col-12">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">From</th>\n <th scope="col">To</th>\n <th scope="col">Currrent Status</th>\n <th scope="col">Web Status</th>\n <th scope="col">Web Route URL</th>\n <th scope="col">Time Sent</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let job of currCampaign.jobs">\n <tr>\n <td>{{ job.fromNum }}</td>\n <td>{{ job.toNum }}</td>\n <td>{{ job.currentStatus }}</td>\n <td><span class="download-visits" (click)="downloadVisits(job.id)">{{ job.webStatus }}</span></td>\n <td><a href="{{ job.fullUrl }}">{{ job.fullUrl }}</a></td>\n <td>{{ job.timeSent | date:\'dd-MMM-yyyy\'}}</td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n</div>\n\n\n<div class="modal fade" id="completeModal" tabindex="-1" role="dialog" aria-labelledby="completeModal" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="exampleModalLabel">{{ currCampaign.name }}</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n <p>Are you sure you want to delete the campaign?</p>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>\n <button type="button" class="btn btn-danger" (click)="deleteCampaign()" data-dismiss="modal">Delete Campaign</button>\n </div>\n </div>\n </div>\n</div>\n'},"3Swe":function(t,e){t.exports='<div class="row p-2">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="campaignName" class="pr-2 mt-auto mb-auto">Phonebook Name</label>\n <input type="text" class="flex-grow-1" id="campaignName" [(ngModel)]="newPhonebook.name" placeholder="Phonebook Name">\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label class="no-space-break mt-auto mb-auto pr-2" for="import-records">Import Records</label>\n <div class="custom-file" id="import-records">\n <input type="file" (change)="importPhoneRecords($event.target.files)" class="custom-file-input" id="customFile">\n <label class="custom-file-label" for="customFile">Choose file</label>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-12 d-flex">\n <p><small><em><a href="/assets/phonebook-template.xlsx">Download file template here.</a></em></small></p>\n </div>\n </div>\n\n <div class="row mt-1">\n <div class="col-12 d-flex">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">First Name</th>\n <th scope="col">Last Name</th>\n <th scope="col">Alias</th>\n <th scope="col">Phone Number</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let phoneRecord of newPhoneRecords">\n <tr>\n <td>{{ phoneRecord.firstName }}</td>\n <td>{{ phoneRecord.lastName }}</td>\n <td>{{ phoneRecord.alias }}</td>\n <td>{{ phoneRecord.phoneNumber }}</td>\n </tr>\n </ng-container>\n <tr (keyup.enter)="insertAdditionalRecord()">\n <td><input type="text" [(ngModel)]="additionalRecord.firstName" class="form-control" placeholder="firstName"></td>\n <td><input type="text" [(ngModel)]="additionalRecord.lastName" class="form-control" placeholder="lastName"></td>\n <td><input type="text" [(ngModel)]="additionalRecord.alias" class="form-control" placeholder="alias"></td>\n <td><input type="text" [(ngModel)]="additionalRecord.phoneNumber" class="form-control" placeholder="phoneNumber"></td>\n </tr>\n <tr>\n <p><small><em>Press enter to insert additional record</em></small></p>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="submitNewPhonebook()" class="btn btn-primary mr-2">Save Phonebook</button>\n <button type="button" *ngIf="router.url !== \'/phonebook/new\'" class="btn btn-danger ml-auto" data-toggle="modal" data-target="#completeModal">Delete</button>\n </div>\n </div>\n</div>\n\n<div class="modal fade" id="completeModal" tabindex="-1" role="dialog" aria-labelledby="completeModal" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="exampleModalLabel">{{ newPhonebook.name }}</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n <p>Are you sure you want to delete the phonebook?</p>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>\n <button type="button" class="btn btn-danger" (click)="deletePhonebook()" data-dismiss="modal">Delete Phonebook</button>\n </div>\n </div>\n </div>\n</div>\n'},"6fdi":function(t,e){t.exports='<div class="row p-2">\n <div class="col-12">\n <div class="row mt-3 mb-3">\n <div class="col-12 d-flex">\n <label for="campaignName" class="pr-2 mt-auto mb-auto">Campaign Name</label>\n <input type="text" class="flex-grow-1" id="campaignName" [(ngModel)]="newCampaign.name" placeholder="Campaign Name">\n </div>\n </div>\n <div class="row mt-3 mb-3">\n <div class="col-12 d-flex">\n <label for="newFromNum" class="pr-2 mt-auto mb-auto">From Number</label>\n <input type="text" class="flex-grow-1" id="newFromNum" [(ngModel)]="newCampaign.fromNumber" placeholder="From Number">\n </div>\n </div>\n \x3c!-- Add phonebook & template via list --\x3e \n <div class="form-group">\n <label for="provider-select">Provider</label>\n <select class="form-control" [(ngModel)]="newCampaign.providerTag" id="provider-select">\n <option></option>\n <option *ngFor="let providerEnum of providerService.providerEnums" [ngValue]="providerEnum.tag">{{providerEnum.name}}</option>\n </select>\n </div>\n <div class="form-group">\n <label for="phonebook-select">Phonebook</label>\n <select class="form-control" (change)="updatePreviews()" [(ngModel)]="newCampaign.phonebookId" id="phonebook-select">\n <option [ngValue]="0"></option>\n <option *ngFor="let phonebook of phonebookService.phonebooks" [ngValue]="phonebook.id">{{phonebook.name}}: Size {{phonebook.size}}</option>\n </select>\n </div>\n <div class="form-group">\n <label for="text-template-select">Text Template</label>\n <select class="form-control" (change)="updatePreviews()" [(ngModel)]="newCampaign.textTemplateId" id="text-template-select">\n <option [ngValue]="0"></option>\n <option *ngFor="let textTemplate of textTemplateService.textTemplates" [ngValue]="textTemplate.id">{{textTemplate.name}}</option>\n </select>\n </div>\n <div class="form-group">\n <label for="web-template-select">Web Template</label>\n <select class="form-control" (change)="updatePreviews()" [(ngModel)]="newCampaign.webTemplateId" id="web-template-select">\n <option [ngValue]="0"></option>\n <option *ngFor="let webTemplate of webTemplateService.webTemplates" [ngValue]="webTemplate.id">{{webTemplate.name}}</option>\n </select>\n </div>\n \n <div class="row mt-4">\n <div class="col-12 d-flex">\n <button type="button" (click)="submitNewCampaignRun()" class="btn btn-primary mr-2">Start</button>\n <button type="button" (click)="submitNewCampaign()" class="btn btn-secondary ml-2">Save</button>\n </div>\n </div>\n <div class="form-group mt-4">\n <label for="template-preview" class="pr-2 mt-auto mb-auto">Template</label>\n <textarea class="form-control flex" [(ngModel)]="templateStr" id="template-preview" rows="4" disabled></textarea>\n </div>\n <div class="form-group mt-2">\n <label for="new-text-preview" class="pr-2 mt-auto mb-auto">Preview (First Entry)</label>\n <textarea class="form-control flex" [(ngModel)]="previewStr" id="new-text-preview" rows="4" disabled></textarea>\n </div>\n</div>\n'},"8glu":function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2NhbXBhaWduL2NhbXBhaWduLmNvbXBvbmVudC5jc3MifQ== */"},"8lfH":function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <button class="btn btn-primary" routerLink="/web-template/new">New Web Template</button>\n </div>\n</div>\n\n<div class="row mt-2">\n <div class="col-12">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">Name</th>\n <th scope="col">Type</th>\n <th scope="col">Create Date</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let webTemplate of webTemplateService.webTemplates">\n <tr routerLink="/web-template/{{ webTemplate.id }}/edit">\n <td>{{ webTemplate.name }}</td>\n <td>{{ webTemplate.templateType }}</td>\n <td>{{ webTemplate.createDate | date:\'dd-MMM-yyyy\'}}</td>\n </tr>\n </ng-container>\n <p *ngIf="webTemplateService.webTemplates.length === 0">No web template created yet. Create templates by clicking <a routerLink="/web-template/new">here</a></p>\n </tbody>\n </table>\n </div>\n</div>\n'},"99W7":function(t,e){t.exports="<div class=\"alert notification col-11 mx-auto\" *ngFor=\"let notification of notificationService.notifications\" [ngClass]=\"{'alert-success': notification.resultType === 'success', 'alert-danger': notification.resultType ==='failure'}\" (click)=notificationService.closeNotification(notification)>\n{{ notification.text }}\n</div>\n"},A3xY:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuY3NzIn0= */"},Aqmg:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL21haW4vbWFpbi5jb21wb25lbnQuY3NzIn0= */"},CpHs:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <button class="btn btn-primary" routerLink="/text-template/new">New Text Template</button>\n </div>\n</div>\n\n<div class="row mt-2">\n <div class="col-12">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">Name</th>\n <th scope="col">Create Date</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let textTemplate of textTemplateService.textTemplates">\n <tr routerLink="/text-template/{{ textTemplate.id }}/edit">\n <td>{{ textTemplate.name }}</td>\n <td>{{ textTemplate.createDate | date:\'dd-MMM-yyyy\'}}</td>\n </tr>\n </ng-container>\n <p *ngIf="textTemplateService.textTemplates.length === 0">No text template created yet. Create templates by clicking <a routerLink="/text-template/new">here</a></p>\n </tbody>\n </table>\n </div>\n</div>\n'},"GQ/r":function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24uY29tcG9uZW50LmNzcyJ9 */"},JtO7:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <h4>Settings for {{ currUser.username }}</h4>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="setting-displayname" class="pr-2 mt-auto mb-auto">Display Name</label>\n <input type="text" class="flex-grow-1" id="setting-displayname" [(ngModel)]="currUser.name" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="setting-email" class="pr-2 mt-auto mb-auto">Email</label>\n <input type="text" class="flex-grow-1" id="setting-email" [(ngModel)]="currUser.email" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="setting-password" class="pr-2 mt-auto mb-auto">Change Password</label>\n <input type="password" class="flex-grow-1" id="setting-password" [(ngModel)]="currUser.password" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="updateUser()" class="btn btn-primary">Submit</button>\n </div>\n </div>\n </div>\n<div>\n'},LOYK:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <button class="btn btn-primary" routerLink="/phonebook/new">New Phonebook</button>\n </div>\n</div>\n\n<div class="row mt-2">\n <div class="col-12">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">Name</th>\n <th scope="col">Phonebook Size</th>\n <th scope="col">Create Date</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let phonebook of phonebookService.phonebooks">\n <tr routerLink="/phonebook/{{ phonebook.id }}/edit">\n <td>{{ phonebook.name }}</td>\n <td>{{ phonebook.size }}</td>\n <td>{{ phonebook.createDate | date:\'dd-MMM-yyyy\'}}</td>\n </tr>\n </ng-container>\n <p *ngIf="phonebookService.phonebooks.length === 0">No phonebooks created yet. Create phonebooks by clicking <a routerLink="/phonebook/new">here</a></p>\n </tbody>\n </table>\n </div>\n</div>\n'},MjFU:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2NhbXBhaWduLW5ldy9jYW1wYWlnbi1uZXcuY29tcG9uZW50LmNzcyJ9 */"},Onsm:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LmNzcyJ9 */"},Q1uh:function(t,e){t.exports=".campaign-details:-moz-read-only {\n background-color: white;\n}\n\n.campaign-details:read-only {\n background-color: white;\n}\n\n.download-visits {\n color: #007bff;\n cursor: pointer;\n}\n\n.download-visits:hover {\n color: #007bff;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvY2FtcGFpZ24tdmlldy9jYW1wYWlnbi12aWV3LmNvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7SUFDSSx1QkFBdUI7QUFDM0I7O0FBRkE7SUFDSSx1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSxjQUFjO0lBQ2QsZUFBZTtBQUNuQjs7QUFFQTtJQUNJLGNBQWM7SUFDZCxlQUFlO0lBQ2YsMEJBQTBCO0FBQzlCIiwiZmlsZSI6InNyYy9hcHAvY2FtcGFpZ24tdmlldy9jYW1wYWlnbi12aWV3LmNvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuY2FtcGFpZ24tZGV0YWlsczpyZWFkLW9ubHkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG4uZG93bmxvYWQtdmlzaXRzIHtcbiAgICBjb2xvcjogIzAwN2JmZjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kb3dubG9hZC12aXNpdHM6aG92ZXIge1xuICAgIGNvbG9yOiAjMDA3YmZmO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbiJdfQ== */"},RHam:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3dlYi10ZW1wbGF0ZS1uZXcvd2ViLXRlbXBsYXRlLW5ldy5jb21wb25lbnQuY3NzIn0= */"},X2v6:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <h4>Global TapIt Settings</h4>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="registration-code" class="pr-2 mt-auto mb-auto">Secret Registration Code</label>\n <input type="text" class="flex-grow-1" id="registration-code" [(ngModel)]="displaySettings.secretRegistrationCode" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="threads" class="pr-2 mt-auto mb-auto">SMS Threads Per Campaign</label>\n <input type="text" class="flex-grow-1" id="threads" [(ngModel)]="displaySettings.threadsPerCampaign" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="bcrypt-cost" class="pr-2 mt-auto mb-auto">BCrypt Cost</label>\n <input type="text" class="flex-grow-1" id="bcrypt-cost" [(ngModel)]="displaySettings.bcryptCost" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="max-retries" class="pr-2 mt-auto mb-auto">Max Request Retries</label>\n <input type="text" class="flex-grow-1" id="max-retries" [(ngModel)]="displaySettings.maxRequestRetries" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="wait-time" class="pr-2 mt-auto mb-auto">Wait Before Retry (ms) </label>\n <input type="text" class="flex-grow-1" id="wait-time" [(ngModel)]="displaySettings.waitBeforeRetry" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="web-prefix" class="pr-2 mt-auto mb-auto">Web URL Prefix</label>\n <input type="text" class="flex-grow-1" id="web-prefix" [(ngModel)]="displaySettings.webTemplatePrefix" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="web-route" class="pr-2 mt-auto mb-auto">Web Route</label>\n <input type="text" class="flex-grow-1" id="web-route" [(ngModel)]="displaySettings.webTemplateRoute" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="updateGlobalSettings()" class="btn btn-primary">Submit</button>\n </div>\n </div>\n </div>\n<div>\n'},XbfJ:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <button class="btn btn-primary" routerLink="/campaign/new">New Campaign</button>\n </div>\n</div>\n\n<div class="row mt-2">\n <div class="col-12">\n <table class="table table-hover">\n <thead class="thead-dark">\n <tr>\n <th scope="col">Name</th>\n <th scope="col">Status</th>\n <th scope="col">Web Status</th>\n <th scope="col">Target Size</th>\n <th scope="col">Create Date</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor="let campaign of campaignService.campaigns">\n <tr routerLink="/campaign/{{ campaign.id }}/view">\n <td>{{ campaign.name }}</td>\n <td>{{ campaign.currentStatus }}</td>\n <td>{{ campaign.webStatus }}</td>\n <td>{{ campaign.size }}</td>\n <td>{{ campaign.createDate | date:\'dd-MMM-yyyy\'}}</td>\n </tr>\n </ng-container>\n <p *ngIf="campaignService.campaigns.length === 0">No campaigns created yet. Create compaigns by clicking <a routerLink="/campaign/new">here</a></p>\n </tbody>\n </table>\n </div>\n</div>\n'},ZgUC:function(t,e){t.exports='<div class="row p-2">\n <div class="col-12">\n <div class="card">\n <div class="card-header">\n Twilio Settings\n </div>\n <div class="card-body">\n <div class="row">\n <div class="form-group col-12">\n <label for="twilio-account-sid" class="pr-2 mt-auto mb-auto">Account SID</label>\n <input type="text" class="flex-grow-1" id="twilio-account-sid" [(ngModel)]="currTwilioProvider.accountSID" placeholder="Twilio Account SID">\n </div>\n </div>\n <div class="row">\n <div class="form-group col-12">\n <label for="twilio-auth-token" class="pr-2 mt-auto mb-auto">Auth Token</label>\n <input type="text" class="flex-grow-1" id="twilio-auth-token" [(ngModel)]="currTwilioProvider.authToken" placeholder="Twilio Auth Token">\n </div>\n </div>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="submitProviders()" class="btn btn-primary ml-2">Save Provider Settings</button>\n </div>\n </div>\n </div>\n</div>\n'},ZlTE:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <h4>Login</h4>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-name" class="pr-2 mt-auto mb-auto">Name</label>\n <input type="text" class="flex-grow-1" id="login-name" [(ngModel)]="name" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-username" class="pr-2 mt-auto mb-auto">Username</label>\n <input type="text" class="flex-grow-1" id="register-username" [(ngModel)]="username" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-password" class="pr-2 mt-auto mb-auto">Password</label>\n <input type="password" class="flex-grow-1" id="register-password" [(ngModel)]="password" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="login-username" class="pr-2 mt-auto mb-auto">Email</label>\n <input type="text" class="flex-grow-1" id="register-email" [(ngModel)]="email" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="secret-code" class="pr-2 mt-auto mb-auto">Secret Code</label>\n <input type="text" class="flex-grow-1" id="secret-code" [(ngModel)]="secretCode" >\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="register()" class="btn btn-primary">Register</button>\n </div>\n </div>\n </div>\n<div>\n'},crnd:function(t,e){function n(t){return Promise.resolve().then(function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e})}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id="crnd"},fMGI:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3Byb2ZpbGUvcHJvZmlsZS5jb21wb25lbnQuY3NzIn0= */"},"gO/L":function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3Byb3ZpZGVyL3Byb3ZpZGVyLmNvbXBvbmVudC5jc3MifQ== */"},kmT1:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3dlYi10ZW1wbGF0ZS93ZWItdGVtcGxhdGUuY29tcG9uZW50LmNzcyJ9 */"},kt9D:function(t,e){t.exports='<div class="row p-2">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="campaignName" class="pr-2 mt-auto mb-auto">Text Template Name</label>\n <input type="text" class="flex-grow-1" id="campaignName" [(ngModel)]="newTextTemplate.name" placeholder="Text Template Name">\n </div>\n </div>\n <div class="row mt-3">\n <div class="form-group col-12">\n <label for="text-template-area">Text Template</label>\n <textarea class="form-control flex" [(ngModel)]="newTextTemplate.templateStr" (ngModelChange)="updatePreview()" id="text-template-area" rows="6"></textarea>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="submitNewTextTemplate()" class="btn btn-primary ml-2">Save Text Template</button>\n <button type="button" *ngIf="router.url !== \'/text-template/new\'" class="btn btn-danger ml-auto" data-toggle="modal" data-target="#completeModal">Delete</button>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <div class="form-group col-12">\n <label for="tags-available" class="pr-2 mt-auto mb-auto">Tags Available</label>\n <div id="tags-available">\n <ul>\n <li>{{ \'{\' }}firstName{{ \'}\' }}</li>\n <li>{{ \'{\' }}lastName{{ \'}\' }}</li>\n <li>{{ \'{\' }}alias{{ \'}\' }}</li>\n <li>{{ \'{\' }}phoneNumber{{ \'}\' }}</li>\n <li>{{ \'{\' }}url{{ \'}\' }}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <div class="form-group col-12">\n <label for="new-text-preview" class="pr-2 mt-auto mb-auto">Preview</label>\n <textarea class="form-control flex" [(ngModel)]="previewStr" id="new-text-preview" rows="6" disabled></textarea>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<div class="modal fade" id="completeModal" tabindex="-1" role="dialog" aria-labelledby="completeModal" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="exampleModalLabel">{{ newTextTemplate.name }}</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n <p>Are you sure you want to delete the text template?</p>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>\n <button type="button" class="btn btn-danger" (click)="deleteTextTemplate()" data-dismiss="modal">Delete Text Template</button>\n </div>\n </div>\n </div>\n</div>\n'},lsP6:function(t,e){t.exports='<div class="row">\n <div class="col-12">\n <h1>Welcome to TapIt: A Text Phishing Framework</h1>\n <p>TapIt is a tool that allows users to manage large scale SMS phishing campaigns.</p>\n <p>The framework is equipped with in-built SMS and Web templating functionalities to generate customised messages for a large list of recipients</p>\n </div>\n</div>\n'},n2gn:function(t,e){t.exports='<div class="row p-2">\n <div class="col-12">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="campaignName" class="pr-2 mt-auto mb-auto">Web Template Name</label>\n <input type="text" class="flex-grow-1" id="campaignName" [(ngModel)]="newWebTemplate.name" placeholder="Web Template Name">\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="web-template-type">Web Template Type</label>\n <select class="form-control" [(ngModel)]="newWebTemplate.templateType" id="web-template-type">\n <option></option>\n <option *ngFor="let templateEnum of webTemplateService.wTemplateEnum" [ngValue]="templateEnum.tag">{{templateEnum.name}}</option>\n </select>\n </div>\n </div>\n\n \x3c!-- for redirect --\x3e\n <ng-container *ngIf="newWebTemplate.templateType === \'redirect\'">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="redirect-url" class="pr-2 mt-auto mb-auto">Redirect URL</label>\n <input type="text" class="flex-grow-1" id="redirect-url" [(ngModel)]="newWebTemplate.redirectUrl" placeholder="https://www.attacker.com">\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="positive-redirect" class="pr-2 mt-auto mb-auto">Positive Redirect UA (Comma separated, leave blank if unused)</label>\n <input type="text" class="flex-grow-1" id="positive-redirect" [(ngModel)]="newWebTemplate.redirectAgent" placeholder="Windows NT">\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="negative-redirect" class="pr-2 mt-auto mb-auto">Negative Redirect UA (Comma Seperated, leave blank if unused)</label>\n <input type="text" class="flex-grow-1" id="negative-redirect" [(ngModel)]="newWebTemplate.redirectNegAgent" placeholder="Android,iPhone">\n </div>\n </div>\n <div class="row">\n <div class="col-12 d-flex">\n <p><small><em>Use only either \'Positive\' or \'Negative\' redirect. DO NOT USE BOTH.</em></small></p>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="placeholder-html" class="pr-2 mt-auto mb-auto">Placeholder HTML</label>\n <textarea class="form-control flex" [(ngModel)]="newWebTemplate.redirectPlaceholderHtml" id="placeholder-html" rows="6"></textarea>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf="newWebTemplate.templateType === \'harvester\'">\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="placeholder-harvest-html" class="pr-2 mt-auto mb-auto">Placeholder HTML</label>\n <textarea class="form-control flex" [(ngModel)]="newWebTemplate.harvesterBeforeHtml" id="placeholder-harvest-html" rows="6"></textarea>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <label for="after-html" class="pr-2 mt-auto mb-auto">After HTML</label>\n <textarea class="form-control flex" [(ngModel)]="newWebTemplate.harvesterAfterHtml" id="after-html" rows="6"></textarea>\n </div>\n </div>\n </ng-container>\n\n <div class="row">\n <div class="col-12 d-flex">\n <p *ngIf="router.url !== \'/web-template/new\'"><small><em>Note: Changing web template may affect your existing campaigns</em></small></p>\n </div>\n </div>\n <div class="row mt-3">\n <div class="col-12 d-flex">\n <button type="button" (click)="submitNewWebTemplate()" class="btn btn-primary ml-2">Save Web Template</button>\n <button type="button" *ngIf="router.url !== \'/web-template/new\'" class="btn btn-danger ml-auto" data-toggle="modal" data-target="#completeModal">Delete</button>\n </div>\n </div>\n </div>\n</div>\n\n<div class="modal fade" id="completeModal" tabindex="-1" role="dialog" aria-labelledby="completeModal" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="exampleModalLabel">{{ newWebTemplate.name }}</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close">\n <span aria-hidden="true">×</span>\n </button>\n </div>\n <div class="modal-body">\n <p>Are you sure you want to delete the text template?</p>\n </div>\n <div class="modal-footer">\n <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>\n <button type="button" class="btn btn-danger" (click)="deleteWebTemplate()" data-dismiss="modal">Delete Web Template</button>\n </div>\n </div>\n </div>\n</div>\n'},n7sk:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5jc3MifQ== */"},"nH/3":function(t,e){t.exports='<nav class="navbar navbar-expand-lg navbar-dark bg-dark">\n <a class="navbar-brand" routerLink="/"><img src="logo.png" height="30px" alt="Tap It!"></a>\n <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">\n <span class="navbar-toggler-icon"></span>\n </button>\n\n <div class="collapse navbar-collapse" id="navbarSupportedContent">\n <ul class="navbar-nav">\n <li *ngFor="let navlink of navlinks" data-toggle="collapse" data-target="#navbarNav" class="nav-item">\n <a class="nav-link" *ngIf="navlink.loginOnly === authService.loggedin" [ngClass]="{\'active\': router.url === navlink.link}" routerLink="/{{ navlink.link }}">\n {{ navlink.name }}\n <span *ngIf="this.router.url === navlink.link" class="sr-only">(current)</span>\n </a>\n </li>\n <li class="nav-item dropdown" *ngIf="authService.loggedin === true">\n <a class="nav-link dropdown-toggle" routerLink="{{ router.url }}" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\n Settings\n </a>\n <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">\n <a class="dropdown-item" routerLink="/profile">Profile</a>\n <a class="dropdown-item" routerLink="/provider">Providers</a>\n <a class="dropdown-item" routerLink="/global-settings">Global Settings</a>\n </div>\n </li>\n </ul>\n <ul class="navbar-nav ml-auto">\n <li *ngIf="authService.loggedin" data-toggle="collapse" data-target="#navbarNav" class="nav-item">\n <a class="nav-link" routerLink="/" (click)="authService.logout()">Log Out</a>\n </li>\n <li *ngIf="!authService.loggedin" data-toggle="collapse" data-target="#navbarNav" class="nav-item">\n <a class="nav-link" routerLink="/login">Login</a>\n </li>\n </ul>\n </div>\n</nav>\n\n<main class="container-fluid pt-2">\n <router-outlet></router-outlet>\n</main>\n\n\n<div class="fixed-bottom"><app-notification></app-notification></div>\n'},uZxZ:function(t,e){t.exports="\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3Bob25lYm9vay9waG9uZWJvb2suY29tcG9uZW50LmNzcyJ9 */"},zUnb:function(t,e,n){"use strict";n.r(e);var i=n("CcnG"),o=n("ToYH"),a=n("mrSG"),s=n("ZYjt"),r=n("t/Na"),l=n("gIcY"),c=n("ZYCi"),p=function(){function t(){}return t.prototype.ngOnInit=function(){},t=a.b([Object(i.n)({selector:"app-main",template:n("lsP6"),styles:[n("Aqmg")]}),a.d("design:paramtypes",[])],t)}(),d=function(){return function(){}}(),u=function(){function t(){this.notifications=[],this.currentCount=0}return t.prototype.addNotification=function(t,e){var n=this,i=new d;i.id=this.currentCount,this.currentCount++,i.resultType=t,i.text=e,this.notifications.push(i),setTimeout(function(){return n.closeNotification(i)},3e3)},t.prototype.closeNotification=function(t){for(var e=0;e<this.notifications.length;e++)if(this.notifications[e].id===t.id){this.notifications.splice(e,1);break}},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[])],t)}(),m=function(){return function(){}}(),b=(function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.currUser=new m,this.loggedin=!1,this.loginUrl="api/login",this.logoutUrl="api/logout",this.registerUrl="api/register",this.myselfUrl="api/myself",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})}}return t.prototype.login=function(t,e){var n=this;this.currUser.username=t,this.currUser.password=e,this.http.post(this.loginUrl,this.currUser,this.httpOptions).subscribe(function(t){null!==t.payload?(n.loggedin=!0,n.currUser.username=t.payload.username,n.currUser.email=t.payload.email,n.currUser.name=t.payload.name,n.notificationService.addNotification(t.resultType,t.text),n.router.navigate(["/campaign"])):n.notificationService.addNotification(t.resultType,t.text)},function(t){n.notificationService.addNotification("failure","Error in logging in")}),this.currUser.password=""},t.prototype.register=function(t,e,n,i,o){var a=this;this.currUser.username=t,this.currUser.password=e,this.currUser.email=n,this.currUser.name=i,this.currUser.secretCode=o,this.http.post(this.registerUrl,this.currUser,this.httpOptions).subscribe(function(t){null!==t.payload?(a.loggedin=!0,a.notificationService.addNotification(t.resultType,t.text),a.router.navigate(["/campaign"]),a.currUser.username=t.payload.username,a.currUser.email=t.payload.email,a.currUser.name=t.payload.name):a.notificationService.addNotification(t.resultType,t.text)}),this.currUser.secretCode=""},t.prototype.logout=function(){var t=this;this.http.post(this.logoutUrl,"",this.httpOptions).subscribe(function(e){t.notificationService.addNotification(e.resultType,e.text),t.loggedin=!1,t.currUser=new m,t.router.navigate(["/"])})},t.prototype.getUser=function(){var t=this;return this.http.get(this.myselfUrl,this.httpOptions).subscribe(function(e){t.currUser=e,""!==t.currUser.username?t.loggedin=!0:t.router.navigate(["/"]),"/"!==t.router.url&&""!==t.router.url||t.router.navigate(["/campaign"])},function(e){t.router.navigate(["/"])}),this.currUser},t.prototype.getUserObs=function(){return this.http.get(this.myselfUrl,this.httpOptions)},t.prototype.updateUser=function(t){var e=this;this.currUser=t,this.http.put(this.myselfUrl,this.currUser,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text)},function(t){e.notificationService.addNotification("failure","Error in updating profile")}),this.currUser.password=""},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),h=function(){function t(t,e){this.authService=t,this.router=e}return t.prototype.login=function(){this.authService.login(this.username,this.password)},t.prototype.routeRegister=function(){this.router.navigate(["/register"])},t.prototype.ngOnInit=function(){},t=a.b([Object(i.n)({selector:"app-login",template:n("0KVQ"),styles:[n("n7sk")]}),a.d("design:paramtypes",[b,c.b])],t)}(),v=function(){function t(t){this.authService=t,this.username="",this.password="",this.email="",this.name="",this.secretCode=""}return t.prototype.register=function(){this.authService.register(this.username,this.password,this.email,this.name,this.secretCode)},t.prototype.ngOnInit=function(){},t=a.b([Object(i.n)({selector:"app-register",template:n("ZlTE"),styles:[n("+nPA")]}),a.d("design:paramtypes",[b])],t)}(),g=function(){return function(){}}(),f=(function(){}(),function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.campaigns=[],this.campaignUrl="/api/campaign",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.campaigns=[],this.getCampaigns()}return t.prototype.getCampaigns=function(){var t=this;this.http.get(this.campaignUrl).subscribe(function(e){t.campaigns=null===e?[]:e})},t.prototype.getCampaignObs=function(t){return this.http.get(this.campaignUrl+"/"+t.toString())},t.prototype.addCampaign=function(t){var e=this;this.http.post(this.campaignUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.campaigns.push(t.payload),null!==t.payload&&e.router.navigate(["/campaign"])},function(t){e.notificationService.addNotification("failure","Error in creating template")})},t.prototype.addCampaignRun=function(t){var e=this;this.http.post(this.campaignUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.campaigns.push(t.payload),null!==t.payload&&(e.startCampaign(t.payload).subscribe(),e.router.navigate(["/campaign"]))},function(t){e.notificationService.addNotification("failure","Error in creating template")})},t.prototype.deleteCampaign=function(t){var e=this;this.http.delete(this.campaignUrl+"/"+t.id.toString(),this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.router.navigate(["/campaign"])},function(t){e.notificationService.addNotification("failure","Error in deleting campaign")})},t.prototype.startCampaign=function(t){return this.http.get(this.campaignUrl+"/"+t.id.toString()+"/start")},t.prototype.pauseCampaign=function(t){return this.http.get(this.campaignUrl+"/"+t.id.toString()+"/pause")},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),w=function(){function t(t,e){this.campaignService=t,this.router=e}return t.prototype.ngOnInit=function(){var t=this;this.campaignService.getCampaigns();var e=setInterval(function(){t.campaignService.getCampaigns(),t.router.url.includes("/campaign")||clearInterval(e)},2e3)},t=a.b([Object(i.n)({selector:"app-campaign",template:n("XbfJ"),styles:[n("8glu")]}),a.d("design:paramtypes",[f,c.b])],t)}(),y=function(){return function(){}}(),x=(function(){}(),function(){function t(t,e){this.http=t,this.notificationService=e,this.twilioProviderSettings=new y,this.twilioUrl="/api/provider/twilio",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.providerEnums=[{name:"Twilio",tag:"twilio"}],this.getTwilioProvider()}return t.prototype.getTwilioProvider=function(){var t=this;this.http.get(this.twilioUrl,this.httpOptions).subscribe(function(e){t.twilioProviderSettings=e})},t.prototype.getTwilioProviderObs=function(){return this.http.get(this.twilioUrl,this.httpOptions)},t.prototype.updateTwilioProvider=function(t){var e=this;this.http.post(this.twilioUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.twilioProviderSettings=t.payload},function(t){e.notificationService.addNotification("failure","Error in updating Twilio provider")})},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,u])],t)}()),S=function(){return function(){}}(),T=function(){return function(){}}(),I=(function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.phonebooks=[],this.phonebookUrl="/api/phonebook",this.phonebookImportUrl="/api/import-phonebook",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.getPhonebooks()}return t.prototype.getPhonebooks=function(){var t=this;this.http.get(this.phonebookUrl).subscribe(function(e){t.phonebooks=null===e?[]:e})},t.prototype.getPhonebookObs=function(t){return this.http.get(this.phonebookUrl+"/"+t.toString())},t.prototype.addPhonebook=function(t){var e=this;this.http.post(this.phonebookUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.phonebooks.push(t.payload),null!==t.payload&&e.router.navigate(["/phonebook"])},function(t){e.notificationService.addNotification("failure","Error in creating phonebook")})},t.prototype.editPhonebook=function(t){var e=this;this.http.put(this.phonebookUrl+"/"+t.id.toString(),t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),null!==t.payload&&e.router.navigate(["/phonebook"])},function(t){e.notificationService.addNotification("failure","Error in editing phonebook")})},t.prototype.deletePhonebook=function(t){var e=this;this.http.delete(this.phonebookUrl+"/"+t.id.toString(),this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.router.navigate(["/phonebook"])},function(t){e.notificationService.addNotification("failure","Error in deleting phonebook")})},t.prototype.uploadPhonebook=function(t){var e=new FormData;return e.append("phonebookFile",t),this.http.post(this.phonebookImportUrl,e)},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),k=function(){return function(){}}(),C=(function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.textTemplates=[],this.templateUrl="/api/text-template",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.getTextTemplates()}return t.prototype.getTextTemplates=function(){var t=this;this.http.get(this.templateUrl).subscribe(function(e){t.textTemplates=null===e?[]:e})},t.prototype.getTextTemplateObs=function(t){return this.http.get(this.templateUrl+"/"+t.toString())},t.prototype.addTextTemplate=function(t){var e=this;this.http.post(this.templateUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.textTemplates.push(t.payload),null!==t.payload&&e.router.navigate(["/text-template"])},function(t){e.notificationService.addNotification("failure","Error in creating template")})},t.prototype.deleteTextTemplate=function(t){var e=this;this.http.delete(this.templateUrl+"/"+t.id.toString(),this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.router.navigate(["/text-template"])},function(t){e.notificationService.addNotification("failure","Error in deleting text template")})},t.prototype.editTextTemplate=function(t){var e=this;this.http.put(this.templateUrl+"/"+t.id.toString(),t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),null!==t.payload&&e.router.navigate(["/text-template"])},function(t){e.notificationService.addNotification("failure","Error in editing text template")})},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),N=function(){return function(){}}(),U=(function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.wTemplateEnum=[{name:"Redirect Based On User Agent",tag:"redirect"},{name:"Credentials Harvesting",tag:"harvester"}],this.templateUrl="/api/web-template",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.webTemplates=[],this.getWebTemplates()}return t.prototype.getWebTemplates=function(){var t=this;this.http.get(this.templateUrl).subscribe(function(e){t.webTemplates=null===e?[]:e})},t.prototype.addWebTemplate=function(t){var e=this;this.http.post(this.templateUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.webTemplates.push(t.payload),null!==t.payload&&e.router.navigate(["/web-template"])},function(t){e.notificationService.addNotification("failure","Error in creating template")})},t.prototype.deleteWebTemplate=function(t){var e=this;this.http.delete(this.templateUrl+"/"+t.id.toString(),this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.router.navigate(["/web-template"])},function(t){e.notificationService.addNotification("failure","Error in deleting web template")})},t.prototype.editWebTemplate=function(t){var e=this;this.http.put(this.templateUrl+"/"+t.id.toString(),t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),null!==t.payload&&e.router.navigate(["/web-template"])},function(t){e.notificationService.addNotification("failure","Error in editing web template")})},t.prototype.getWebTemplateObs=function(t){return this.http.get(this.templateUrl+"/"+t.toString())},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),O=function(){function t(t,e,n,i,o,a){this.campaignService=t,this.router=e,this.providerService=n,this.phonebookService=i,this.textTemplateService=o,this.webTemplateService=a,this.newCampaign=new g,this.templateStr="",this.previewStr=""}return t.prototype.submitNewCampaign=function(){this.campaignService.addCampaign(this.newCampaign)},t.prototype.submitNewCampaignRun=function(){this.campaignService.addCampaignRun(this.newCampaign)},t.prototype.updatePreviews=function(){var t=this;0!==this.newCampaign.textTemplateId&&0!==this.newCampaign.phonebookId?this.phonebookService.getPhonebookObs(this.newCampaign.phonebookId).subscribe(function(e){t.textTemplateService.getTextTemplateObs(t.newCampaign.textTemplateId).subscribe(function(n){t.templateStr=n.templateStr;var i=t.templateStr;i=(i=(i=(i=(i=i.replace("{firstName}",e.records[0].firstName)).replace("{lastName}",e.records[0].lastName)).replace("{alias}",e.records[0].alias)).replace("{phoneNumber}",e.records[0].phoneNumber)).replace("{url}","https://www.example.com/eR2c1"),t.previewStr=i})}):(this.templateStr="",this.previewStr="")},t.prototype.ngOnInit=function(){this.newCampaign.textTemplateId=0,this.newCampaign.webTemplateId=0,this.newCampaign.phonebookId=0},t=a.b([Object(i.n)({selector:"app-campaign-new",template:n("6fdi"),styles:[n("MjFU")]}),a.d("design:paramtypes",[f,c.b,x,I,C,U])],t)}(),M=function(){function t(t,e,n,i,o){this.campaignService=t,this.router=e,this.route=n,this.notificationService=i,this.http=o,this.currCampaign=new g,this.id=0}return t.prototype.downloadVisits=function(t){var e=this;fetch("/api/jobs/"+t+"/visits").then(function(t){return t.blob()}).then(function(n){var i=window.URL.createObjectURL(n),o=document.createElement("a");o.style.display="none",o.href=i,o.download="visits-"+t+".csv",document.body.appendChild(o),o.click(),window.URL.revokeObjectURL(i),e.notificationService.addNotification("success","Successfully retrived web visits")}).catch(function(){return e.notificationService.addNotification("failure","Failed to download web visits")})},t.prototype.startCampaign=function(){var t=this;this.campaignService.startCampaign(this.currCampaign).subscribe(function(e){t.notificationService.addNotification(e.resultType,e.text),t.campaignService.getCampaignObs(t.id).subscribe(function(e){t.currCampaign=e})},function(e){t.notificationService.addNotification("failure","Error in starting campaign")})},t.prototype.pauseCampaign=function(){var t=this;this.campaignService.pauseCampaign(this.currCampaign).subscribe(function(e){t.notificationService.addNotification(e.resultType,e.text)},function(e){t.notificationService.addNotification("failure","Error in pausing campaign")})},t.prototype.deleteCampaign=function(){this.campaignService.deleteCampaign(this.currCampaign)},t.prototype.updateThisCampaign=function(){var t=this;this.campaignService.getCampaignObs(this.id).subscribe(function(e){t.currCampaign=e})},t.prototype.ngOnInit=function(){var t=this;this.route.params.subscribe(function(e){t.id=parseInt(e.id,10)}),this.updateThisCampaign();var e=setInterval(function(){t.updateThisCampaign(),t.router.url.includes("/campaign")||clearInterval(e)},2e3)},t=a.b([Object(i.n)({selector:"app-campaign-view",template:n("2eZ0"),styles:[n("Q1uh")]}),a.d("design:paramtypes",[f,c.b,c.a,u,r.a])],t)}(),L=function(){function t(t){this.phonebookService=t}return t.prototype.ngOnInit=function(){this.phonebookService.getPhonebooks()},t=a.b([Object(i.n)({selector:"app-phonebook",template:n("LOYK"),styles:[n("uZxZ")]}),a.d("design:paramtypes",[I])],t)}(),j=function(){function t(t,e,n){this.phonebookService=t,this.router=e,this.route=n,this.id=0,this.newPhonebook=new S,this.newPhoneRecords=[],this.additionalRecord=new T}return t.prototype.insertAdditionalRecord=function(){this.newPhoneRecords=this.newPhoneRecords.concat(this.additionalRecord),this.additionalRecord=new T,this.additionalRecord.phoneNumber=""},t.prototype.importPhoneRecords=function(t){var e=this;this.phonebookService.uploadPhonebook(t.item(0)).subscribe(function(t){e.newPhoneRecords=e.newPhoneRecords.concat(t)})},t.prototype.submitNewPhonebook=function(){"/phonebook/new"===this.router.url?(""!==this.additionalRecord.phoneNumber&&this.insertAdditionalRecord(),this.newPhonebook.records=this.newPhoneRecords,this.phonebookService.addPhonebook(this.newPhonebook)):this.editPhonebook()},t.prototype.deletePhonebook=function(){this.phonebookService.deletePhonebook(this.newPhonebook)},t.prototype.editPhonebook=function(){this.newPhonebook.records=this.newPhoneRecords,this.phonebookService.editPhonebook(this.newPhonebook)},t.prototype.ngOnInit=function(){var t=this;if(this.additionalRecord=new T,this.additionalRecord.phoneNumber="","/phonebook/new"!==this.router.url){this.route.params.subscribe(function(e){t.id=parseInt(e.id,10),t.phonebookService.getPhonebookObs(t.id).subscribe(function(e){t.newPhonebook=e,t.newPhoneRecords=t.newPhonebook.records})})}},t=a.b([Object(i.n)({selector:"app-phonebook-new",template:n("3Swe"),styles:[n("+M5x")]}),a.d("design:paramtypes",[I,c.b,c.a])],t)}(),W=function(){function t(t){this.textTemplateService=t}return t.prototype.ngOnInit=function(){this.textTemplateService.getTextTemplates()},t=a.b([Object(i.n)({selector:"app-text-template",template:n("CpHs"),styles:[n("/ZKd")]}),a.d("design:paramtypes",[C])],t)}(),X=function(){function t(t,e,n){this.textTemplateService=t,this.router=e,this.route=n,this.newTextTemplate=new k,this.id=0}return t.prototype.submitNewTextTemplate=function(){"/text-template/new"===this.router.url?this.textTemplateService.addTextTemplate(this.newTextTemplate):this.editTextTemplate()},t.prototype.updatePreview=function(){var t="";t=(t=(t=(t=(t=(t=this.newTextTemplate.templateStr).replace("{firstName}","John")).replace("{lastName}","Smith")).replace("{alias}","Johnny")).replace("{phoneNumber}","+6598765432")).replace("{url}","https://www.example.com/eR2c1"),this.previewStr=t},t.prototype.deleteTextTemplate=function(){this.textTemplateService.deleteTextTemplate(this.newTextTemplate)},t.prototype.editTextTemplate=function(){this.textTemplateService.editTextTemplate(this.newTextTemplate)},t.prototype.ngOnInit=function(){var t=this;if("/text-template/new"!==this.router.url){this.route.params.subscribe(function(e){t.id=parseInt(e.id,10),t.textTemplateService.getTextTemplateObs(t.id).subscribe(function(e){t.newTextTemplate=e,t.updatePreview()})})}},t=a.b([Object(i.n)({selector:"app-text-template-new",template:n("kt9D"),styles:[n("/+rS")]}),a.d("design:paramtypes",[C,c.b,c.a])],t)}(),Z=function(){function t(t){this.providerService=t,this.currTwilioProvider=new y}return t.prototype.submitProviders=function(){this.providerService.updateTwilioProvider(this.currTwilioProvider)},t.prototype.ngOnInit=function(){var t=this;this.providerService.getTwilioProviderObs().subscribe(function(e){t.currTwilioProvider=e})},t=a.b([Object(i.n)({selector:"app-provider",template:n("ZgUC"),styles:[n("gO/L")]}),a.d("design:paramtypes",[x])],t)}(),J=function(){function t(t){this.authService=t}return t.prototype.updateUser=function(){this.authService.updateUser(this.currUser)},t.prototype.ngOnInit=function(){var t=this;this.authService.getUserObs().subscribe(function(e){t.currUser=JSON.parse(JSON.stringify(e))})},t=a.b([Object(i.n)({selector:"app-profile",template:n("JtO7"),styles:[n("fMGI")]}),a.d("design:paramtypes",[b])],t)}(),z=function(){function t(t){this.webTemplateService=t}return t.prototype.ngOnInit=function(){this.webTemplateService.getWebTemplates()},t=a.b([Object(i.n)({selector:"app-web-template",template:n("8lfH"),styles:[n("kmT1")]}),a.d("design:paramtypes",[U])],t)}(),R=function(){function t(t,e,n){this.webTemplateService=t,this.router=e,this.route=n,this.newWebTemplate=new N,this.id=0}return t.prototype.submitNewWebTemplate=function(){"/web-template/new"===this.router.url?this.webTemplateService.addWebTemplate(this.newWebTemplate):this.editWebTemplate()},t.prototype.deleteWebTemplate=function(){this.webTemplateService.deleteWebTemplate(this.newWebTemplate)},t.prototype.editWebTemplate=function(){this.webTemplateService.editWebTemplate(this.newWebTemplate)},t.prototype.ngOnInit=function(){var t=this;if("/web-template/new"!==this.router.url){this.route.params.subscribe(function(e){t.id=parseInt(e.id,10),t.webTemplateService.getWebTemplateObs(t.id).subscribe(function(e){t.newWebTemplate=e})})}},t=a.b([Object(i.n)({selector:"app-web-template-new",template:n("n2gn"),styles:[n("RHam")]}),a.d("design:paramtypes",[U,c.b,c.a])],t)}(),P=function(){return function(){}}(),Y=(function(){}(),function(){function t(t,e,n){this.http=t,this.router=e,this.notificationService=n,this.globalSettings=new P,this.globalSettingsUrl="api/globalsettings",this.httpOptions={headers:new r.c({"Content-Type":"application/json"})},this.getGlobalSettings()}return t.prototype.getGlobalSettings=function(){var t=this;this.http.get(this.globalSettingsUrl,this.httpOptions).subscribe(function(e){t.globalSettings=e})},t.prototype.getGlobalSettingsObs=function(){return this.http.get(this.globalSettingsUrl,this.httpOptions)},t.prototype.updateGlobalSettings=function(t){var e=this;this.http.put(this.globalSettingsUrl,t,this.httpOptions).subscribe(function(t){e.notificationService.addNotification(t.resultType,t.text),e.globalSettings=t.payload},function(t){e.notificationService.addNotification("failure","Error in updating settings")})},t=a.b([Object(i.A)({providedIn:"root"}),a.d("design:paramtypes",[r.a,c.b,u])],t)}()),G=function(){function t(t){this.globalSettingsService=t,this.tempSettings=new P}return t.prototype.updateGlobalSettings=function(){this.tempSettings.secretRegistrationCode=this.displaySettings.secretRegistrationCode,this.tempSettings.webTemplatePrefix=this.displaySettings.webTemplatePrefix,this.tempSettings.webTemplateRoute=this.displaySettings.webTemplateRoute,this.tempSettings.threadsPerCampaign=parseInt(this.displaySettings.threadsPerCampaign,10)+0,this.tempSettings.bcryptCost=parseInt(this.displaySettings.bcryptCost,10),this.tempSettings.maxRequestRetries=parseInt(this.displaySettings.maxRequestRetries,10),this.tempSettings.waitBeforeRetry=parseInt(this.displaySettings.waitBeforeRetry,10),this.globalSettingsService.updateGlobalSettings(this.tempSettings)},t.prototype.ngOnInit=function(){var t=this;this.globalSettingsService.getGlobalSettingsObs().subscribe(function(e){console.log(e),t.displaySettings=e})},t=a.b([Object(i.n)({selector:"app-global-settings",template:n("X2v6"),styles:[n("Onsm")]}),a.d("design:paramtypes",[Y])],t)}(),F=[{path:"",component:p},{path:"login",component:h},{path:"register",component:v},{path:"profile",component:J},{path:"campaign",component:w},{path:"campaign/new",component:O},{path:"campaign/:id/view",component:M},{path:"phonebook",component:L},{path:"phonebook/new",component:j},{path:"phonebook/:id/edit",component:j},{path:"text-template",component:W},{path:"text-template/new",component:X},{path:"text-template/:id/edit",component:X},{path:"provider",component:Z},{path:"web-template",component:z},{path:"web-template/new",component:R},{path:"web-template/:id/edit",component:R},{path:"global-settings",component:G}],B=function(){function t(){}return t=a.b([Object(i.I)({imports:[c.c.forRoot(F)],exports:[c.c]})],t)}(),V=function(){function t(t,e){this.router=t,this.authService=e,this.title="tapit-frontend",this.navlinks=[{link:"/campaign",name:"Campaigns",loginOnly:!0},{link:"/phonebook",name:"Phonebook",loginOnly:!0},{link:"/text-template",name:"Text Templates",loginOnly:!0},{link:"/web-template",name:"Web Templates",loginOnly:!0}],e.getUser()}return t=a.b([Object(i.n)({selector:"app-root",template:n("nH/3"),styles:[n("A3xY")]}),a.d("design:paramtypes",[c.b,b])],t)}(),A=function(){function t(t){this.notificationService=t}return t.prototype.ngOnInit=function(){},t=a.b([Object(i.n)({selector:"app-notification",template:n("99W7"),styles:[n("GQ/r")]}),a.d("design:paramtypes",[u])],t)}(),Q=function(){function t(){}return t=a.b([Object(i.I)({declarations:[V,p,w,O,A,L,j,W,X,h,v,Z,J,M,z,R,G],imports:[s.a,B,l.a,r.b],providers:[],bootstrap:[V]})],t)}();Object(o.a)().bootstrapModule(Q).catch(function(t){return console.error(t)})}},[[0,0,5]]]);
|
|
//# sourceMappingURL=main.js.map
|