diff --git a/scripts/requirements.txt b/scripts/requirements.txt
index 7378793c..00ed69b4 100644
--- a/scripts/requirements.txt
+++ b/scripts/requirements.txt
@@ -5,3 +5,5 @@ packaging==19.0
appdirs==1.4.3
psutil==5.6.7
jsonschema==2.6.0 # lock down jsonschema, 3.0 makes problems
+
+urllib3>=1.25.9 # not directly required, pinned by Snyk to avoid a vulnerability
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index f2be2aeb..ed3ce07d 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -282,6 +282,7 @@ import { ChangeHostnameDialogComponent } from './components/project-map/change-h
import { ApplianceInfoDialogComponent } from './components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import { InformationDialogComponent } from './components/dialogs/information-dialog.component';
import { TemplateNameDialogComponent } from './components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
+import { UpdatesService } from './services/updates.service';
@NgModule({
@@ -565,7 +566,8 @@ import { TemplateNameDialogComponent } from './components/project-map/new-templa
ServerResolve,
ConsoleGuard,
Title,
- ApplianceService
+ ApplianceService,
+ UpdatesService
],
entryComponents: [
AddServerDialogComponent,
diff --git a/src/app/components/project-map/console-wrapper/console-wrapper.component.html b/src/app/components/project-map/console-wrapper/console-wrapper.component.html
index 648d0f18..fc68a9c9 100644
--- a/src/app/components/project-map/console-wrapper/console-wrapper.component.html
+++ b/src/app/components/project-map/console-wrapper/console-wrapper.component.html
@@ -21,7 +21,7 @@
(mousedown)="toggleDragging(true)"
[ngStyle]="style"> -->
-
+
+
+
+ Updates
+ Check for updates
+
+
+
+
+
+
+
diff --git a/src/app/components/settings/settings.component.scss b/src/app/components/settings/settings.component.scss
index 41e3aed8..279e9631 100644
--- a/src/app/components/settings/settings.component.scss
+++ b/src/app/components/settings/settings.component.scss
@@ -3,3 +3,7 @@
display: flex;
padding: 10px;
}
+
+.fullWidth {
+ width: 100%;
+}
diff --git a/src/app/components/settings/settings.component.ts b/src/app/components/settings/settings.component.ts
index dadfaa5b..5ff17c4f 100644
--- a/src/app/components/settings/settings.component.ts
+++ b/src/app/components/settings/settings.component.ts
@@ -4,6 +4,7 @@ import { ToasterService } from '../../services/toaster.service';
import { ConsoleService } from '../../services/settings/console.service';
import { ThemeService } from '../../services/theme.service';
import { MapSettingsService } from '../../services/mapsettings.service';
+import { UpdatesService } from '../../services/updates.service';
@Component({
selector: 'app-settings',
@@ -20,7 +21,8 @@ export class SettingsComponent implements OnInit {
private toaster: ToasterService,
private consoleService: ConsoleService,
private themeService: ThemeService,
- public mapSettingsService: MapSettingsService
+ public mapSettingsService: MapSettingsService,
+ public updatesService: UpdatesService
) {}
ngOnInit() {
@@ -38,4 +40,8 @@ export class SettingsComponent implements OnInit {
setDarkMode(value: boolean) {
this.themeService.setDarkMode(value);
}
+
+ checkForUpdates() {
+ window.open("https://gns3.com/software");
+ }
}
diff --git a/src/app/services/updates.service.ts b/src/app/services/updates.service.ts
new file mode 100644
index 00000000..067cc078
--- /dev/null
+++ b/src/app/services/updates.service.ts
@@ -0,0 +1,11 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable()
+export class UpdatesService {
+ constructor(private httpClient: HttpClient) {}
+
+ getLatestVersion() {
+ return this.httpClient.get('http://update.gns3.net/');
+ }
+}