From 9daa3db03721e18d553e329a8158a364673e9ebe Mon Sep 17 00:00:00 2001 From: Phani Pavan K Date: Fri, 22 Sep 2023 14:33:33 +0530 Subject: [PATCH] Fixed CORS --- lib/constants.dart | 4 +- lib/models/globalModel.dart | 157 +++++++++--------- macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.yaml | 6 +- 4 files changed, 86 insertions(+), 83 deletions(-) diff --git a/lib/constants.dart b/lib/constants.dart index 7c3e8a1..e92f488 100644 --- a/lib/constants.dart +++ b/lib/constants.dart @@ -16,7 +16,7 @@ const Center noMenuWidget = Center( style: TextStyle(fontSize: 20, fontStyle: FontStyle.italic))); const String hashLink = - "http://github.com/kphanipavan/IIITB_Menu/releases/download/latest/out.txt"; + "https://raw.githubusercontent.com/kphanipavan/IIITB_Menu/menu_scraper/out.txt"; const String dataLink = - "http://github.com/kphanipavan/IIITB_Menu/releases/download/latest/out.json"; + "https://raw.githubusercontent.com/kphanipavan/IIITB_Menu/menu_scraper/out.json"; diff --git a/lib/models/globalModel.dart b/lib/models/globalModel.dart index 53ec988..6c589e4 100644 --- a/lib/models/globalModel.dart +++ b/lib/models/globalModel.dart @@ -1,15 +1,14 @@ -// ignore_for_file: unnecessary_this, file_names +// ignore_for_file: unnecessary_this, file_names, library_prefixes import "dart:convert"; -// import "dart:io"; import "package:iiitb_menu/constants.dart"; // import "package:path_provider/path_provider.dart"; -// import 'dart:io'; +import 'dart:io'; import "package:flutter/material.dart"; -// import "package:crypto/crypto.dart"; -// import "package:http/http.dart"; +import "package:crypto/crypto.dart"; +import "package:http/http.dart"; import "package:intl/intl.dart"; -// import "package:shared_preferences/shared_preferences.dart"; +import "package:shared_preferences/shared_preferences.dart"; // import "package:dio/dio.dart"; import "package:iiitb_menu/data.dart" as menuData; @@ -31,87 +30,89 @@ class GlobalModel extends ChangeNotifier { }); } -// static Future getLatestHash() async { -// try { -// // Request hashRequest = Request("get", Uri.parse(hashLink)); -// Response ret = await Dio().request(hashLink, -// options: Options(method: 'GET', headers: { -// HttpHeaders.acceptHeader: "text/plain", -// "Access-Control-Allow-Origin": "*", -// "Access-Control-Allow-Methods": "GET", -// "Access-Control-Allow-Headers": "*", -// "Access-Control-Max-Age": "1000" -// })); -// if (ret.statusCode == 200) { -// return ret.data.replaceAll("\n", ""); -// } else { -// return ""; -// } -// } on SocketException catch (exce) { -// print("Unable to download hash"); -// print(exce); -// return ""; -// } -// } + static Future getLatestHash() async { + try { + Response hashRequest = await get(Uri.parse(hashLink)); + // Response ret = await Dio().request(hashLink, + // options: Options(method: 'GET', headers: { + // HttpHeaders.acceptHeader: "text/plain", + // "Access-Control-Allow-Origin": "*", + // "Access-Control-Allow-Methods": "GET", + // "Access-Control-Allow-Headers": "*", + // "Access-Control-Max-Age": "1000" + // })); + if (hashRequest.statusCode == 200) { + return hashRequest.body.replaceAll("\n", ""); + } else { + return ""; + } + } on SocketException catch (exce) { + print("Unable to download hash"); + print(exce); + return ""; + } + } - // static Future getLatestData() async { - // try { - // Response ret = await Dio().request(dataLink, - // options: Options(method: "GET", headers: { - // HttpHeaders.acceptHeader: "text/plain", - // "Access-Control-Allow-Origin": "*" - // })); - // return ret.data; - // } on SocketException catch (exce) { - // print("Unable to download any data"); - // print(exce); - // return ""; - // } - // } + static Future getLatestData() async { + try { + // Response ret = await Dio().request(dataLink, + // options: Options(method: "GET", headers: { + // HttpHeaders.acceptHeader: "text/plain", + // "Access-Control-Allow-Origin": "*" + // })); + Response dataRequest = await get(Uri.parse(dataLink)); + return dataRequest.body; + } on SocketException catch (exce) { + print("Unable to download any data"); + print(exce); + return ""; + } + } static Future loadData() async { late Map returnData; // Directory appDir = await getApplicationDocumentsDirectory(); - // final SharedPreferences prefs = await SharedPreferences.getInstance(); - // String? rawData; - // String rawHash; + final SharedPreferences prefs = await SharedPreferences.getInstance(); + String? rawData; + String rawHash; // String fileName = "${appDir.path}/menu.json"; // print(fileName); // File fileLink = File(fileName); - // rawData = prefs.getString("asdasdasd"); - // print(rawData); - // if (rawData != null) { - // print("data found"); - // // rawData = localStor.getItem("fullMenu"); - // rawHash = md5.convert(utf8.encode(rawData)).toString(); - // print("Hash of Raw Data:"); - // print(rawHash); - // // print("RawData: "); - // // print(rawData); - // returnData = jsonDecode(rawData); - // // menuAvailable = true; - // } else { - // print("Data Not Found"); - // returnData = {}; - // rawHash = ""; - // } - // // String remoteHash = await GlobalModel.getLatestHash(); + rawData = prefs.getString(storageKey); + print(rawData); + if (rawData != null) { + print("data found"); + // rawData = localStor.getItem("fullMenu"); + rawHash = md5.convert(utf8.encode(rawData)).toString(); + print("Hash of Raw Data:"); + print(rawHash); + // print("RawData: "); + // print(rawData); + returnData = jsonDecode(rawData); + // menuAvailable = true; + } else { + print("Data Not Found"); + returnData = {}; + rawHash = ""; + } + String remoteHash = await GlobalModel.getLatestHash(); // String remoteHash = "asd"; - // print("Remote Hash: $remoteHash"); - // if (remoteHash == "") { - // } else if (remoteHash == rawHash) { - // print("Remote hash $remoteHash is same as local hash $rawHash"); - // } else { - // print("Remote hash $remoteHash is NOT the same as local hash $rawHash"); - // print("Getting data from remote"); - // rawData = await getLatestData(); - // if (rawData == "") { - // return {}; - // } - // returnData = jsonDecode(rawData); - // // fileLink.writeAsStringSync(rawData, mode: FileMode.write); - // prefs.setString(storageKey, rawData); - // } + print("Remote Hash: $remoteHash"); + if (remoteHash == "") { + } else if (remoteHash == rawHash) { + print("Remote hash $remoteHash is same as local hash $rawHash"); + } else { + print("Remote hash $remoteHash is NOT the same as local hash $rawHash"); + print("Getting data from remote"); + rawData = await getLatestData(); + if (rawData == "") { + return {}; + } + // print(rawData); + returnData = jsonDecode(rawData); + // fileLink.writeAsStringSync(rawData, mode: FileMode.write); + prefs.setString(storageKey, rawData); + } returnData = jsonDecode(menuData.data); return returnData; } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e777c67..b8e2b22 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,9 @@ import FlutterMacOS import Foundation import path_provider_foundation +import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/pubspec.yaml b/pubspec.yaml index a4daf2e..27b3cc8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,13 +36,13 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 provider: ^6.0.5 - # crypto: ^3.0.3 + crypto: ^3.0.3 intl: ^0.18.1 - # http: ^1.1.0 + http: ^1.1.0 # dio: ^5.3.2 path_provider: # localstorage: ^4.0.1+4 - # shared_preferences: ^2.2.0 + shared_preferences: ^2.2.0 # sembast: dev_dependencies: