From 74cb1e4cfc60cd4e6885267b3da2dd53b05f0ad2 Mon Sep 17 00:00:00 2001
From: Maximilian Betz <Maximilian.Betz@awi.de>
Date: Tue, 8 Mar 2022 14:02:44 +0100
Subject: [PATCH] added login feature not working yet

---
 assets/awi_logo.png    | Bin 0 -> 7671 bytes
 lib/configuration.dart |   6 +-
 lib/datamodel.dart     |  27 +++++++-
 lib/login.dart         | 153 +++++++++++++++++++++++++++--------------
 lib/main.dart          |   3 +-
 lib/viewevents.dart    |   2 +-
 pubspec.yaml           |   3 +-
 7 files changed, 136 insertions(+), 58 deletions(-)
 create mode 100644 assets/awi_logo.png

diff --git a/assets/awi_logo.png b/assets/awi_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..6246037121002e6e99ead4898b08ef1f9f79d890
GIT binary patch
literal 7671
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

literal 0
HcmV?d00001

diff --git a/lib/configuration.dart b/lib/configuration.dart
index 8007b44..0ea45e2 100644
--- a/lib/configuration.dart
+++ b/lib/configuration.dart
@@ -7,7 +7,7 @@ import 'datamodel.dart';
 
 Future<List<Device>> updateDevices(int collectionId) async {
   debugPrint("Start HTTP GET Collection Devices. Collection Id: " + collectionId.toString());
-  String url = 'https://sensor.awi.de/rest/sensors/collections/getItemsOfCollection/' + collectionId.toString();
+  String url = 'https://sandbox.sensor.awi.de/rest/sensors/collections/getItemsOfCollection/' + collectionId.toString();
 
   // Get Access to local device and current event store.
   EventStoreInstance eventsStore = EventStoreInstance();
@@ -46,7 +46,7 @@ Future<List<Collection>> fetchCollections() async {
   List<Collection> collectionList = [];
 
   final response = await http
-      .get(Uri.parse('https://sensor.awi.de/rest/sensors/collections/getAllCollections?pointInTime=2018-07-03T12%3A30%3A55.389Z'));
+      .get(Uri.parse('https://sandbox.sensor.awi.de/rest/sensors/collections/getAllCollections?pointInTime=2018-07-03T12%3A30%3A55.389Z'));
 
   if (response.statusCode == 200) {
     return (json.decode(response.body) as List)
@@ -84,8 +84,6 @@ class _MyHomePageState extends State<Configuration> {
   Widget build(BuildContext context) {
 
     final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
-    //final CollectionStoreInstance collections = CollectionStoreInstance();
-    //final CollectionCurrentInstance activeCollection = CollectionCurrentInstance();
 
     return Scaffold(
       appBar: AppBar(
diff --git a/lib/datamodel.dart b/lib/datamodel.dart
index 7c8aa4d..cc65b9b 100644
--- a/lib/datamodel.dart
+++ b/lib/datamodel.dart
@@ -1,3 +1,5 @@
+import 'dart:convert';
+
 import 'package:shared_preferences/shared_preferences.dart';
 
 
@@ -107,15 +109,37 @@ class EventType{
   }
 }
 
+class SensorLogin{
+  String mail;
+  String password;
+  String token;
+
+  SensorLogin(
+      this.mail,
+      this.password,
+      this.token  //REST API access Token
+      );
+
+  String toJsonString() {
+    return '{ "username": $mail, "authPassword": $password }';
+  }
+
+  Map<String, dynamic> toJson() => {
+    "username": mail,
+    "authPassword": password
+  };
+}
+
+
 // Storage classes
 // ConfigurationStoreBase for Collection, devices, event types, login information
 // EventStoreBase for created event information.
 abstract class ConfigurationStoreBase {
   List<Collection> collections = [];
   Collection currentCollection = Collection(id: -1, description: '', collectionName: '');
-
   List<Device> devices = [];
   List<EventType> eventTypes = [];
+  SensorLogin loginInformation = SensorLogin('', '', '');
 
   Collection getCollectionFromName(String name) {
     for (var collection in collections) {
@@ -149,6 +173,7 @@ abstract class ConfigurationStoreBase {
     devices = [];
     eventTypes = [];
     currentCollection = Collection(id: -1, description: '', collectionName: '');
+    loginInformation = SensorLogin('', '', '');
   }
 }
 
diff --git a/lib/login.dart b/lib/login.dart
index c3c9588..ad4ec37 100644
--- a/lib/login.dart
+++ b/lib/login.dart
@@ -1,5 +1,46 @@
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
+import 'datamodel.dart';
+import 'dart:convert';
+import 'package:http/http.dart' as http;
+
+Future<int> login() async {
+  // Get Access to local configuration store. Token must be stored there!
+  ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
+
+  String url = 'https://sandbox.sensor.awi.de/rest/sensors/contacts/login';
+  debugPrint("Start login to : " + url);
+
+  final String body = jsonEncode(configuration.loginInformation);
+  debugPrint(body);
+
+  final response = await http.post(Uri.parse(url),
+      body: body,
+      headers: {
+        'Accept' : 'application/json',
+        'Content-Type' : 'application/x-www-form-urlencoded'
+      },
+      encoding: Encoding.getByName("utf-8")
+      );
+
+
+  if (response.statusCode == 200) {
+    debugPrint('Login success');
+    //TODO store token
+
+  } else {
+    debugPrint('Header: ' + response.headers.toString());
+    debugPrint('Body: ' + response.body.toString());
+    debugPrint('StatusCode: ' + response.statusCode.toString());
+    throw Exception('Failed to login');
+
+
+  }
+
+  return 0;
+}
+
+
 
 class LoginPage extends StatefulWidget{
   static String tag = 'login-page';
@@ -13,38 +54,46 @@ class _LoginPageState extends State<LoginPage> {
   @override
   Widget build(BuildContext context){
 
-    const logo = Hero(
-      tag: 'blabla',
-      child: CircleAvatar(
-        backgroundColor: Colors.transparent,
-        radius: 48.0,
-        child: Text('LOGIN'),
-      )
-    );
+    final ConfigurationStoreInstance configuration = ConfigurationStoreInstance();
 
-    final email = TextFormField(
-      keyboardType: TextInputType.emailAddress,
-      autofocus: false,
-      initialValue: '',
-      decoration: InputDecoration(
-        hintText: 'sensor e-mail address',
-        contentPadding: const EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
-        border: OutlineInputBorder(
-          borderRadius: BorderRadius.circular(32.0)
+    var logo = Hero(
+        tag: 'blabla',
+        child: CircleAvatar(
+          backgroundColor: Colors.transparent,
+          radius: 48.0,
+          child: Image.asset('assets/awi_logo.png'),
         )
-      )
     );
 
-    final password = TextFormField(
+    final email = TextFormField(
+        keyboardType: TextInputType.emailAddress,
         autofocus: false,
-        initialValue: '',
+        initialValue: configuration.loginInformation.mail,
         decoration: InputDecoration(
-            hintText: 'sensor password',
+            hintText: 'sensor e-mail address',
             contentPadding: const EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
             border: OutlineInputBorder(
                 borderRadius: BorderRadius.circular(32.0)
             )
-        )
+        ),
+      onChanged: (value) {
+        configuration.loginInformation.mail = value;
+      },
+    );
+
+    final password = TextFormField(
+      autofocus: false,
+      initialValue: configuration.loginInformation.password,
+      decoration: InputDecoration(
+          hintText: 'sensor password',
+          contentPadding: const EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
+          border: OutlineInputBorder(
+              borderRadius: BorderRadius.circular(32.0)
+          )
+      ),
+      onChanged: (value){
+        configuration.loginInformation.password = value;
+      },
     );
 
 
@@ -54,19 +103,23 @@ class _LoginPageState extends State<LoginPage> {
         borderRadius: BorderRadius.circular(30.0),
         shadowColor: Colors.lightBlueAccent.shade100,
         elevation: 5.0,
-          child: MaterialButton(
-            minWidth: 200.0,
-            height: 42.0,
-            onPressed: (){
-
-            },
-            color: Colors.lightBlueAccent,
-            child: const Text('Log In', style: TextStyle(color: Colors.white)),
-          ),
+        child: MaterialButton(
+          minWidth: 200.0,
+          height: 42.0,
+          onPressed: (){
+            login();
+            //Navigator.pop(context);  // Go back to previous widget
+
+            //Return to previous widget if successfully logged in. Store x-auth-token.
+            //Display login error if login not possible.
+          },
+          color: Colors.lightBlueAccent,
+          child: const Text('Log In', style: TextStyle(color: Colors.white)),
+        ),
       ),
     );
 
-    final forgotLabel = FlatButton(
+    final forgotLabel = TextButton(
       onPressed: () {  },
       child: const Text('Forgot password?',
         style: TextStyle(color: Colors.black54),
@@ -74,25 +127,25 @@ class _LoginPageState extends State<LoginPage> {
     );
 
     return Scaffold(
-      backgroundColor: Colors.white,
-      body: Center(
-        child: ListView(
-          shrinkWrap: true,
-          padding: const EdgeInsets.only(left: 24.0, right: 24.0),
-          children: <Widget>[
-            logo,
-            const SizedBox(height: 48.0),
-            email,
-            const SizedBox(height: 8.0),
-            password,
-            const SizedBox(height: 24.0),
-            loginButton,
-            forgotLabel
-
-
-          ],
+        backgroundColor: Colors.white,
+        body: Center(
+            child: ListView(
+              shrinkWrap: true,
+              padding: const EdgeInsets.only(left: 24.0, right: 24.0),
+              children: <Widget>[
+                logo,
+                const SizedBox(height: 48.0),
+                email,
+                const SizedBox(height: 8.0),
+                password,
+                const SizedBox(height: 24.0),
+                loginButton,
+                forgotLabel //TODO: launch https://data.awi.de/auth/
+
+
+              ],
+            )
         )
-      )
     );
   }
 }
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index 48eacfe..74c9d15 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -17,7 +17,8 @@ void main() {
   events.reset();
   configuration.reset();
 
-
+  configuration.loginInformation.mail = 'admin';  // Sandbox.sensor.de  admin account
+  configuration.loginInformation.password ='adminadmin';
 
   // Add some dummy devices
   // TODO: load from shared preferences.
diff --git a/lib/viewevents.dart b/lib/viewevents.dart
index b9435c9..2e1988f 100644
--- a/lib/viewevents.dart
+++ b/lib/viewevents.dart
@@ -160,7 +160,7 @@ class ViewEvents extends StatelessWidget {
             icon: null,
             label: const Text('Upload'),
             onPressed: () {
-              // Provide
+              // Login
             },
           ),
         ],
diff --git a/pubspec.yaml b/pubspec.yaml
index 6fcb55b..75a049d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -62,7 +62,8 @@ flutter:
   uses-material-design: true
 
   # To add assets to your application, add an assets section, like this:
-  # assets:
+  assets:
+    - assets/awi_logo.png
   #   - images/a_dot_burr.jpeg
   #   - images/a_dot_ham.jpeg
 
-- 
GitLab