From 546cec0932f3821f4fb169607d6093d3bd281a88 Mon Sep 17 00:00:00 2001
From: Maximilian Betz <Maximilian.Betz@awi.de>
Date: Wed, 16 Mar 2022 12:33:08 +0100
Subject: [PATCH] updated gathering token on each sync

---
 README.md              |   1 +
 lib/configuration.dart |   1 +
 lib/viewevents.dart    | 125 +++++++++++++++++++++++++++--------------
 3 files changed, 86 insertions(+), 41 deletions(-)

diff --git a/README.md b/README.md
index 5429024..57f1286 100644
--- a/README.md
+++ b/README.md
@@ -57,4 +57,5 @@ a-z , A-Z , _ , 0-9 , ,(Comma) , ( , ) , + , - , . , :
  
 ## TODOs
 - FlutterSecureStorage   for user password?
+
  
diff --git a/lib/configuration.dart b/lib/configuration.dart
index 245a4fb..d7495e0 100644
--- a/lib/configuration.dart
+++ b/lib/configuration.dart
@@ -29,6 +29,7 @@ Future<int> login() async {
     debugPrint('Login success');
     //TODO: display feedback to user that credentials are correct
 
+    debugPrint(response.headers['set-cookie']?.split(';')[0].toString());
     debugPrint(response.body.toString());
     debugPrint(response.headers.toString());
     debugPrint(response.headers['set-cookie']);
diff --git a/lib/viewevents.dart b/lib/viewevents.dart
index 55e57ef..a18144f 100644
--- a/lib/viewevents.dart
+++ b/lib/viewevents.dart
@@ -15,60 +15,103 @@ class ViewEvents extends StatefulWidget {
 class _ViewEvents extends State<ViewEvents> {
   int _synccounter = 0;  //For displaying progress during event upload
 
+  Future<String?> login() async {
+    String? token;
+    ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
+
+    String url = 'https://sandbox.sensor.awi.de/rest/sensors/contacts/login';
+    debugPrint("Start login to : " + url);
+
+    Map<String, dynamic> body = {'username': configuration.loginInformation.mail, 'authPassword': configuration.loginInformation.password};
+    String encodedBody = body.keys.map((key) => "$key=${body[key]}").join("&");
+    debugPrint(encodedBody);
+
+    final response = await http.post(Uri.parse(url),
+        body: encodedBody,
+        headers: {
+          'Accept' : 'application/json',
+          'Content-Type' : 'application/x-www-form-urlencoded'
+        },
+        encoding: Encoding.getByName("utf-8")
+    );
+
+    if (response.statusCode == 200) {
+      debugPrint('Login success');
+      //TODO: display feedback to user that credentials are correct
+
+      token = response.headers['set-cookie']?.split(';')[0];
+
+      debugPrint("Token:" + token!);
+      debugPrint(response.body.toString());
+      debugPrint(response.headers.toString());
+      debugPrint(response.headers['set-cookie']);
+
+
+    } else {
+      debugPrint('Header: ' + response.headers.toString());
+      debugPrint('Body: ' + response.body.toString());
+      debugPrint('StatusCode: ' + response.statusCode.toString());
+      throw Exception('Failed to login');
+
+
+    }
+    return token;
+  }
+
   Future<bool> syncEvents() async {
     final EventStoreInstance events = EventStoreInstance();
     final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
+    String? token = await login();
 
-    String baseUrl = 'https://sandbox.sensor.awi.de/rest/sensors/events/putEvent/';
-    String url = '';
-
-    _synccounter = events.getPendingEventCount();
-    debugPrint('Number of Events: ' + events.events.length.toString());
-    debugPrint('Number of Pending Events: ' + _synccounter.toString());
-    var index = 0;
-    for (var event in events.events){
-      if (event.status == 'PENDING') {
-        debugPrint('Idx: ' + index.toString() + ' ' + event.toSensorJson().toString());
-        index++;
-
-        url = baseUrl + event.id.toString() + '?createVersion=false';
-        debugPrint('XXX ' + Uri.parse(url).toString());
-        final response = await http.put(Uri.parse(url),
-          headers: {
-            "Content-Type": "application/json",
-            "Cookie": "x-auth-token=72d9d4d20a33f87edca7e1ba01ce8db8"
-          },
-          body: event.toSensorJson().toString(),
-          encoding: Encoding.getByName("utf-8"),
-        );
-
-        if (response.statusCode == 201) {
-          _synccounter--;
-          debugPrint('put success, remaining events: ' +_synccounter.toString());
-          event.status = 'EXPORTED';  //Update event status so that it is only exported once.
+    if (token != null) {
+      String baseUrl = 'https://sandbox.sensor.awi.de/rest/sensors/events/putEvent/';
+      String url = '';
 
-          //if(mounted){
-          //  setState(() { //refresh the UI
-          //  });}
+      _synccounter = events.getPendingEventCount();
+      debugPrint('Number of Events: ' + events.events.length.toString());
+      debugPrint('Number of Pending Events: ' + _synccounter.toString());
+      var index = 0;
+      for (var event in events.events) {
+        if (event.status == 'PENDING') {
+          debugPrint('Idx: ' + index.toString() + ' ' +
+              event.toSensorJson().toString());
+          index++;
 
-          setState(() {
+          url = baseUrl + event.id.toString() + '?createVersion=false';
+          debugPrint('XXX ' + Uri.parse(url).toString());
+          final response = await http.put(Uri.parse(url),
+            headers: {
+              "Content-Type": "application/json",
+              "Cookie": token
+            },
+            body: event.toSensorJson().toString(),
+            encoding: Encoding.getByName("utf-8"),
+          );
 
+          if (response.statusCode == 201) {
+            _synccounter--;
+            debugPrint(
+                'put success, remaining events: ' + _synccounter.toString());
+            event.status =
+            'EXPORTED'; //Update event status so that it is only exported once.
 
-          });
 
-          debugPrint(response.body.toString());
-          debugPrint(response.headers.toString());
-          debugPrint(response.headers['set-cookie']);
+            setState(() {});
 
-        } else {
-          debugPrint('Header: ' + response.headers.toString());
-          debugPrint('Body: ' + response.body.toString());
-          debugPrint('StatusCode: ' + response.statusCode.toString());
-          throw Exception('Failed to put.');
+            debugPrint(response.body.toString());
+            debugPrint(response.headers.toString());
+            debugPrint(response.headers['set-cookie']);
+          } else {
+            debugPrint('Header: ' + response.headers.toString());
+            debugPrint('Body: ' + response.body.toString());
+            debugPrint('StatusCode: ' + response.statusCode.toString());
+            throw Exception('Failed to put.');
+          }
         }
       }
+      return true;
     }
-    return true;
+    return false;
   }
 
   @override
-- 
GitLab