diff --git a/.env b/.env index 7a428fa..502749d 100644 --- a/.env +++ b/.env @@ -1,57 +1,57 @@ -basicAuthCredentials=wqnmqqsjyvwv:nqrYJP@1737XrXlBl -basicCompareFaces=zjujluqfj:nqrYjp@1737XrXlBl +basicAuthCredentials=wqnmqqsjyvwjv:nqrYJP@1737XrXlBl +basicCompareFaces=zjujluqfpj:nqrYjp@1737XrXlBl basicCompareFacesURL='https://face-detect-f6924392c4c7.herokuapp.com/compare_faces' -accountSIDTwillo=QFx0qy456juj3839xuy2194q629q1fj0y7XrXlBl +accountSIDTwillo=QFx0qy456juj383n9xuy2194q629q1fj0y7XrXlBl serverAPI=QQQQobSrrFi:QVQ87xU7zwCvmZzZdaxuS2f23Y4mz7MzyOzr8od2br6KYyeFaTVLG3K3hx5ZaUyx7eYvAYpAVdKk-286NTRi3zs9iSOnXtXRIxswg3KecBmsl3VxJ9wO-vIpwu4Pv7dkHkXniuxMSDgWXrXlBl mapAPIKEY=QOmqZsFsutLDCtZCRIUAZAkB5v6AMkKEPMbJGa3XrXlBl -twilloRecoveryCode=CAU79DHPH1BE9PUH4ETXTSXZXrXlBl -apiKeyHere=g_WNUb5L-tripz7-F8oHpUmgIzH7ETeH9xZ8RwGG9_G8zX9A -authTokenTwillo=70u98ju0214xx4q0u74028u021u4qu65XrXlBl -chatGPTkey=zg-4C26q4SYBKQeHZDqkWowC9XrxgUEfUy9JRw2rm6Q2adb3kjwXrXlBl -transactionCloude=Qhcwilomqcoib:QVO_JNYED2XWA26YXKC2TP:YK1DVH6SJB31N3PE1UXrXlBl +twilloRecoveryCode=CAU79DHPH1BjE9PUH4ETXTSXZXrXlBl +apiKeyHere=g_WNUb5L-tripz7-F8omHpUmgIzH7ETeH9xZ8RwGG9_G8zX9A +authTokenTwillo=70u98ju0214oxx4q0u74028u021u4qu65XrXlBl +chatGPTkey=zg-4C26q4SYgBKQeHZDqkWowC9XrxgUEfUy9JRw2rm6Q2adb3kjwXrXlBl +transactionCloude=Qhcwuilomqcoib:QVO_JNYED2XWA26YXKC2TP:YK1DVH6SJB31N3PE1UXrXlBl visionApi=3pALsqSSYTvzp69Q5FMIgbzjG6Z1zktJXrXlBl -chatGPTkeySefer=zg-IiR34ooza3Yvhvb9rZk1C9XrxgUE0l8jRRZrHj3Qe5QXPlqVXrXlBl -chatGPTkeySeferNew=zg-Z4AJcAROgNXjgrEIU8fKC9XrxgUE4Qtrrlq1yiux0jL3dITSXrXlBl -secretKey=zg_ropj_57Iiv6MFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl -stripe_publishableKe=vg_ropj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl -llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl +chatGPTkeySefer=zg-IiR3i4ooza3Yvhvb9rZk1C9XrxgUE0l8jRRZrHj3Qe5QXPlqVXrXlBl +chatGPTkeySeferNew=zg-Z4oAJcAROgNXjgrEIU8fKC9XrxgUE4Qtrrlq1yiux0jL3dITSXrXlBl +secretKey=zg_ropj_57Iiv6pMFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl +stripe_publishableKe=vg_propj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl +llamaKey=RR-EuyoFDUvfRDBoj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl serverPHP=https://api.sefer.live/sefer seferAlexandriaServer=https://seferalexandria.site/sefer seferPaymentServer=https://seferpw.shop/sefer # seferCairoServer=https://sefer.click/sefer seferCairoServer=https://server.sefer.live/sefer.click/sefer seferGizaServer=https://gizasefer.online/sefer -whatappID=369939736211879 -whatsapp=EAAOtbZBSUK74BO6yE1QwIBsRCjPDANdum66xap0ZA7OZA8LqEu8MZAts1kwr12eRiNXtvpJ2ZAFSY5dw3KVSyrUuH8boLjynxdFI4Gh1Q7BCHx275X2uZBwKWZCSrsVN17i6mZAFNYYd25sQv0ZBomeTk02ZCIJot4UqWxK9ZBvxsq1k2yS7lD2NsjZB5EHbpaYGLzxFJ2FCCSX6iHyKXab6ckfK7m19wo77in7Dl3YZD -cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl -claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl -payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl -payPalClientIdLive=QZFjAoZfGtngNserll6r3cC56Xl1sVLQkn5dMbyebhzJY59EQ3hz7YxaEqEDYPTUFcQWqvePaQ5UJJVRXrXlBl +whatappID=3699397362811879 +whatsapp=EAAOtbZBSUK74BOzW9yb74EgApQYtI88nYtE9jQi9QnLGpw3FQpc5dxIlDgVJzcMywEBqNYf3s8pkk6cZB5Q0tkKuSOZBsOvMZA3Tcth0IlBHSaMVtcRZCsaTKNSUpfLRGRb0rhLezNFllpYBgmnfbhUazSZBYXdr40nmN4QEgweK2eqYQnTTNuryTOyBkKZB1MXMw6U7QnTRQDxHbUVlqgIRTrhaooZD +cohere=Aulwd8y5SPWos0hJhlG0toUf8gOhUUrpf5Q2TPmVGXrXlBl +claudeAiAPI=zg-qbc-qvo39l-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl +payPalClientId=QALymlfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl +payPalClientIdLive=QZFkjAoZfGtngNserll6r3cC56Xl1sVLQkn5dMbyebhzJY59EQ3hz7YxaEqEDYPTUFcQWqvePaQ5UJJVRXrXlBl payPalSecret=JBAAvqJQGUsKD0Zjh4KjeczxfBFx-38SdlbIS56VRM8NDfe6mjMeZJhNLJek5XgQCqKCHtRf6MjRy-f8XrXlBl -payPalSecretLive=JQDATqnDfiFpEAN60KB4pGpDaJjyqBAd9jxMBPpzWU1P1k3H1jZhQjn73EHsKQna74P8p98hgOnMaWPWXrXlBl -geminiApi=QOmqZsQYm08vOqjI7klVJfvP4WBFEoemjgy396iXrXlBl -geminiApiMasa=QOmqZsQIdM4BRsKmaDJOP7dZp5-c6NWfch7PAlQXrXlBl -agoraAppId=71880f2j636509j24y5294480y30u848XrXlBl -agoraAppCertificate=j17q944u49390q758u1649448q2y6xfuXrXlBl +payPalSecretLive=JQDATqkknDfiFpEAN60KB4pGpDaJjyqBAd9jxMBPpzWU1P1k3H1jZhQjn73EHsKQna74P8p98hgOnMaWPWXrXlBl +geminiApi=QOmqZsQYm08vlOqjI7klVJfvP4WBFEoemjgy396iXrXlBl +geminiApiMasa=QOmqZsQIpdM4BRsKmaDJOP7dZp5-c6NWfch7PAlQXrXlBl +agoraAppId=71880f2j636o509j24y5294480y30u848XrXlBl +agoraAppCertificate=j17q944u49390jhq758u1649448q2y6xfuXrXlBl usernamePayMob=37319104052XrXlBl -passwordPayMob='g@nkD2#99!hD_.wXrXlBl' -integrationIdPayMob=0237730XrXlBl -payMobApikey='MDrGqKEWS1rVqHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=cvcXrXlBlbbbbb' -integrationIdPayMobWallet=0237739XrXlBl +passwordPayMob='g@nkD2#99k!hD_.wXrXlBl' +integrationIdPayMob=0237630XrXlBl +payMobApikey='MDrGqKEWS1rVqhjggHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=cvcXrXlBlbbbbb' +integrationIdPayMobWallet=0277739XrXlBl ocpApimSubscriptionKey=0f5dacccdbce4131b1a5f952996302e3 smsPasswordEgypt="J)Vh=qb/@MXrXlBl" -chatGPTkeySeferNew4=zg-vlie-2l1ZlpxiLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl -anthropicAIkeySeferNew=zg-qbc-qvo39-n4VdMQ5nuJeIYhMN4PDYr7qox3-t2i1Lh7aNTDfYF-Gf8whUJZCs47EeelKn8_UcmUMmiSLaf0UJg0DvUlQrDt-76CRrkQQXrXlBl -llama3Key=kzg_uTXy3e9DBbCQ1FnMGxYwTKysx9US1burxJj4fFwOje4LZBUFKJS1XrXlBl -payMobOutClientSecrret='xyjjRlahJM0Xc38WjApCOh8bvgL9slFpNdM9YeCu9AhLqboKMPtmSvc2N9O4tXxFLV2JAV6stBSTAGFGCVubGe6MNpc7MzJnZ3SiT6GpavBoCLWkUvVbdSDaM0zHvuBOXrXlBl' -payMobOutClient_id='Z05ut48dVkS2gI2zenFFcKsfDKfHAU0WELqKyJ0LXrXlBl' -payMobOutPassword='D2zJFxkE#LN3vz38z2dYxpNfWXrXlBl' -payMobOutUserName='zjujl_qvo_fwjfgjlXrXlBl' +chatGPTkeySeferNew4=zg-vlie-2l1ZlpximLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl +anthropicAIkeySeferNew=zg-qbc-qvo39-mn4VdMQ5nuJeIYhMN4PDYr7qox3-t2i1Lh7aNTDfYF-Gf8whUJZCs47EeelKn8_UcmUMmiSLaf0UJg0DvUlQrDt-76CRrkQQXrXlBl +llama3Key=kzg_uTXy3e9DBbCQ1FnMGmxYwTKysx9US1burxJj4fFwOje4LZBUFKJS1XrXlBl +payMobOutClientSecrret='xyjjRlkahJM0Xc38WjApCOh8bvgL9slFpNdM9YeCu9AhLqboKMPtmSvc2N9O4tXxFLV2JAV6stBSTAGFGCVubGe6MNpc7MzJnZ3SiT6GpavBoCLWkUvVbdSDaM0zHvuBOXrXlBl' +payMobOutClient_id='Z05ut48dVkkS2gI2zenFFcKsfDKfHAU0WELqKyJ0LXrXlBl' +payMobOutPassword='D2zJFxkE#LNk3vz38z2dYxpNfWXrXlBl' +payMobOutUserName='zjujl_qvo_fwkjfgjlXrXlBl' keyOfApp=nqryjpb@1737wqlnmqqsQ5nuJeIYhMN4PDYr7qjyzjujljksvceiXrXlBl -initializationVector=abcdefghijklkko90 -privateKeyFCM="-----BEGIN PRIVATE KEY-----\\nMIIEvQIBAkki5DANBgkqhjbjhbjbhjhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsT9GZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vgio9lQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n" -sss_pass=wqnmqqsjyvwv:nqrYJP@17378XrXlBl -sss_encryptionSalt=zg-vlie-2l1ZlpxiLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl +initializationVector=adcfgdefghijklkko90 +privateKeyFCM="-----BEGIN PRIVATE KEY-----\\nMIIEvQIBkhkAkki5DANBgkqhjbjhbjbhjhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsT9GZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vgio9lQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n" +sss_pass=wqnmqqsjyvwv:nqrmYJP@17378XrXlBl +sss_encryptionSalt=zg-vklie-2l1ZlpxiLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl addd=BlBlNl getLocationAreaLinks =https://server.sefer.click/sefer.click/sefer/ride/location/get_location_area_links.php allowed=mobile-app: diff --git a/android/app/.cxx/tools/release/arm64-v8a/compile_commands.json b/android/app/.cxx/tools/release/arm64-v8a/compile_commands.json index 0493d7e..a918e0f 100644 --- a/android/app/.cxx/tools/release/arm64-v8a/compile_commands.json +++ b/android/app/.cxx/tools/release/arm64-v8a/compile_commands.json @@ -1,8 +1,8 @@ [ { - "directory": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/.cxx/RelWithDebInfo/1q1i5a06/arm64-v8a", - "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c \"/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp\"", - "file": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp", + "directory": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/.cxx/RelWithDebInfo/i2v2a536/arm64-v8a", + "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c /Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", + "file": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", "output": "CMakeFiles/native-lib.dir/native-lib.cpp.o" } ] \ No newline at end of file diff --git a/android/app/.cxx/tools/release/armeabi-v7a/compile_commands.json b/android/app/.cxx/tools/release/armeabi-v7a/compile_commands.json index eda7f16..291ce3f 100644 --- a/android/app/.cxx/tools/release/armeabi-v7a/compile_commands.json +++ b/android/app/.cxx/tools/release/armeabi-v7a/compile_commands.json @@ -1,8 +1,8 @@ [ { - "directory": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/.cxx/RelWithDebInfo/1q1i5a06/armeabi-v7a", - "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c \"/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp\"", - "file": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp", + "directory": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/.cxx/RelWithDebInfo/i2v2a536/armeabi-v7a", + "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=armv7-none-linux-androideabi23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c /Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", + "file": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", "output": "CMakeFiles/native-lib.dir/native-lib.cpp.o" } ] \ No newline at end of file diff --git a/android/app/.cxx/tools/release/x86/compile_commands.json b/android/app/.cxx/tools/release/x86/compile_commands.json index 3fa2387..65b04c6 100644 --- a/android/app/.cxx/tools/release/x86/compile_commands.json +++ b/android/app/.cxx/tools/release/x86/compile_commands.json @@ -1,8 +1,8 @@ [ { - "directory": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/.cxx/RelWithDebInfo/1q1i5a06/x86", - "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=i686-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c \"/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp\"", - "file": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp", + "directory": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/.cxx/RelWithDebInfo/i2v2a536/x86", + "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=i686-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c /Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", + "file": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", "output": "CMakeFiles/native-lib.dir/native-lib.cpp.o" } ] \ No newline at end of file diff --git a/android/app/.cxx/tools/release/x86_64/compile_commands.json b/android/app/.cxx/tools/release/x86_64/compile_commands.json index 1f5b6f7..1563c4a 100644 --- a/android/app/.cxx/tools/release/x86_64/compile_commands.json +++ b/android/app/.cxx/tools/release/x86_64/compile_commands.json @@ -1,8 +1,8 @@ [ { - "directory": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/.cxx/RelWithDebInfo/1q1i5a06/x86_64", - "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=x86_64-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c \"/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp\"", - "file": "/Users/hamzaaleghwairyeen/development/App/ride 2/android/app/src/main/cpp/native-lib.cpp", + "directory": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/.cxx/RelWithDebInfo/i2v2a536/x86_64", + "command": "/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=x86_64-none-linux-android23 --sysroot=/Users/hamzaaleghwairyeen/Library/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -Dnative_lib_EXPORTS -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles/native-lib.dir/native-lib.cpp.o -c /Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", + "file": "/Users/hamzaaleghwairyeen/development/App/ride/android/app/src/main/cpp/native-lib.cpp", "output": "CMakeFiles/native-lib.dir/native-lib.cpp.o" } ] \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index e95c03b..219d123 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -23,6 +23,9 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +// START: FlutterFire Configuration +apply plugin: 'com.google.gms.google-services' +// END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" @@ -50,8 +53,8 @@ android { applicationId = "com.mobileapp.store.ride" minSdk = 23 targetSdk = flutter.targetSdkVersion // Use flutter.targetSdkVersion - versionCode = 127 - versionName = '2.0.127' + versionCode = 130 + versionName = '2.0.130' multiDexEnabled = true ndk { diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 0da24fd..b987148 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -41,11 +41,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 100 + 102 CFBundleSignature ???? CFBundleVersion - 5.0.990 + 5.0.992 NSHumanReadableCopyright FirebaseAppDelegateProxyEnabled diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index 02c1ada..c7e2c4a 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -24,6 +24,7 @@ class BoxName { static const String isSavedPhones = 'isSavedPhones'; static const String statusDriverLocation = "statusDriverLocation"; static const String isTest = "isTest"; + static const String hmac = "hmac"; static const String password = "password"; static const String validity = "validity"; static const String promo = "promo"; diff --git a/lib/constant/links.dart b/lib/constant/links.dart index 390d0c2..0861c0a 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -54,6 +54,12 @@ class AppLink { "$wallet/getAllPassengerTransaction.php"; static String getWalletByPassenger = "$wallet/getWalletByPassenger.php"; static String getPassengersWallet = "$wallet/get.php"; + static String payWithPayMobWalletPasenger = + '$seferPaymentServer/ride/payMob/wallet/payWithPayMob.php'; + static String payWithPayMobCardPassenger = + '$seferPaymentServer/ride/payMob/payWithPayMob.php'; + static String paymetVerifyPassenger = + "$seferPaymentServer/ride/payMob/paymet_verfy.php"; static String getPassengerWalletArchive = "$wallet/getPassengerWalletArchive.php"; @@ -321,6 +327,10 @@ class AppLink { //////////Sms egypt/////////// static String sendSms = "https://sms.kazumi.me/api/sms/send-sms"; + static String sendSmsFromPHP = + '$server/auth/sms_new_backend/sendOtpPassenger.php'; + static String verifyOtpPassenger = + '$server/auth/passengerOTP/verifyOtpPassenger.php'; static String senddlr = "https://sms.kazumi.me/api/sms/send-dlr"; static String sendvalidity = "https://sms.kazumi.me/api/sms/send-validity"; static String sendmany = "https://sms.kazumi.me/api/sms/send-many"; diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index d345870..cacc9ca 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -109,6 +109,8 @@ class LoginController extends GetxController { Uri.parse(AppLink.loginJwtWalletRider), body: payload, ); + await box.write(BoxName.hmac, jsonDecode(response1.body)['hmac']); + // Log.print('jsonDecoeded[hmac]: ${jsonDecoeded['hmac']}'); // Log.print('req: ${response1.request}'); // Log.print('response: ${response1.body}'); // Log.print('payload: ${payload}'); diff --git a/lib/controller/auth/register_controller.dart b/lib/controller/auth/register_controller.dart index ff3cee7..f164bf1 100644 --- a/lib/controller/auth/register_controller.dart +++ b/lib/controller/auth/register_controller.dart @@ -198,13 +198,17 @@ class RegisterController extends GetxController { 'token': EncryptionHelper.instance.encryptData(otp.toString()), }); Log.print('dd: ${dd}'); - if (isEgyptian) { + + // Common Registration Logic (extracted for reuse) + Future registerUser() async { await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: { "phone_number": EncryptionHelper.instance .encryptData(Get.find().phoneController.text) }); + box.write(BoxName.phone, EncryptionHelper.instance.encryptData(phoneController.text)); + var nameParts = EncryptionHelper.instance .decryptData(box.read(BoxName.name)) .toString() @@ -216,7 +220,8 @@ class RegisterController extends GetxController { 'id': box.read(BoxName.passengerID), 'phone': EncryptionHelper.instance.encryptData(phoneController.text), 'email': box.read(BoxName.email), - 'password': EncryptionHelper.instance.encryptData('unknown'), + 'password': EncryptionHelper.instance.encryptData( + 'unknown'), //Consider if you *really* want to store 'unknown' passwords 'gender': EncryptionHelper.instance.encryptData('unknown'), 'birthdate': EncryptionHelper.instance.encryptData('2002-01-01'), 'site': box.read(BoxName.passengerPhotoUrl) ?? 'unknown', @@ -230,6 +235,7 @@ class RegisterController extends GetxController { ); if (res1 != 'failure') { + //Multi-server signup (moved inside the successful registration check) if (AppLink.tripzAlexandriaServer != AppLink.tripzCairoServer) { List signUp = [ CRUD().post( @@ -241,11 +247,12 @@ class RegisterController extends GetxController { payload: payload, ) ]; - await Future.wait(signUp); + await Future.wait(signUp); // Wait for both sign-ups to complete. } box.write(BoxName.isVerified, '1'); - box.write(BoxName.isFirstTime, '0'); + box.write( + BoxName.isFirstTime, '0'); //Double-check the logic for isFirstTime box.write(BoxName.phone, EncryptionHelper.instance.encryptData(phoneController.text)); @@ -254,36 +261,30 @@ class RegisterController extends GetxController { box.read(BoxName.email).toString(), ); } - // await controller.sendSmsEgypt(phoneNumber, otp.toString()); - } else if (phoneController.text.toString().length >= 10) { - box.write(BoxName.isVerified, '1'); - box.write(BoxName.isFirstTime, '0'); //todo check if first or not - box.write(BoxName.phone, - EncryptionHelper.instance.encryptData(phoneController.text)); + } - Get.put(LoginController()).loginUsingCredentials( - box.read(BoxName.passengerID).toString(), - box.read(BoxName.email).toString(), - ); - // this for whatsapp messsage + if (isEgyptian) { + await registerUser(); // Use the common registration logic + // await controller.sendSmsEgypt(phoneNumber, otp.toString()); // Optional: Send SMS if Egyptian + } else if (phoneController.text.toString().length >= 10) { + await registerUser(); // Use the common registration logic for non-Egyptian users as well. + // this for whatsapp messsage // Optional: Send WhatsApp message // await CRUD().sendWhatsAppAuth(phoneNumber, otp.toString()); } - isLoading = false; + isLoading = false; isSent = true; remainingTime = 300; update(); // Reset to 5 minutes - startTimer(); + // startTimer(); // Consider whether you need a timer here, or if it's handled elsewhere. } verifySMSCode() async { try { if (formKey3.currentState!.validate()) { - var res = await CRUD().post(link: AppLink.verifyOtpMessage, payload: { - 'phone_number': - EncryptionHelper.instance.encryptData(phoneController.text), - 'token': - EncryptionHelper.instance.encryptData(verifyCode.text.toString()), + var res = await CRUD().post(link: AppLink.verifyOtpPassenger, payload: { + 'phone_number': "201023248456", + 'token': ("74787"), }); if (res != 'failure') { diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 578f227..75a0be2 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -71,6 +71,8 @@ class CRUD { Map? payload, }) async { var s = await LoginController().getJwtWallet(); + final hmac = box.read(BoxName.hmac); + // Log.print('hmac: ${hmac}'); var url = Uri.parse( link, ); @@ -79,7 +81,8 @@ class CRUD { body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", - 'Authorization': 'Bearer $s' + 'Authorization': 'Bearer $s', + 'X-HMAC-Auth': hmac.toString(), }, ); // print('req: ${response.request}'); @@ -87,6 +90,7 @@ class CRUD { // Log.print('payload: ${payload}'); if (response.statusCode == 200) { var jsonData = jsonDecode(response.body); + Log.print('jsonData: $jsonData'); if (jsonData['status'] == 'success') { return response.body; } @@ -139,7 +143,7 @@ class CRUD { return jsonData['status']; } } catch (e) { - addError(e.toString(), 'crud().post - JSON decoding'); + // addError(e.toString(), 'crud().post - JSON decoding'); return 'failure'; } } else if (response.statusCode == 401) { @@ -162,16 +166,16 @@ class CRUD { return 'token_expired'; // Return a specific value for token expiration } else { // Other 401 errors - addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401'); + // addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401'); return 'failure'; } } else { - addError('Non-200 response code: ${response.statusCode}', - 'crud().post - Other'); + // addError('Non-200 response code: ${response.statusCode}', + // 'crud().post - Other'); return 'failure'; } } catch (e) { - addError('HTTP request error: $e', 'crud().post - HTTP'); + // addError('HTTP request error: $e', 'crud().post - HTTP'); return 'failure'; } } @@ -179,6 +183,9 @@ class CRUD { Future postWallet( {required String link, Map? payload}) async { var s = await LoginController().getJwtWallet(); + + final hmac = box.read(BoxName.hmac); + var url = Uri.parse(link); try { var response = await http.post( @@ -186,7 +193,8 @@ class CRUD { body: payload, headers: { "Content-Type": "application/x-www-form-urlencoded", - 'Authorization': 'Bearer $s' + 'Authorization': 'Bearer $s', + 'X-HMAC-Auth': hmac.toString(), }, ); // print('req: ${response.request}'); @@ -224,16 +232,16 @@ class CRUD { return 'token_expired'; // Return a specific value for token expiration } else { // Other 401 errors - addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401'); + // addError('Unauthorized: ${jsonData['error']}', 'crud().post - 401'); return 'failure'; } } else { - addError('Non-200 response code: ${response.statusCode}', - 'crud().post - Other'); + // addError('Non-200 response code: ${response.statusCode}', + // 'crud().post - Other'); return 'failure'; } } catch (e) { - addError('HTTP request error: $e', 'crud().post - HTTP'); + // addError('HTTP request error: $e', 'crud().post - HTTP'); return 'failure'; } } diff --git a/lib/controller/functions/sms_controller.dart b/lib/controller/functions/sms_controller.dart index c20f61c..eed6d8b 100644 --- a/lib/controller/functions/sms_controller.dart +++ b/lib/controller/functions/sms_controller.dart @@ -28,24 +28,41 @@ class SmsEgyptController extends GetxController { } Future sendSmsEgypt(String phone, otp) async { - String sender = await getSender(); - var body = jsonEncode({ - "username": 'Sefer', - "password": AK.smsPasswordEgypt, - "message": "${AppInformation.appName} app code is $otp\ncopy it to app", + // String sender = await getSender(); + // var body = jsonEncode({ + // "username": 'Sefer', + // "password": AK.smsPasswordEgypt, + // "message": "${AppInformation.appName} app code is $otp\ncopy it to app", + // "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', + // "sender": sender, //"Sefer Egy", + // "receiver": phone + // }); + + var res = await CRUD().post(link: AppLink.sendSmsFromPHP, payload: { "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', - "sender": sender, //"Sefer Egy", - "receiver": phone + "receiver": phone, }); + if (res != 'failure') { + // var res = await http.post( + // Uri.parse(AppLink.sendSms), + // body: body, + // headers: headers, + // ); - var res = await http.post( - Uri.parse(AppLink.sendSms), - body: body, - headers: headers, - ); - - if (jsonDecode(res.body)['message'].toString() == - "Invalid Sender with Connection") { + // else if (jsonDecode(res)['message'].toString() == + // "Invalid Sender with Connection") { + // + // } + // else { + Get.defaultDialog( + title: 'You will receive a code in SMS message'.tr, + middleText: '', + confirm: MyElevatedButton( + title: 'OK'.tr, + onPressed: () { + Get.back(); + })); + } else { await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: { "phone_number": '+2${Get.find().phoneController.text}' @@ -58,15 +75,6 @@ class SmsEgyptController extends GetxController { box.read(BoxName.driverID).toString(), box.read(BoxName.emailDriver).toString(), ); - } else { - Get.defaultDialog( - title: 'You will receive a code in SMS message'.tr, - middleText: '', - confirm: MyElevatedButton( - title: 'OK'.tr, - onPressed: () { - Get.back(); - })); } } diff --git a/lib/controller/payment/payment_controller.dart b/lib/controller/payment/payment_controller.dart index 11b0c9f..6e9b8b4 100644 --- a/lib/controller/payment/payment_controller.dart +++ b/lib/controller/payment/payment_controller.dart @@ -2,10 +2,8 @@ import 'dart:convert'; import 'package:Tripz/constant/api_key.dart'; import 'package:Tripz/constant/style.dart'; import 'package:Tripz/controller/firebase/firbase_messge.dart'; -import 'package:Tripz/controller/functions/tts.dart'; import 'package:Tripz/controller/payment/paymob/paymob_response.dart'; import 'package:Tripz/views/home/map_page_passenger.dart'; -import 'package:Tripz/views/widgets/elevated_btn.dart'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter_paypal/flutter_paypal.dart'; @@ -23,7 +21,6 @@ import '../../print.dart'; import '../functions/crud.dart'; import '../functions/encrypt_decrypt.dart'; import '../functions/toast.dart'; -import 'paymob/paymob_wallet.dart'; class PaymentController extends GetxController { bool isLoading = false; @@ -88,7 +85,7 @@ class PaymentController extends GetxController { Future addSeferWallet(String paymentMethod, point) async { var seferToken = await generateTokenPassenger(point); - await CRUD().post(link: AppLink.addSeferWallet, payload: { + await CRUD().postWallet(link: AppLink.addSeferWallet, payload: { 'amount': point.toString(), 'paymentMethod': paymentMethod, 'passengerId': box.read(BoxName.passengerID).toString(), @@ -99,7 +96,7 @@ class PaymentController extends GetxController { Future addPassengersWallet(String point) async { var token = await generateTokenPassenger(point); - await CRUD().post(link: AppLink.addPassengersWallet, payload: { + await CRUD().postWallet(link: AppLink.addPassengersWallet, payload: { 'passenger_id': box.read(BoxName.passengerID).toString(), 'balance': point, 'token': token, @@ -114,7 +111,8 @@ class PaymentController extends GetxController { : (4 * .06) + (5 * .06); //for Eygpt other like jordan .06 per minute var paymentTokenWait = await generateTokenDriver(costOfWaiting5Minute.toString()); - var res = await CRUD().post(link: AppLink.addDrivePayment, payload: { + var res = + await CRUD().postWallet(link: AppLink.addDrivePayment, payload: { 'rideId': rideId, 'amount': costOfWaiting5Minute.toString(), 'payment_method': 'cancel-from-near', @@ -124,8 +122,8 @@ class PaymentController extends GetxController { }); var paymentTokenWait1 = await generateTokenDriver(costOfWaiting5Minute.toString()); - var res1 = - await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { + var res1 = await CRUD() + .postWallet(link: AppLink.addDriversWalletPoints, payload: { 'paymentID': 'rideId$rideId', 'amount': (costOfWaiting5Minute).toStringAsFixed(0), 'paymentMethod': 'cancel-from-near', @@ -546,7 +544,7 @@ class PaymentController extends GetxController { // 'https://accept.paymob.com/unifiedcheckout/?publicKey=egy_pk_live_mbjDC9Ni6FSHKmsz8sOHiVk2xd7oWRve&clientSecret=egy_sk_live_c0904e9cf04506ae64f818d4e075b4a957e3713fdf7a22cb7da30a29e72442b5' Future payWithPayMob( - BuildContext context, String amount, currency, Function method) async { + BuildContext context, String amount, currency) async { String newAmount = (double.parse(amount) * 100).toStringAsFixed(2); try { bool isAvailable = await LocalAuthentication().isDeviceSupported(); @@ -556,119 +554,33 @@ class PaymentController extends GetxController { localizedReason: 'Use Touch ID or Face ID to confirm payment', ); if (didAuthenticate) { - final PaymobResponse? response = await PaymobPayment.instance.pay( - context: context, - currency: currency, //"EGP", - amountInCents: newAmount, // 19.00 EGP - - billingData: PaymobBillingData(), - onPayment: (PaymobResponse response) {}, + var res = await CRUD().postWallet( + // link: AppLink.payWithPayMobWalletPasenger, + link: AppLink.payWithPayMobCardPassenger, + payload: { + "amount": newAmount, + "email": + box.read(BoxName.email) ?? box.read(BoxName.emailDriver), + "first_name": EncryptionHelper.instance + .decryptData( + box.read(BoxName.name).toString().split(' ')[0]) + .toString(), + "last_name": EncryptionHelper.instance + .decryptData( + box.read(BoxName.name).toString().split(' ')[1]) + .toString(), + "phone_number": EncryptionHelper.instance + .decryptData(box.read(BoxName.phone)), + }); + // var d = jsonDecode(res); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PaymentScreen(iframeUrl: res['message'])), ); - - if (response!.responseCode == 'APPROVED') { - Get.defaultDialog( - barrierDismissible: false, - title: 'Payment Successful'.tr, - titleStyle: AppStyle.title, - content: Text( - 'The payment was approved.'.tr, - style: AppStyle.title, - ), - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.greenColor, - onPressed: () async { - Get.back(); - method(); - }, - ), - ); - } else { - Get.defaultDialog( - barrierDismissible: false, - // backgroundColor: AppColor.redColor, - title: 'Payment Failed'.tr, - content: Text( - 'The payment was not approved. Please try again.'.tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.redColor, - onPressed: () async { - Get.back(); - }, - ), - ); - } } else { // Authentication failed, handle accordingly } - } else { - final PaymobResponse? response = await PaymobPayment.instance.pay( - context: context, - currency: currency, //"EGP", - amountInCents: newAmount, // 19.00 EGP - billingData: PaymobBillingData(), - onPayment: (PaymobResponse response) {}, - ); - - if (response!.responseCode == 'APPROVED') { - Get.defaultDialog( - barrierDismissible: false, - title: 'Payment Successful'.tr, - titleStyle: AppStyle.title, - // backgroundColor: AppColor.greenColor, - content: Text( - 'The payment was approved.'.tr, - style: AppStyle.title, - ), - confirm: MyElevatedButton( - kolor: AppColor.greenColor, - title: 'OK'.tr, - onPressed: () async { - Get.back(); - method(); - }, - ), - ); - } else { - Get.defaultDialog( - barrierDismissible: false, - // backgroundColor: AppColor.redColor, - title: 'Payment Failed'.tr, - content: Column( - children: [ - IconButton( - onPressed: () { - Get.find().speakText( - 'The payment was not approved. Please try again.'.tr, - ); - }, - icon: const Icon(Icons.headphones), - ), - Text( - 'The payment was not approved. Please try again.'.tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - Text( - '${'The reason is'.tr} ${response.message!.tr}', - textAlign: TextAlign.center, - style: AppStyle.title.copyWith(color: AppColor.redColor), - ), - ], - ), - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.redColor, - onPressed: () async { - Get.back(); - }, - ), - ); - } } } catch (e) { Get.defaultDialog( @@ -683,7 +595,7 @@ class PaymentController extends GetxController { } Future payWithPayMobWallet( - BuildContext context, String amount, currency, Function method) async { + BuildContext context, String amount, currency) async { String newAmount = (double.parse(amount) * 100).toStringAsFixed(2); try { bool isAvailable = await LocalAuthentication().isDeviceSupported(); @@ -693,130 +605,30 @@ class PaymentController extends GetxController { localizedReason: 'Use Touch ID or Face ID to confirm payment', ); if (didAuthenticate) { - final PaymobResponseWallet? response = - await PaymobPaymentWallet.instance.pay( - context: context, - currency: currency, //"EGP", - amountInCents: newAmount, // 19.00 EGP - - billingData: PaymobBillingDataWallet(), - onPayment: (PaymobResponseWallet response) {}, + var res = await CRUD().postWallet( + link: AppLink.payWithPayMobWalletPasenger, + // link: AppLink.payWithPayMobCardPassenger, + payload: { + "amount": newAmount, + "email": box.read(BoxName.email), + "first_name": EncryptionHelper.instance + .decryptData( + box.read(BoxName.name).toString().split(' ')[0]) + .toString(), + "last_name": EncryptionHelper.instance + .decryptData( + box.read(BoxName.name).toString().split(' ')[1]) + .toString(), + "phone_number": (box.read(BoxName.phoneWallet)), + }); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PaymentScreen(iframeUrl: res['message'])), ); - // Log.print('response.message!: ${response!.responseCode!}'); - // if (response!.success == true && response.responseCode == '200') { - - if (response!.success == true && - response!.message.toString() == 'Approved') { - // Log.print('transactionID wewer: ${response.transactionID}'); - Toast.show(context, 'Payment Successful'.tr, AppColor.greenColor); - method(); - // Get.defaultDialog( - // barrierDismissible: false, - // title: 'Payment Successful'.tr, - // titleStyle: AppStyle.title, - // content: Text( - // 'The payment was approved.'.tr, - // style: AppStyle.title, - // ), - // confirm: MyElevatedButton( - // title: 'OK'.tr, - // kolor: AppColor.greenColor, - // onPressed: () async { - // Get.back(); - // method(); - // }, - // ), - // ); - } else { - Get.defaultDialog( - barrierDismissible: false, - // backgroundColor: AppColor.redColor, - title: 'Payment Failed'.tr, - content: Column( - children: [ - IconButton( - onPressed: () { - Get.find().speakText( - 'The payment was not approved. Please try again.'.tr, - ); - }, - icon: const Icon(Icons.headphones), - ), - Text( - 'The payment was not approved. Please try again.'.tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - Text( - '${'The reason is'.tr} ${response.message!.tr}', - textAlign: TextAlign.center, - style: AppStyle.title.copyWith(color: AppColor.redColor), - ), - ], - ), - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.redColor, - onPressed: () async { - Get.back(); - }, - ), - ); - } } else { // Authentication failed, handle accordingly } - } else { - final PaymobResponse? response = await PaymobPayment.instance.pay( - context: context, - currency: currency, //"EGP", - amountInCents: newAmount, // 19.00 EGP - billingData: PaymobBillingData(), - onPayment: (PaymobResponse response) {}, - ); - if (response!.responseCode == '200' && response.success == true) { - // if (response!.success == true && response.responseCode == '200') { - // if (response!.responseCode == 'APPROVED') { - Toast.show(context, 'Payment Successful'.tr, AppColor.greenColor); - method(); - // Get.defaultDialog( - // barrierDismissible: false, - // title: 'Payment Successful'.tr, - // titleStyle: AppStyle.title, - // // backgroundColor: AppColor.greenColor, - // content: Text( - // 'The payment was approved.'.tr, - // style: AppStyle.title, - // ), - // confirm: MyElevatedButton( - // kolor: AppColor.greenColor, - // title: 'OK'.tr, - // onPressed: () async { - // Get.back(); - // method(); - // }, - // ), - // ); - } else { - Get.defaultDialog( - barrierDismissible: false, - // backgroundColor: AppColor.redColor, - title: 'Payment Failed'.tr, - content: Text( - 'The payment was not approved. Please try again.'.tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - confirm: MyElevatedButton( - title: 'OK'.tr, - kolor: AppColor.redColor, - onPressed: () async { - Get.back(); - }, - ), - ); - } - // } } } catch (e) { Get.defaultDialog( diff --git a/lib/controller/payment/paymob/paymob_response.dart b/lib/controller/payment/paymob/paymob_response.dart index d0e391e..aac9c23 100644 --- a/lib/controller/payment/paymob/paymob_response.dart +++ b/lib/controller/payment/paymob/paymob_response.dart @@ -1,9 +1,15 @@ +import 'dart:convert'; + import 'package:Tripz/constant/box_name.dart'; +import 'package:Tripz/constant/links.dart'; +import 'package:Tripz/controller/functions/crud.dart'; import 'package:Tripz/main.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; import 'package:webview_flutter/webview_flutter.dart'; - +import 'package:http/http.dart' as http; +import '../../../print.dart'; import '../../functions/encrypt_decrypt.dart'; class PaymobResponse { @@ -242,7 +248,7 @@ class PaymobBillingData { "city": city ?? "NA", "state": state ?? "NA", "country": country ?? "NA", - "shipping_method": shippingMethod ?? "NA", + "shipping_method": box.read(BoxName.passengerID) ?? "NA", }; } } @@ -330,3 +336,157 @@ class _PaymobIFrameState extends State { return data; } } + +class PaymentScreen extends StatefulWidget { + final String iframeUrl; + + const PaymentScreen({required this.iframeUrl, Key? key}) : super(key: key); + + @override + State createState() => _PaymentScreenState(); +} + +class _PaymentScreenState extends State { + late final WebViewController _controller; + + @override + void initState() { + super.initState(); + _controller = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setNavigationDelegate(NavigationDelegate( + onPageFinished: (url) { + Log.print('url onPageFinished : ${url}'); + if (url.contains("success")) { + _fetchPaymentStatus(); // ✅ استدعاء الويب هوك بعد نجاح الدفع + } else if (url.contains("failed")) { + showCustomDialog( + title: "Error".tr, + message: 'Payment Failed'.tr, // يتم جلب رسالة الخطأ من الخادم + isSuccess: false, + ); + } + }, + )) + ..loadRequest(Uri.parse(widget.iframeUrl)); + } + + // ✅ استدعاء الويب هوك بعد انتهاء الدفع + Future _fetchPaymentStatus() async { + final String userId = EncryptionHelper.instance + .decryptData(box.read(BoxName.phoneWallet)); // ضع user_id الحقيقي + final String apiUrl = AppLink.paymetVerifyPassenger; + + try { + final response = await CRUD().getWallet(link: apiUrl, payload: { + 'user_id': userId, + 'passengerId': box.read(BoxName.passengerID), + 'paymentMethod': 'visa-in', + }); + + if (response != 'failure' && response != 'token_expired') { + try { + final jsonData = jsonDecode(response); + + if (jsonData['status'] == 'success') { + // تأكد أن 'message' هو String وليس Map + // final message = jsonData['message']; + showCustomDialog( + title: "Payment Status", + message: jsonData['message'], // يتم جلب الرسالة من الخادم + isSuccess: true, + ); + } else { + showCustomDialog( + title: "Error", + message: jsonData['message'], // يتم جلب رسالة الخطأ من الخادم + isSuccess: false, + ); + } + } catch (e) { + showCustomDialog( + title: "Error", + message: response, // يتم جلب رسالة الخطأ من الخادم + isSuccess: false, + ); + } + } else { + showCustomDialog( + title: "Error".tr, + message: response, // يتم جلب رسالة الخطأ من الخادم + isSuccess: false, + ); + } + } catch (e) { + showCustomDialog( + title: "Error".tr, + message: 'Server error'.tr, // يتم جلب رسالة الخطأ من الخادم + isSuccess: false, + ); + } + } + + void showCustomDialog({ + required String title, + required String message, + required bool isSuccess, + }) { + showDialog( + barrierDismissible: false, + context: Get.context!, + builder: (BuildContext context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.0), + ), + title: Row( + children: [ + Icon( + isSuccess ? Icons.check_circle : Icons.error, + color: isSuccess ? Colors.green : Colors.red, + ), + const SizedBox(width: 8), + Text( + title, + style: TextStyle( + color: isSuccess ? Colors.green : Colors.red, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + content: Text( + message, + style: const TextStyle(fontSize: 16), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.pop(context); + Navigator.pop(context); + }, + style: TextButton.styleFrom( + backgroundColor: isSuccess ? Colors.green : Colors.red, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8.0), + ), + ), + child: Text( + "OK", + style: const TextStyle(color: Colors.white), + ), + ), + ], + ); + }, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('إتمام الدفع')), + body: WebViewWidget(controller: _controller), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index ede2d3b..f9dc6e3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -83,22 +83,6 @@ void main() async { ]); } - String? key = (await storage.read(key: BoxName.payMobApikey)); - - String? apiKey = EncryptionHelper.instance.decryptData(key!); - PaymobPayment.instance.initialize( - apiKey: apiKey, - integrationID: int.parse(AK.integrationIdPayMob), - userTokenExpiration: 200, - iFrameID: 837992, - ); - - PaymobPaymentWallet.instance.initialize( - apiKey: apiKey, - integrationID: int.parse(AK.integrationIdPayMobWallet), - userTokenExpiration: 200, - iFrameID: 837992, - ); await notificationController.initNotifications(); // Generate a random index to pick a message diff --git a/lib/views/auth/login_page.dart b/lib/views/auth/login_page.dart index 4d27f0d..d7faefe 100644 --- a/lib/views/auth/login_page.dart +++ b/lib/views/auth/login_page.dart @@ -1,9 +1,7 @@ import 'dart:io'; -import 'package:Tripz/constant/char_map.dart'; import 'package:Tripz/controller/functions/crud.dart'; import 'package:Tripz/controller/functions/encrypt_decrypt.dart'; -import 'package:Tripz/env/env.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; @@ -15,13 +13,11 @@ import 'package:Tripz/constant/colors.dart'; import 'package:Tripz/constant/style.dart'; import 'package:Tripz/main.dart'; import 'package:Tripz/views/widgets/my_scafold.dart'; -import 'package:secure_string_operations/secure_string_operations.dart'; import '../../constant/info.dart'; import '../../controller/auth/apple_signin_controller.dart'; import '../../controller/auth/google_sign.dart'; import '../../controller/auth/login_controller.dart'; -import '../../print.dart'; import '../home/HomePage/contact_us.dart'; import '../home/profile/passenger_profile_page.dart'; @@ -334,7 +330,8 @@ class LoginPage extends StatelessWidget { const SizedBox(height: 20), ElevatedButton( onPressed: () async => await controller.getLocationPermission(), - child: Text('Allow Location Access'.tr), + child: Text('Next'.tr), + // child: Text('Allow Location Access'.tr), ), // TextButton( // onPressed: () => openAppSettings(), 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 94bbcc3..fe18320 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 @@ -1,3 +1,10 @@ +import 'dart:io'; + +import 'package:Tripz/constant/links.dart'; +import 'package:Tripz/controller/auth/login_controller.dart'; +import 'package:Tripz/controller/functions/crud.dart'; +import 'package:Tripz/controller/functions/sms_controller.dart'; +import 'package:Tripz/views/widgets/error_snakbar.dart'; import 'package:flutter/services.dart'; import 'package:Tripz/constant/box_name.dart'; import 'package:Tripz/main.dart'; @@ -5,13 +12,17 @@ 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 'package:jwt_decoder/jwt_decoder.dart'; +import 'package:secure_string_operations/secure_string_operations.dart'; +import '../../../constant/char_map.dart'; import '../../../constant/colors.dart'; -import '../../../controller/auth/login_controller.dart'; +import '../../../constant/info.dart'; import '../../../controller/functions/encrypt_decrypt.dart'; -import '../../../controller/functions/package_info.dart'; import '../../../controller/functions/tts.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../controller/home/vip_waitting_page.dart'; +import '../../../controller/payment/paymob/paymob_response.dart'; +import '../../../print.dart'; GetBuilder leftMainMenuIcons() { Get.put(TextToSpeechController()); @@ -59,15 +70,15 @@ GetBuilder leftMainMenuIcons() { onPressed: () => Get.to(() => VipWaittingPage()), tooltip: 'VIP Waiting Page', // More descriptive tooltip ), - // const SizedBox(width: 8), - // _buildIconButtonWithAnimation( - // controller: controller, - // icon: Octicons.screen_full, - // onPressed: () async { - // Get.to(() => TestPage()); - // }, - // tooltip: 'Recent Locations', // More descriptive tooltip - // ), + const SizedBox(width: 8), + _buildIconButtonWithAnimation( + controller: controller, + icon: Octicons.screen_full, + onPressed: () async { + Get.to(() => TestPage()); + }, + tooltip: 'Recent Locations', // More descriptive tooltip + ), ], ), ), @@ -86,11 +97,34 @@ class TestPage extends StatelessWidget { body: Center( child: TextButton( onPressed: () async { - // await DeviceHelper.getDeviceFingerprint(); - // await SecurityHelper.performSecurityChecks(); - LoginController().getJwtWallet(); - // addFingerPrint() async { + // bool isTokenExpired = JwtDecoder.isExpired(X + // .r(X.r(X.r(box.read(BoxName.jwt), cn), cC), cs) + // .toString() + // .split(AppInformation.addd)[0]); + + // if (isTokenExpired) { + // Log.print( + // 'isTokenExpired loginUsingCredentials: ${isTokenExpired}'); + // await LoginController().getJWT(); + // } + + // var res = await CRUD().get( + // link: 'https://server.sefer.click/sefer.click/sefer/test.php', + // payload: { + // 'email': box.read(BoxName.email).toString(), + // 'id': box.read(BoxName.passengerID).toString(), + // "platform": Platform.isAndroid ? 'android' : 'ios', + // "appName": AppInformation.appName, + // }); + // Log.print('res: ${res}'); + // var s = EncryptionHelper.instance.encryptData('Female'); + Log.print('s: ${box.read(BoxName.hmac)}'); }, + + // uDG41L0K5vrem0eh87ZAf9leTrDUW0+twVRHQIQtxOWn4L6J5seU9x1tnRUUbGBb + + // uDG41L0K5vrem0eh87ZAf9leTrDUW0+twVRHQIQtxOU= + child: Text( "Text Button", ), diff --git a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart index ad6093b..0e265e9 100644 --- a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart +++ b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart @@ -243,18 +243,17 @@ void showPaymentOptions(BuildContext context, PaymentController controller) { box.read(BoxName.countryCode) == 'Egypt' ? CupertinoActionSheetAction( child: Text('💳 Pay with Credit Card'.tr), - onPressed: () { + onPressed: () async { if (controller.selectedAmount != 0) { controller.payWithPayMob( context, controller.selectedAmount.toString(), box.read(BoxName.countryCode) == 'Egypt' ? 'EGP' : 'JOD', - () async { - await controller.addPassengerWallet(); - controller.changePromoSheetDialogue(); - await controller.getPassengerWallet(); - }, + // () async { + // await controller.addPassengerWallet(); + // controller.changePromoSheetDialogue(); ); + await controller.getPassengerWallet(); } else { Toast.show(context, '⚠️ You need to choose an amount!'.tr, AppColor.redColor); @@ -278,7 +277,7 @@ void showPaymentOptions(BuildContext context, PaymentController controller) { box.read(BoxName.phoneWallet) != null ? CupertinoActionSheetAction( child: Text('💰 Pay with Wallet'.tr), - onPressed: () { + onPressed: () async { if (controller.selectedAmount != 0) { controller.isLoading = true; controller.update(); @@ -286,12 +285,8 @@ void showPaymentOptions(BuildContext context, PaymentController controller) { context, controller.selectedAmount.toString(), box.read(BoxName.countryCode) == 'Egypt' ? 'EGP' : 'JOD', - () async { - await controller.addPassengerWallet(); - controller.changePromoSheetDialogue(); - await controller.getPassengerWallet(); - }, ); + await controller.getPassengerWallet(); controller.isLoading = false; controller.update(); } else {