vendor/uvdesk/core-framework/Services/MicrosoftIntegration.php line 15

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\CoreFrameworkBundle\Services;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
  5. use Webkul\UVDesk\CoreFrameworkBundle\Entity\Microsoft\MicrosoftApp;
  6. class MicrosoftIntegration
  7. {
  8. const MICROSOFT_OAUTH = "https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?client_id={client_id}&response_type=code&redirect_uri={redirect_uri}&response_mode=query&scope={scope}&state={state}";
  9. public function __construct(EntityManagerInterface $entityManager)
  10. {
  11. $this->entityManager = $entityManager;
  12. }
  13. public function getAuthorizationUrl(MicrosoftApp $app, $redirectEndpoint, array $state = [])
  14. {
  15. $params = [
  16. '{tenant}' => $app->getTenantId(),
  17. '{client_id}' => $app->getClientId(),
  18. '{redirect_uri}' => urlencode($redirectEndpoint),
  19. '{scope}' => urlencode(implode(' ', $app->getApiPermissions())),
  20. ];
  21. if (!empty($state)) {
  22. $params['{state}'] = urlencode(json_encode($state));
  23. }
  24. return strtr(self::MICROSOFT_OAUTH, $params);
  25. }
  26. public function getAccessToken(MicrosoftApp $app, $accessCode, $redirectEndpoint)
  27. {
  28. $tenantId = $app->getTenantId();
  29. $endpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
  30. $curlHandler = curl_init();
  31. curl_setopt($curlHandler, CURLOPT_HEADER, 0);
  32. curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);
  33. curl_setopt($curlHandler, CURLOPT_POST, 1);
  34. curl_setopt($curlHandler, CURLOPT_URL, $endpoint);
  35. curl_setopt($curlHandler, CURLOPT_POSTFIELDS, http_build_query([
  36. 'client_id' => $app->getClientId(),
  37. 'scope' => urldecode(implode(' ', $app->getApiPermissions())),
  38. 'code' => $accessCode,
  39. 'redirect_uri' => $redirectEndpoint,
  40. 'grant_type' => 'authorization_code',
  41. 'client_secret' => $app->getClientSecret(),
  42. ]));
  43. $curlResponse = curl_exec($curlHandler);
  44. $jsonResponse = json_decode($curlResponse, true);
  45. if (curl_errno($curlHandler)) {
  46. $error_msg = curl_error($curlHandler);
  47. }
  48. curl_close($curlHandler);
  49. return $jsonResponse;
  50. }
  51. public function refreshAccessToken(MicrosoftApp $app, $refreshToken)
  52. {
  53. $tenantId = $app->getTenantId();
  54. $endpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
  55. $curlHandler = curl_init();
  56. curl_setopt($curlHandler, CURLOPT_HEADER, 0);
  57. curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, 1);
  58. curl_setopt($curlHandler, CURLOPT_POST, 1);
  59. curl_setopt($curlHandler, CURLOPT_URL, $endpoint);
  60. curl_setopt($curlHandler, CURLOPT_POSTFIELDS, http_build_query([
  61. 'tenant' => $app->getTenantId(),
  62. 'client_id' => $app->getClientId(),
  63. 'grant_type' => 'refresh_token',
  64. 'scope' => urldecode(implode(' ', $app->getApiPermissions())),
  65. 'refresh_token' => $refreshToken,
  66. 'client_secret' => $app->getClientSecret(),
  67. ]));
  68. $curlResponse = curl_exec($curlHandler);
  69. $jsonResponse = json_decode($curlResponse, true);
  70. if (curl_errno($curlHandler)) {
  71. $error_msg = curl_error($curlHandler);
  72. }
  73. curl_close($curlHandler);
  74. return $jsonResponse;
  75. }
  76. }