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