From 767a25700873761f03004a830c74ac3c6c924c52 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Sat, 26 Mar 2016 14:56:55 +0100
Subject: [PATCH] Fix duniter#373 Won't start if network configuration has
 changed

---
 .../main/home/tabs/OverviewController.js      | 33 +++++++++++++++++++
 app/js/lib/conf/i18n/en.json                  |  2 ++
 app/js/lib/conf/routes.js                     |  3 +-
 app/styles/main.styl                          |  7 +++-
 app/views/main/home/tabs/overview.jade        | 22 +++++++++++--
 5 files changed, 62 insertions(+), 5 deletions(-)

diff --git a/app/js/controllers/main/home/tabs/OverviewController.js b/app/js/controllers/main/home/tabs/OverviewController.js
index 5fc6b2e..352e455 100644
--- a/app/js/controllers/main/home/tabs/OverviewController.js
+++ b/app/js/controllers/main/home/tabs/OverviewController.js
@@ -38,8 +38,41 @@ module.exports = ($scope, BMA, UIUtils, summary, bmapi, ws) => {
       $scope.$apply();
     });
   }
+  
+  $scope.reconfigure_network = () => co(function *() {
+    $scope.reconfiguring = true;
+    let delay = Q.delay(1000);
+    try {
+      let netinferfaces = yield BMA.webmin.network.interfaces();
+      let conf = {};
+      conf.local_ipv4 = netinferfaces.auto.local.ipv4 || '';
+      conf.local_ipv6 = netinferfaces.auto.local.ipv6 || '';
+      conf.remote_ipv4 = netinferfaces.auto.remote.ipv4 || '';
+      conf.remote_ipv6 = netinferfaces.auto.remote.ipv6 || '';
+      conf.lport = netinferfaces.auto.local.port || 9330;
+      conf.rport = netinferfaces.auto.remote.port || 9330;
+      conf.upnp = netinferfaces.auto.remote.upnp || false;
+      conf.dns = netinferfaces.auto.remote.dns || '';
+      yield BMA.webmin.server.netConf({
+        conf: conf
+      });
+      yield delay;
+      $scope.should_reconfigure = false;
+      UIUtils.toast('general.network.reconf_ok');
+      $scope.$apply();
+    } catch (e) {
+      yield delay;
+      $scope.reconfiguring = false;
+      $scope.$apply();
+    }
+  });
 
   return co(function *() {
     yield $scope.startServer();
+    try {
+      yield bmapi.network.peering.self();
+    } catch (e) {
+      $scope.should_reconfigure = true;
+    }
   });
 };
diff --git a/app/js/lib/conf/i18n/en.json b/app/js/lib/conf/i18n/en.json
index 7285d45..f8bf2b7 100644
--- a/app/js/lib/conf/i18n/en.json
+++ b/app/js/lib/conf/i18n/en.json
@@ -5,6 +5,7 @@
   "general.server.started": "Server started",
   "general.server.stopped": "Server stopped",
   "general.choose_option": "Choose your option",
+  "general.network.reconf_ok": "Reconfiguration success",
   "global.button.validate": "Validate",
   "global.button.start": "Start",
   "err.unknown": "Unknown error",
@@ -87,6 +88,7 @@
   "home.current.powMin": "Common difficulty level",
   "home.current.mmass": "Monetary mass",
   "home.tabs.overview": "Overview",
+  "home.tabs.overview.should_reconfigure": "Your configuration has changed and your node is no more reachable from the network. You should reconfigure it to have a functional node.",
   "home.tabs.logs": "Logs",
   "home.tabs.logs.follow.logs": "Follow logs",
   "home.tabs.logs.pause.logs": "Pause logs",
diff --git a/app/js/lib/conf/routes.js b/app/js/lib/conf/routes.js
index 7bab399..60eb657 100644
--- a/app/js/lib/conf/routes.js
+++ b/app/js/lib/conf/routes.js
@@ -110,8 +110,7 @@ module.exports = (app) => {
         startHttp: (BMA) => BMA.webmin.server.http.start(),
         bmapi: (BMA, summary) => co(function *() {
           return BMA.instance(summary.host);
-        }),
-        parameters: (bmapi) => bmapi.currency.parameters()
+        })
       },
       controller: 'OverviewController'
     }).
diff --git a/app/styles/main.styl b/app/styles/main.styl
index f695209..a5c2953 100644
--- a/app/styles/main.styl
+++ b/app/styles/main.styl
@@ -182,4 +182,9 @@ blockquote
   background-color: rgba(217, 0, 255, 0.14)
 
 .log-time
-  color: #888888
\ No newline at end of file
+  color: #888888
+
+.network-alert .card-content
+  p
+    margin-top 10px
+    margin-bottom 20px
\ No newline at end of file
diff --git a/app/views/main/home/tabs/overview.jade b/app/views/main/home/tabs/overview.jade
index e6b20af..349116e 100644
--- a/app/views/main/home/tabs/overview.jade
+++ b/app/views/main/home/tabs/overview.jade
@@ -1,5 +1,23 @@
-.container.home
-  .row
+.container
+  .row(ng-show="should_reconfigure")
+    .card.network-alert
+      blockquote.card-content.left-align
+        .center
+          i.fa.fa-globe.fa-5x
+          h6.card-title(translate="configuration.create_network.title")
+        .left-align
+          p {{ 'home.tabs.overview.should_reconfigure' | translate }}
+        .center(ng-if="!reconfiguring")
+          button.btn-large.waves-effect.waves-light(ng-click="reconfigure_network()")
+            i.left.fa.fa-magic
+            span(translate="configuration.create_network.button.autoconf")
+        .center(ng-if="reconfiguring")
+          .preloader-wrapper.active
+            .spinner-layer.spinner-blue-only
+              .circle-clipper.left
+                .circle
+
+  .row.home
     .col.s6.m3
       .card#server_state
         .card-content
-- 
GitLab