Skip to content
Snippets Groups Projects
sensorconnector.dart 5.70 KiB
import 'dart:convert';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import 'datamodel.dart';

class SensorConnector {
  //final String baseUrl = 'https://sandbox.sensor.awi.de/rest/';
  final String baseUrl = 'https://sensor.awi.de/rest/';
  final String loginUrl = 'sensors/contacts/login';
  final String collectionsUrl = 'sensors/collections/getAllCollections?pointInTime=2018-07-03T12%3A30%3A55.389Z';
  final String eventTypesUrl = 'sensors/events/getAllEventTypes';
  final String collectionItemsUrl = 'sensors/collections/getItemsOfCollection/';  // + collectionId
  final String putEventUrl = 'sensors/events/putEvent/';  // + eventId;

  Future<String> getAuthToken(String username, String password) async {
    String url = baseUrl + loginUrl;
    String? token;

    Map<String, dynamic> body = {
      'username': username,
      'authPassword': password
    };
    String encodedBody = body.keys.map((key) => "$key=${body[key]}").join("&");

    try {
      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) {
        token = response.headers['set-cookie']?.split(';')[0];
        debugPrint('Login success. Token: ' + token!.toString());
        return token;
      }
      else {
        debugPrint('Failed to login'
            'Header: ' + response.headers.toString() +
            ' StatusCode: ' + response.statusCode.toString() +
            ' Body: ' + response.body.toString());
        throw Exception('Failed to login');
      }
    } on SocketException catch (e){
      throw Exception('No connection');
    }catch (e){
      rethrow;
    }
  }
  Future<List<Collection>> fetchCollections() async {
    String url = baseUrl + collectionsUrl;
    List<Collection> collectionList = [];

    try{
      final response = await http.get(Uri.parse(url));
      if (response.statusCode == 200) {
        collectionList = (json.decode(response.body) as List)
            .map((i) => Collection.fromJson(i))
            .toList();
        debugPrint("Fetching Collections Success: " + collectionList.toString());
        collectionList.sort((a, b) => a.collectionName.compareTo(b.collectionName)); // Sort alphanumeric
        return collectionList;
      } else {
        throw Exception('Failed to fetch Collections. '
            'Header: ' + response.headers.toString() +
            ' StatusCode: ' +response.statusCode.toString() +
            ' Body: ' +response.body.toString());