diff --git a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.html b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.html
index 27bab968..7aa5a930 100644
--- a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.html
+++ b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.html
@@ -142,7 +142,14 @@
{{image.filename}}
-
+
+
diff --git a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.scss b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.scss
index f2f9b3c3..1eb66552 100644
--- a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.scss
+++ b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.scss
@@ -50,6 +50,8 @@
.create-button {
width: 100%;
+ margin-top: 10px;
+ margin-bottom: 10px;
}
.radio-button {
diff --git a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.ts b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.ts
index dc678ef4..fb3cd156 100644
--- a/src/app/components/project-map/new-template-dialog/new-template-dialog.component.ts
+++ b/src/app/components/project-map/new-template-dialog/new-template-dialog.component.ts
@@ -4,7 +4,7 @@ import { Server } from '../../../models/server';
import { Node } from '../../../cartography/models/node';
import { Project } from '../../../models/project';
import { ApplianceService } from '../../../services/appliances.service';
-import { Appliance } from '../../../models/appliance';
+import { Appliance, Image } from '../../../models/appliance';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { FileUploader, FileItem, ParsedResponseHeaders } from 'ng2-file-upload';
import { ToasterService } from '../../../services/toaster.service';
@@ -29,6 +29,7 @@ export class NewTemplateDialogComponent implements OnInit {
@Input() project: Project;
uploader: FileUploader;
+ uploaderImage: FileUploader;
public action: string = 'install';
public actionTitle: string = 'Install appliance from server';
@@ -94,6 +95,19 @@ export class NewTemplateDialogComponent implements OnInit {
this.uploader.onSuccessItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {
this.toasterService.success('Appliance imported succesfully');
};
+
+ this.uploaderImage = new FileUploader({});
+ this.uploaderImage.onAfterAddingFile = file => {
+ file.withCredentials = false;
+ };
+
+ this.uploaderImage.onErrorItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {
+ this.toasterService.error('An error has occured');
+ };
+
+ this.uploaderImage.onSuccessItem = (item: FileItem, response: string, status: number, headers: ParsedResponseHeaders) => {
+ this.toasterService.success('Image imported succesfully');
+ };
}
addAppliance(event): void {
@@ -192,6 +206,37 @@ export class NewTemplateDialogComponent implements OnInit {
dialogRef.componentInstance.appliance = object;
}
+ importImage(event) {
+ let name = event.target.files[0].name.split('-')[0];
+ let fileName = event.target.files[0].name;
+ let file = event.target.files[0];
+ let fileReader: FileReader = new FileReader();
+ let emulator;
+
+ fileReader.onloadend = () => {
+ let appliance = JSON.parse(fileReader.result as string);
+
+ if (appliance.docker) emulator = 'docker';
+ if (appliance.dynamips) emulator = 'dynamips';
+ if (appliance.iou) emulator = 'iou';
+ if (appliance.qemu) emulator = 'qemu';
+
+ const url = this.applianceService.getUploadPath(this.server, emulator, fileName);
+ this.uploader.queue.forEach(elem => (elem.url = url));
+
+ const itemToUpload = this.uploader.queue[0];
+ (itemToUpload as any).options.disableMultipart = true;
+
+ this.uploader.uploadItem(itemToUpload);
+ };
+
+ fileReader.readAsText(file);
+ }
+
+ downloadImage(image: Image) {
+ window.open(image.download_url);
+ }
+
create() {
}