diff --git a/README.md b/README.md index 542902423d54825129e77e904fc9d7ae9b66d7f0..57f12869f01d755161446fef0cb53702f71f54a6 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 245a4fbf378d61c5c3107c816f5c2ec231650209..d7495e06d8450b19c95693df2674d76db1a620a7 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 55e57efda9021fef33dcaa4c49fcd05ca91b222b..a18144ff95d0bfc109acdb7fcd790f6db0277866 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