diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 0945436..f6ed13d 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -64,7 +64,8 @@ $routes->get('payment_form', 'PaymentController::payment_form'); $routes->post('processPayment', 'PaymentController::processPayment'); -$routes->match(['get','post'],'/test/(:any)','Test_controller::index/$1'); +$routes->match(['get','post'],'/test','Test_controller::sendEmail'); +$routes->match(['get','post'],'/test2','Test_controller::test2'); diff --git a/app/Controllers/Test_controller.php b/app/Controllers/Test_controller.php index 04b70f7..986c05e 100644 --- a/app/Controllers/Test_controller.php +++ b/app/Controllers/Test_controller.php @@ -28,6 +28,14 @@ use App\Models\Cart_model; use App\Models\Transaction_model; +use Google_Client; +use Google_Service_Gmail; +use Google_Service_Gmail_Message; +use Google_Service_Gmail_ModifyMessageRequest; +use GuzzleHttp\Client as GuzzleClient; +use Google_Service_Gmail_MessagePart; +use Google_Service_Gmail_MessagePartHeader; +use Google_Service_Gmail_MessagePartBody; class Test_controller extends BaseController { @@ -72,16 +80,225 @@ class Test_controller extends BaseController { - - - - - - - + } + public function test2() + { + if($this->request->getVar('code')) { + try { + $capi = new Google_Client(); + + // Get the access token + $data = $capi->GetAccessToken(CLIENT_ID, CLIENT_REDIRECT_URL, CLIENT_SECRET, $this->request->getVar('code')); + + // Save the access token as a session variable + $_SESSION['access_token'] = $data['access_token']; + + // Redirect to the page where user can create event + header('Location: home.php'); + exit(); + } + catch(Exception $e) { + echo $e->getMessage(); + exit(); + } + } + } + public function sendEmail() + { + $credentialsPath = 'credentials.json'; + $tokensPath = 'token.json'; + $accessToken = $this->getAccessToken($tokensPath); // Retrieve access token from storage + $refreshToken = $this->getRefreshToken($tokensPath); // Retrieve refresh token from storage + $recipientEmail = 'gowtham.manavalan.la@gmail.com'; + $subject = 'Test email'; + $messageBody = 'This is a test email sent using the Gmail API'; + + $client = new Google_Client(); + $client->setAuthConfig($credentialsPath); + + // Set the access token and refresh token + // $client->setAccessToken([ + // 'access_token' => $accessToken, + // 'refresh_token' => $refreshToken, + // 'expires_in' => 3600, // Expiration time in seconds (adjust if necessary) + // 'created' => time() + // ]); + + // if ($client->isAccessTokenExpired()) { + if (false) { + // Refresh the access token if expired + $newAccessToken = $this->refreshAccessToken($client, $refreshToken); // Implement your own method to refresh the token + $client->setAccessToken([ + 'access_token' => $newAccessToken, + 'refresh_token' => $refreshToken, + 'expires_in' => 3600, + 'created' => time() + ]); + + // Update the access token in storage if necessary + $this->updateAccessToken($newAccessToken, $tokensPath); // Implement your own method to update the token + } else { + // Request authorization from the user. + $authUrl = $client->createAuthUrl(); + echo "Open the following link in your browser:\n%s\n", $authUrl; + print 'Enter verification code: '; + $authCode = trim(fgets(STDIN)); + + // Exchange authorization code for an access token. + $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); + $client->setAccessToken($accessToken); + + // Check to see if there was an error. + if (array_key_exists('error', $accessToken)) { + throw new Exception(join(', ', $accessToken)); + } + } + // Save the token to a file. + if (!file_exists(dirname($tokenPath))) { + mkdir(dirname($tokensPath), 0700, true); + } + file_put_contents($tokensPath, json_encode($this->client->getAccessToken())); + $service = new Google_Service_Gmail($client); + + $message = $this->createMessage('me', $recipientEmail, $subject, $messageBody); + + $service->users_messages->send('me', $message); + + echo 'Email sent successfully'; + } + + private function getAccessToken($tokensPath) + { + $tokens = $this->loadTokens($tokensPath); + return $tokens['access_token'] ?? null; + } + + private function getRefreshToken($tokensPath) + { + $tokens = $this->loadTokens($tokensPath); + return $tokens['refresh_token'] ?? null; + } + + private function refreshAccessToken($client, $refreshToken) + { + $client->fetchAccessTokenWithRefreshToken($refreshToken); + return $client->getAccessToken()['access_token']; + } + + private function updateAccessToken($accessToken, $tokensPath) + { + $tokens = $this->loadTokens($tokensPath); + $tokens['access_token'] = $accessToken; + $this->saveTokens($tokens, $tokensPath); + } + + private function loadTokens($tokensPath) + { + if (file_exists($tokensPath)) { + $tokensData = file_get_contents($tokensPath); + return json_decode($tokensData, true); + } + return []; + } + + private function saveTokens($tokens, $tokensPath) + { + $tokensData = json_encode($tokens); + file_put_contents($tokensPath, $tokensData); + } + + private function createMessage($sender, $recipient, $subject, $messageBody) + { + $message = new Google_Service_Gmail_Message(); + $email = new Google_Service_Gmail_MessagePartHeader(); + $email->setName('To'); + $email->setValue($recipient); + $message->setPayload(new Google_Service_Gmail_MessagePart()); + $message->getPayload()->setHeaders([$email]); + + $body = new Google_Service_Gmail_MessagePartBody(); + $body->setData(base64_encode($messageBody)); + $message->getPayload()->setBody($body); + + return $message; + } + + + + + + + + + + + + + + + + + + // public function sendEmail() + // { + // $credentialsPath = 'credentials.json'; + // $accessToken = 'your-access-token'; + // $refreshToken = 'your-refresh-token'; + // $recipientEmail = 'gowtham.manavalan.la@gmail.com'; + // $subject = 'Test email'; + // $messageBody = 'This is a test email sent using the Gmail API'; + + // $client = new Google_Client(); + // $client->setAuthConfig($credentialsPath); + + // // Set the access token and refresh token + // $client->setAccessToken([ + // 'access_token' => $accessToken, + // 'refresh_token' => $refreshToken, + // 'expires_in' => 3600, // Expiration time in seconds (adjust if necessary) + // 'created' => time() + // ]); + + // if ($client->isAccessTokenExpired()) { + // // Refresh the access token if expired + // $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); + // } + + // $service = new Google_Service_Gmail($client); + + // $message = $this->createMessage('me', $recipientEmail, $subject, $messageBody); + + // $service->users_messages->send('me', $message); + + // echo 'Email sent successfully'; + // } + + // private function createMessage($sender, $recipient, $subject, $messageBody) + // { + // $message = new Google_Service_Gmail_Message(); + // $email = new Google_Service_Gmail_MessagePartHeader(); + // $email->setName('To'); + // $email->setValue($recipient); + // $message->setPayload(new Google_Service_Gmail_MessagePart()); + // $message->getPayload()->setHeaders([$email]); + + // $body = new Google_Service_Gmail_MessagePartBody(); + // $body->setData(base64_encode($messageBody)); + // $message->getPayload()->setBody($body); + + // return $message; + // } + + + + + + + + // ----------------------------------------------- } diff --git a/app/Controllers/credentials.json b/app/Controllers/credentials.json new file mode 100644 index 0000000..2ee146a --- /dev/null +++ b/app/Controllers/credentials.json @@ -0,0 +1 @@ +{"web":{"client_id":"1091575547896-uksojot6eohd8i2mg7dcga9t0rn430ie.apps.googleusercontent.com","project_id":"titanium-genre-389806","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["http://localhost/golf_backend/test2"],"javascript_origins":["http://localhost"]}} \ No newline at end of file diff --git a/app/Controllers/token.json b/app/Controllers/token.json new file mode 100644 index 0000000..4e4e763 --- /dev/null +++ b/app/Controllers/token.json @@ -0,0 +1,6 @@ +{ + "access_token": "your-access-token", + "refresh_token": "your-refresh-token", + "expires_in": 3600, + "created": 1678934567 + } \ No newline at end of file diff --git a/composer.json b/composer.json index 84bc223..7e8634d 100644 --- a/composer.json +++ b/composer.json @@ -9,6 +9,7 @@ "codeigniter4/framework": "^4.0", "daycry/cronjob": "^2.2", "google/apiclient": "^2.15", + "guzzlehttp/guzzle": "^7.7", "ramsey/uuid": "^4.2", "square/square": "18.0.0.20220420" }, diff --git a/composer.lock b/composer.lock index 4743d69..422f8c0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5a8d46ecf78556919bd1e0e57fdfba48", + "content-hash": "6e8b2f75e98ca3380942cf3f26410005", "packages": [ { "name": "apimatic/jsonmapper", diff --git a/credentials.json b/credentials.json new file mode 100644 index 0000000..62946cf --- /dev/null +++ b/credentials.json @@ -0,0 +1 @@ +{"web":{"client_id":"649722930931-nrphm6ifgufi609vhlf3sva9m1etllbe.apps.googleusercontent.com","project_id":"golf-evo-smtp","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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"}} \ No newline at end of file diff --git a/writable.zip b/writable.zip deleted file mode 100644 index 695f2ff..0000000 Binary files a/writable.zip and /dev/null differ