From 2e703472f175ec930a939b47cf87c11f6cb0d613 Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
Date: Mon, 8 May 2017 20:44:36 +0200
Subject: [PATCH] Fix crash on reconnects when server is down. Closes #163

---
 matterclient/matterclient.go | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/matterclient/matterclient.go b/matterclient/matterclient.go
index d234fb34..e579537b 100644
--- a/matterclient/matterclient.go
+++ b/matterclient/matterclient.go
@@ -108,13 +108,24 @@ func (m *MMClient) Login() error {
 	m.Client = model.NewClient(uriScheme + m.Credentials.Server)
 	m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}}
 	m.Client.HttpClient.Timeout = time.Second * 10
-	// bogus call to get the serverversion
-	m.Client.GetClientProperties()
-	if firstConnection && !supportedVersion(m.Client.ServerVersion) {
-		return fmt.Errorf("unsupported mattermost version: %s", m.Client.ServerVersion)
+
+	for {
+		d := b.Duration()
+		// bogus call to get the serverversion
+		m.Client.GetClientProperties()
+		if firstConnection && !supportedVersion(m.Client.ServerVersion) {
+			return fmt.Errorf("unsupported mattermost version: %s", m.Client.ServerVersion)
+		}
+		m.ServerVersion = m.Client.ServerVersion
+		if m.ServerVersion == "" {
+			m.log.Debugf("Server not up yet, reconnecting in %s", d)
+			time.Sleep(d)
+		} else {
+			m.log.Infof("Found version %s", m.ServerVersion)
+			break
+		}
 	}
-	m.ServerVersion = m.Client.ServerVersion
-	m.log.Infof("Found version %s", m.ServerVersion)
+	b.Reset()
 
 	var myinfo *model.Result
 	var appErr *model.AppError