From 5c3f28b7d7b5ee253f8050bcc92bcadc1b4469d6 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Tue, 20 Feb 2024 13:59:13 +0100
Subject: [PATCH] add: getQuery()

---
 .../get_markers.dart                          |  0
 app/lib/pages/api_handler/get_sat_query.dart  | 35 +++++++++++++++++++
 .../marker_data.dart                          |  0
 app/lib/pages/consts.dart                     |  1 +
 app/lib/pages/default_page.dart               |  4 +--
 app/lib/pages/widgets/map_widget.dart         |  2 +-
 app/lib/pages/widgets/osm_map.dart            |  2 +-
 app/lib/pages/widgets/sat_layer.dart          |  2 +-
 server/main.py                                |  4 +++
 server/map/get_sat_query.py                   | 10 ++++++
 10 files changed, 55 insertions(+), 5 deletions(-)
 rename app/lib/pages/{marker_handler => api_handler}/get_markers.dart (100%)
 create mode 100644 app/lib/pages/api_handler/get_sat_query.dart
 rename app/lib/pages/{marker_handler => api_handler}/marker_data.dart (100%)
 create mode 100644 server/map/get_sat_query.py

diff --git a/app/lib/pages/marker_handler/get_markers.dart b/app/lib/pages/api_handler/get_markers.dart
similarity index 100%
rename from app/lib/pages/marker_handler/get_markers.dart
rename to app/lib/pages/api_handler/get_markers.dart
diff --git a/app/lib/pages/api_handler/get_sat_query.dart b/app/lib/pages/api_handler/get_sat_query.dart
new file mode 100644
index 00000000..7b576e62
--- /dev/null
+++ b/app/lib/pages/api_handler/get_sat_query.dart
@@ -0,0 +1,35 @@
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import '../consts.dart';
+
+/// getQuery requests the ????? query from the server
+Future<String> getQuery() async {
+  try {
+    // Custom HTTP client
+    HttpClient client = HttpClient()
+      ..badCertificateCallback = // NB: temporary disable SSL certificate validation
+          (X509Certificate cert, String host, int port) => true;
+
+    // Request query from server API
+    var request = await client.getUrl(Uri.parse(serverURI + satEndpoint));
+    var response = await request.close(); // Close response body at end of function
+
+    // Parse response body to JSON if request is ok
+    if (response.statusCode == 200) {
+      var responseBody = await utf8.decodeStream(response); // Parse query from response
+
+      if (responseBody.isNotEmpty) {
+        var queryString = json.decode(responseBody);
+        return queryString;
+      } else {
+        throw Exception('Failed to decode query string');
+      }
+    } else {
+      throw Exception('Failed to fetch query string: Status code ${response.statusCode}');
+    }
+  } catch (e) {
+    print('Error fetching query string: $e');
+    throw Exception('Failed to fetch query string: ${e.toString()}');
+  }
+}
diff --git a/app/lib/pages/marker_handler/marker_data.dart b/app/lib/pages/api_handler/marker_data.dart
similarity index 100%
rename from app/lib/pages/marker_handler/marker_data.dart
rename to app/lib/pages/api_handler/marker_data.dart
diff --git a/app/lib/pages/consts.dart b/app/lib/pages/consts.dart
index d902d50f..35e748f1 100644
--- a/app/lib/pages/consts.dart
+++ b/app/lib/pages/consts.dart
@@ -6,6 +6,7 @@ import 'package:latlong2/latlong.dart';
 const String port = "8443";
 const String serverURI = "https://127.0.0.1:$port/";
 const String mapEndpoint = "update_map";
+const String satEndpoint = "get_sat_query";
 const int fetchInterval = 60; // Fetch marker data every n minutes
 
 // Map center
diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart
index 29ad2d91..5e6f8589 100644
--- a/app/lib/pages/default_page.dart
+++ b/app/lib/pages/default_page.dart
@@ -1,9 +1,9 @@
 import 'dart:async';
 import 'package:flutter/material.dart';
 import 'widgets/map_widget.dart';
-import 'marker_handler/marker_data.dart';
+import 'api_handler//marker_data.dart';
 import 'consts.dart';
-import 'marker_handler/get_markers.dart';
+import 'api_handler/get_markers.dart';
 
 class DefaultPage extends StatefulWidget {
   const DefaultPage({super.key});
diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart
index 4e9688a7..3785e392 100644
--- a/app/lib/pages/widgets/map_widget.dart
+++ b/app/lib/pages/widgets/map_widget.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import '../marker_handler/marker_data.dart';
+import '../api_handler/marker_data.dart';
 import '../consts.dart';
 import 'quick_view_chart.dart';
 import 'stat_charts.dart';
diff --git a/app/lib/pages/widgets/osm_map.dart b/app/lib/pages/widgets/osm_map.dart
index 9324c2bb..face5fa5 100644
--- a/app/lib/pages/widgets/osm_map.dart
+++ b/app/lib/pages/widgets/osm_map.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import '../marker_handler/marker_data.dart';
+import '../api_handler/marker_data.dart';
 import '../consts.dart';
 import 'package:flutter_map/flutter_map.dart';
 import 'package:latlong2/latlong.dart';
diff --git a/app/lib/pages/widgets/sat_layer.dart b/app/lib/pages/widgets/sat_layer.dart
index 107bf1c9..fb9e425d 100644
--- a/app/lib/pages/widgets/sat_layer.dart
+++ b/app/lib/pages/widgets/sat_layer.dart
@@ -1,5 +1,5 @@
 import 'package:flutter/material.dart';
-import '../marker_handler/marker_data.dart';
+import '../api_handler/marker_data.dart';
 import 'package:flutter_map/flutter_map.dart';
 import 'package:latlong2/latlong.dart';
 
diff --git a/server/main.py b/server/main.py
index 47d94aad..88c5999e 100644
--- a/server/main.py
+++ b/server/main.py
@@ -2,6 +2,7 @@ from flask import Flask
 from http.server import HTTPServer, BaseHTTPRequestHandler
 from consts import SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT
 from map.get_markers import get_all_markers
+from map.get_sat_query import get_sat_query
 from APIs.get_weather import get_weather
 import ssl
 import keyboard
@@ -41,6 +42,9 @@ class IceHTTP(BaseHTTPRequestHandler):
         elif self.path == '/get_valid_markers':  # NB: should be POST?
             get_all_markers(self, self.cursor, True)  # Get only valid markers
 
+        elif self.path == '/get_sat_query':
+            get_sat_query(self)  # Get satellite query
+
     def do_POST(self):
         if self.path == '/get_weather_data':
             get_weather(self)
diff --git a/server/map/get_sat_query.py b/server/map/get_sat_query.py
new file mode 100644
index 00000000..03fe0863
--- /dev/null
+++ b/server/map/get_sat_query.py
@@ -0,0 +1,10 @@
+def get_sat_query(self):
+    query = 'https://services.sentinel-hub.com/ogc/wms/f202d497-32bf-488c-b034-e5af13f3a597?REQUEST=GetMap&BBOX=1181869.3313,8566983.8541,1205106.1879,8612106.4233&LAYERS=TRUECOLTEST&MAXCC=0&WIDTH=183&HEIGHT=320&FORMAT=image/jpeg&TIME=2020-12-01/2024-02-26'
+
+    # Set headers
+    self.send_response(200)
+    self.send_header("Content-type", "application/json")
+    self.end_headers()
+
+    # Write marker data to response object
+    self.wfile.write(query.encode('utf-8'))
-- 
GitLab