diff --git a/.env b/.env index 60ffc61..837184e 100644 --- a/.env +++ b/.env @@ -18,7 +18,8 @@ llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXl serverPHP=https://api.sefer.live/sefer seferAlexandriaServer=https://seferalexandria.site/sefer seferPaymentServer=https://seferpw.shop/sefer -seferCairoServer=https://sefer.click/sefer +# seferCairoServer=https://sefer.click/sefer +seferCairoServer=https://server.sefer.live/sefer.click/sefer seferGizaServer=https://gizasefer.online/sefer whatappID=369939736211879 whatsapp=EAAOtbZBSUK74BO6yE1QwIBsRCjPDANdum66xap0ZA7OZA8LqEu8MZAts1kwr12eRiNXtvpJ2ZAFSY5dw3KVSyrUuH8boLjynxdFI4Gh1Q7BCHx275X2uZBwKWZCSrsVN17i6mZAFNYYd25sQv0ZBomeTk02ZCIJot4UqWxK9ZBvxsq1k2yS7lD2NsjZB5EHbpaYGLzxFJ2FCCSX6iHyKXab6ckfK7m19wo77in7Dl3YZD diff --git a/lib/constant/links.dart b/lib/constant/links.dart index bb2c553..ce98cdd 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -3,12 +3,18 @@ import 'package:SEFER/env/env.dart'; import 'package:SEFER/main.dart'; class AppLink { - static final String seferPaymentServer0 = Env.seferPaymentServer; - static final String seferPaymentServer = '${Env.seferPaymentServer}/ride'; - static final String seferAlexandriaServer = Env.seferAlexandriaServer; - static final String seferCairoServer = Env.seferCairoServer; - static final String seferGizaServer = Env.seferGizaServer; - + // static final String seferPaymentServer0 = Env.seferPaymentServer; + // static final String seferPaymentServer = '${Env.seferPaymentServer}/ride'; + // static final String seferAlexandriaServer = Env.seferAlexandriaServer; + // static final String seferCairoServer = Env.seferCairoServer; + static String serverPHP = box.read('serverPHP'); + static String seferCairoServer = box.read('seferCairoServer'); + static String seferGizaServer = box.read('seferGizaServer'); + static String seferAlexandriaServer = box.read('seferAlexandriaServer'); + static String seferPaymentServer = box.read('seferPaymentServer'); + static String seferPaymentServer0 = box.read('seferPaymentServer'); + // static const String seferGizaServer = 'https://gizasefer.online/sefer'; + // static final String seferGizaServer = Env.seferGizaServer; static final String endPoint = box.read(BoxName.serverChosen); static final String server = Env.seferCairoServer; // static final String server = Env.serverPHP; @@ -29,8 +35,8 @@ class AppLink { static String packageInfo = "$server/auth/packageInfo.php"; //=======================Wallet=================== - static String wallet = '$seferPaymentServer/passengerWallet'; - static String walletDriver = '$seferPaymentServer/driverWallet'; + static String wallet = '$seferPaymentServer/ride/passengerWallet'; + static String walletDriver = '$seferPaymentServer/ride/driverWallet'; static String getAllPassengerTransaction = "$wallet/getAllPassengerTransaction.php"; static String getWalletByPassenger = "$wallet/getWalletByPassenger.php"; @@ -38,8 +44,8 @@ class AppLink { static String getPassengerWalletArchive = "$wallet/getPassengerWalletArchive.php"; - static String addDrivePayment = "$seferPaymentServer/payment/add.php"; - static String addSeferWallet = "$seferPaymentServer/seferWallet/add.php"; + static String addDrivePayment = "$seferPaymentServer/ride/payment/add.php"; + static String addSeferWallet = "$seferPaymentServer/ride/seferWallet/add.php"; static String addPassengersWallet = "$wallet/add.php"; static String deletePassengersWallet = "$wallet/delete.php"; static String updatePassengersWallet = "$wallet/update.php"; @@ -93,9 +99,9 @@ class AppLink { static String addDriverpayment = "$ride/payment/add.php"; static String addDriverPaymentPoints = "$ride/driverPayment/add.php"; static String addPaymentTokenPassenger = - "$seferPaymentServer/passengerWallet/addPaymentTokenPassenger.php"; + "$seferPaymentServer/ride/passengerWallet/addPaymentTokenPassenger.php"; static String addPaymentTokenDriver = - "$seferPaymentServer/driverWallet/addPaymentToken.php"; + "$seferPaymentServer/ride/driverWallet/addPaymentToken.php"; static String getDriverPaymentPoints = "$ride/driverWallet/get.php"; static String getDriverpaymentToday = "$ride/payment/get.php"; static String getCountRide = "$ride/payment/getCountRide.php"; diff --git a/lib/constant/sefer cairo server.php b/lib/constant/sefer cairo server.php new file mode 100644 index 0000000..a5368af --- /dev/null +++ b/lib/constant/sefer cairo server.php @@ -0,0 +1,198 @@ +sefer cairo server + + +server { + listen 80; + listen [::]:80; + listen 443 ssl http2; + listen [::]:443 ssl http2; + {{ssl_certificate_key}} + {{ssl_certificate}} + server_name www.sefer.click; + return 301 https://sefer.click$request_uri; +} +server { + listen 80; + listen [::]:80; + listen 443 ssl http2; + listen [::]:443 ssl http2; + {{ssl_certificate_key}} + {{ssl_certificate}} + server_name sefer.click www1.sefer.click; + {{root}} + {{nginx_access_log}} + {{nginx_error_log}} + # Set the maximum request body size + client_max_body_size 10m; + if ($scheme != "https") { + rewrite ^ https://$host$uri permanent; + } + location ~ /.well-known { + auth_basic off; + allow all; + } + # Security headers + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + add_header Permissions-Policy "geolocation=(), microphone=()" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + + {{settings}} + location / { + {{varnish_proxy_pass}} + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_hide_header X-Varnish; + proxy_redirect off; + proxy_max_temp_file_size 0; + proxy_connect_timeout 720; + proxy_send_timeout 720; + proxy_read_timeout 720; + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + proxy_temp_file_write_size 256k; + } + location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map|mjs)$ { + add_header Access-Control-Allow-Origin "*"; + expires max; + access_log off; + } + location ~ /\.(ht|svn|git) { + deny all; + } + if (-f $request_filename) { + break; + } +} +server { + listen 8080; + listen [::]:8080; + server_name sefer.click www1.sefer.click; + {{root}} + try_files $uri $uri/ /index.php?$args; + index index.php index.html; + location ~ \.php$ { + include fastcgi_params; + fastcgi_intercept_errors on; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + try_files $uri =404; + fastcgi_read_timeout 3600; + fastcgi_send_timeout 3600; + proxy_read_timeout 3600; + proxy_send_timeout 3600; + fastcgi_param HTTPS "on"; + fastcgi_param SERVER_PORT 443; + fastcgi_pass 127.0.0.1:{{php_fpm_port}}; + fastcgi_param PHP_VALUE "{{php_settings}}"; + } + if (-f $request_filename) { + break; + } +} + + +wallet server + + +server { + listen 80; + listen [::]:80; + listen 443 ssl http2; + listen [::]:443 ssl http2; + {{ssl_certificate_key}} + {{ssl_certificate}} + server_name www.seferpw.shop; + return 301 https://seferpw.shop$request_uri; +} + +server { + listen 80; + listen [::]:80; + listen 443 ssl http2; + listen [::]:443 ssl http2; + {{ssl_certificate_key}} + {{ssl_certificate}} + server_name seferpw.shop www1.seferpw.shop 156.67.82.188; + {{root}} + {{nginx_access_log}} + {{nginx_error_log}} + # Set the maximum request body size + client_max_body_size 10m; + if ($scheme != "https") { + rewrite ^ https://$host$uri permanent; + } + location ~ /.well-known { + auth_basic off; + allow all; + } + # Security headers + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';" always; + add_header Referrer-Policy "no-referrer-when-downgrade" always; + add_header Permissions-Policy "geolocation=(), microphone=()" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Content-Type-Options "nosniff" always; + + {{settings}} + location / { + {{varnish_proxy_pass}} + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_hide_header X-Varnish; + proxy_redirect off; + proxy_max_temp_file_size 0; + proxy_connect_timeout 720; + proxy_send_timeout 720; + proxy_read_timeout 720; + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + proxy_temp_file_write_size 256k; + } + location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map|mjs)$ { + add_header Access-Control-Allow-Origin "*"; + expires max; + access_log off; + } + location ~ /\.(ht|svn|git) { + deny all; + } + if (-f $request_filename) { + break; + } +} + +server { + listen 8080; + listen [::]:8080; + server_name seferpw.shop www1.seferpw.shop 156.67.82.188; + {{root}} + try_files $uri $uri/ /index.php?$args; + index index.php index.html; + location ~ \.php$ { + include fastcgi_params; + fastcgi_intercept_errors on; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + try_files $uri =404; + fastcgi_read_timeout 3600; + fastcgi_send_timeout 3600; + proxy_read_timeout 3600; + proxy_send_timeout 3600; + fastcgi_param HTTPS "on"; + fastcgi_param SERVER_PORT 443; + fastcgi_pass 127.0.0.1:{{php_fpm_port}}; + fastcgi_param PHP_VALUE "{{php_settings}}"; + } + if (-f $request_filename) { + break; + } +} \ No newline at end of file diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index a2bd55f..f803de7 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -166,7 +166,7 @@ class FirebaseMessagesController extends GetxController { 'token change'.tr, 'token change'.tr, 'cancel'); } GoogleSignInHelper.signOut(); - } else if (message.notification!.title! == 'DriverIsGoingToPassenger'.tr) { + } else if (message.notification!.title! == 'Driver Is Going To Passenger'.tr) { Get.find().isDriverInPassengerWay = true; Get.find().update(); if (Platform.isAndroid) { diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index c309e9e..a5f0dbc 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -31,12 +31,6 @@ class CRUD { }, ); - Log.print('response.request: ${response.request}'); - Log.print('payload: ${payload}'); - // Log.print('response.reasonPhrase: ${response.reasonPhrase}'); - - Log.print('response.body: ${response.body}'); - // print(payload); // if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); if (jsonData['status'] == 'success') { @@ -110,15 +104,10 @@ class CRUD { request.headers.addAll(headers); try { - print('Sending request to $url'); - print('Request headers: $headers'); - print('Request body: $body'); - http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { String responseBody = await response.stream.bytesToString(); - print('Response: $responseBody'); Get.defaultDialog( title: 'You will receive a code in WhatsApp Messenger'.tr, @@ -132,12 +121,8 @@ class CRUD { ); } else { String errorBody = await response.stream.bytesToString(); - print('Error ${response.statusCode}: ${response.reasonPhrase}'); - print('Error body: $errorBody'); } - } catch (e) { - print('Exception occurred: $e'); - } + } catch (e) {} } Future getAgoraToken({ @@ -302,9 +287,6 @@ class CRUD { // 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', // }, // ); - // Log.print('payload: ${payload}'); - // Log.print('response.request: ${response.request}'); - // Log.print('response.body: ${response.body}'); // var jsonData = jsonDecode(response.body); // if (response.statusCode == 200) { // if (jsonData['status'] == 'success') { @@ -332,11 +314,6 @@ class CRUD { }, ); - Log.print('Response.request: ${response.request}'); - Log.print('Payload: $payload'); - // Log.print('Response.statusCode: ${response.statusCode}'); - Log.print('Response.body: ${response.body}'); - if (response.statusCode == 200) { try { var jsonData = jsonDecode(response.body); @@ -347,18 +324,15 @@ class CRUD { return jsonData['status']; } } catch (e) { - Log.print('JSON parsing error: $e'); addError(e.toString(), 'crud().post'); return 'failure'; // Return a recognizable failure string for JSON errors } } else { - Log.print('Non-200 response code: ${response.statusCode}'); addError( 'Non-200 response code: ${response.statusCode}', 'crud().post'); return 'failure'; // Handle unexpected status codes as failures } } catch (e) { - Log.print('HTTP request error: $e'); addError('HTTP request error: $e', 'crud().post'); return 'failure'; // Handle HTTP request errors as failures } diff --git a/lib/controller/functions/secure_storage.dart b/lib/controller/functions/secure_storage.dart index 364dced..af10ff0 100644 --- a/lib/controller/functions/secure_storage.dart +++ b/lib/controller/functions/secure_storage.dart @@ -1,5 +1,11 @@ +import 'dart:convert'; + import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import '../../constant/links.dart'; +import '../../main.dart'; +import 'crud.dart'; + class SecureStorage { final FlutterSecureStorage _storage = const FlutterSecureStorage(); @@ -12,3 +18,41 @@ class SecureStorage { return value; } } + +const List keysToFetch = [ + 'serverPHP', + 'seferAlexandriaServer', + 'seferPaymentServer', + 'seferCairoServer', + 'seferGizaServer', +]; + +class AppInitializer { + // final FlutterSecureStorage _storage = const FlutterSecureStorage(); + + Future initializeApp() async { + // Check if app is running for the first time + + // Loop through the keys and fetch their values + for (String key in keysToFetch) { + try { + String? value = await getKey(key); // Fetch from server + if (value != null) { + await box.write(key, value); // Save securely + } + } catch (e) {} + } + } + + Future getKey(String key) async { + var res = + await CRUD().get(link: AppLink.getapiKey, payload: {"keyName": key}); + if (res != 'failure') { + try { + var data = jsonDecode(res)['message']; + return data[key]?.toString(); + } catch (e) {} + } + return null; + } +} diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 37bfe15..60e8947 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -5222,13 +5222,24 @@ class MapPassengerController extends GetxController { link: AppLink.getPassengerRate, payload: {'passenger_id': box.read(BoxName.passengerID)}); if (res != 'failure') { - if (jsonDecode(res)['message']['rating'] == null) { - passengerRate = 5; + var message = jsonDecode(res)['message']; + if (message['rating'] == null) { + passengerRate = 5.0; // Default rating } else { - passengerRate = jsonDecode(res)['message']['rating'].toDouble(); + // Safely parse the rating to double + var rating = message['rating']; + if (rating is String) { + passengerRate = + double.tryParse(rating) ?? 5.0; // Default if parsing fails + } else if (rating is num) { + passengerRate = + rating.toDouble(); // Already a number, convert to double + } else { + passengerRate = 5.0; // Default for unexpected data types + } } } else { - passengerRate = 5; + passengerRate = 5.0; // Default rating for failure } } diff --git a/lib/main.dart b/lib/main.dart index 534e1a2..f7f42db 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,6 +16,7 @@ import 'constant/info.dart'; import 'constant/notification.dart'; import 'controller/firebase/firbase_messge.dart'; import 'controller/firebase/local_notification.dart'; +import 'controller/functions/secure_storage.dart'; import 'controller/local/local_controller.dart'; import 'controller/local/translations.dart'; import 'controller/payment/paymob/paymob_wallet.dart'; @@ -100,6 +101,8 @@ void main() async { randomMessage.split(':')[1], "tone1", ); + final AppInitializer initializer = AppInitializer(); + await initializer.initializeApp(); runApp(const MyApp()); } diff --git a/lib/views/home/map_widget.dart/left_main_menu_icons.dart b/lib/views/home/map_widget.dart/left_main_menu_icons.dart index f3e5ddb..3d64150 100644 --- a/lib/views/home/map_widget.dart/left_main_menu_icons.dart +++ b/lib/views/home/map_widget.dart/left_main_menu_icons.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/table_names.dart'; import '../../../controller/functions/tts.dart'; @@ -14,7 +15,10 @@ GetBuilder leftMainMenuIcons() { return GetBuilder( builder: (controller) => Positioned( top: Get.height * .008, - left: Get.width * .02, // Adjust left position for better spacing + left: box.read(BoxName.lang) != 'ar' ? Get.width * .2 : null, + right: box.read(BoxName.lang) != 'ar' + ? Get.width * .2 + : null, // Adjust left position for better spacing child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, // Distribute space evenly