Webmail.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace ModulesGarden\Servers\ZimbraEmail\App\Http\Client;
  3. use ModulesGarden\Servers\ZimbraEmail\App\Enums\ControllerEnums;
  4. use ModulesGarden\Servers\ZimbraEmail\App\Enums\ProductParams;
  5. use ModulesGarden\Servers\ZimbraEmail\App\Helpers\BuildUrlExtended;
  6. use ModulesGarden\Servers\ZimbraEmail\App\Helpers\ZimbraManager;
  7. use ModulesGarden\Servers\ZimbraEmail\App\Libs\Product\ProductManager;
  8. use ModulesGarden\Servers\ZimbraEmail\Core\Http\AbstractClientController;
  9. use ModulesGarden\Servers\ZimbraEmail\Core\Models\Whmcs\Hosting;
  10. use ModulesGarden\Servers\ZimbraEmail\Core\UI\Traits\WhmcsParams;
  11. use ModulesGarden\Servers\ZimbraEmail\Core\Helper;
  12. /**
  13. *
  14. * Created by PhpStorm.
  15. * User: Tomasz Bielecki ( tomasz.bi@modulesgarden.com )
  16. * Date: 10.09.19
  17. * Time: 10:13
  18. * Class Webmail
  19. */
  20. class Webmail extends AbstractClientController
  21. {
  22. use WhmcsParams;
  23. /**
  24. * @return \ModulesGarden\Servers\ZimbraEmail\Core\Http\JsonResponse
  25. */
  26. public function index()
  27. {
  28. $productManager = new ProductManager();
  29. $productManager->loadByHostingId($this->request->get('id'));
  30. if ($this->getWhmcsParamByKey('status') !== 'Active' || !$productManager->isControllerAccessible(ControllerEnums::WEBMAIL_PAGE))
  31. {
  32. return Helper\redirectByUrl(BuildUrlExtended::getProvisioningUrl('',false,false));
  33. }
  34. $link = $productManager->get('login_link');
  35. if(!$link)
  36. {
  37. $link = $productManager->getClientUrl();
  38. }
  39. return Helper\redirectByUrl($link, []);
  40. }
  41. /**
  42. * @throws \Exception
  43. */
  44. public function clientSso()
  45. {
  46. /**
  47. *
  48. * product managet
  49. */
  50. $productManager = new ProductManager();
  51. $productManager->loadByHostingId($this->request->get('id'));
  52. /**
  53. *
  54. * load API
  55. */
  56. $api = (new ZimbraManager())
  57. ->getApiByServer($productManager->getHosting()->server)
  58. ->soap;
  59. /**
  60. *
  61. * load sso service
  62. */
  63. $sso = $api
  64. ->service()
  65. ->clientSingleSignOnToken()
  66. ->setFormData(['id' => $this->getRequestValue('actionElementId')]);
  67. /**
  68. *
  69. * run service
  70. */
  71. $result = $sso->run();
  72. /**
  73. *
  74. * throw error if without result
  75. */
  76. if(!$result)
  77. {
  78. throw new \Exception($sso->getError());
  79. }
  80. $url = $productManager->getClientUrl().'service/preauth';
  81. return Helper\redirectByUrl($url, ['authtoken' => $result['authToken']]);
  82. }
  83. }