Vm.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\Http\Client;
  3. use MGProvision\Proxmox\v2\repository\FirewallRulesRepository;
  4. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  5. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  6. use ModulesGarden\Servers\ProxmoxCloudVps\App\Helpers\AppParams;
  7. use ModulesGarden\Servers\ProxmoxCloudVps\App\Helpers\ProxmoxAddonValidator;
  8. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Graph\Pages\ServiceCpuGraph;
  9. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Graph\Pages\VmSmallGraphs;
  10. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Home\Pages\AccountSummary;
  11. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Home\Pages\AccountSummaryBars;
  12. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Home\Pages\ServiceActions;
  13. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Home\Pages\ServiceDetails;
  14. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Vm\Pages\VmTabs;
  15. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmCreate\Forms\VmCreateForm;
  16. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmUpdate\Forms\VmUpdateForm;
  17. use ModulesGarden\Servers\ProxmoxCloudVps\Core\Http\AbstractClientController;
  18. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WhmcsParams;
  19. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  20. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\view;
  21. use Symfony\Component\HttpFoundation\StreamedResponse;
  22. class Vm extends AbstractClientController
  23. {
  24. use WhmcsParams;
  25. use ProductService;
  26. use BaseClientController;
  27. use ApiService;
  28. /**
  29. * details
  30. */
  31. public function index()
  32. {
  33. if ($this->getWhmcsParamByKey('status') != 'Active')
  34. {
  35. return;
  36. }
  37. $this->initVm();
  38. (new AppParams())->initFromWhmcsParams();
  39. $this->api();
  40. if (!ProxmoxAddonValidator::isInstalled())
  41. {
  42. ProxmoxAddonValidator::isInstalledOrFail();
  43. }
  44. else
  45. {
  46. if (!$this->isVmCreated(\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()))
  47. {
  48. return $this->onVpsBuild();
  49. }
  50. }
  51. $view = view();
  52. $view->initCustomAssetFiles();
  53. $view->addElement(ServiceDetails::class);
  54. $view->addElement(ServiceActions::class);
  55. $view->addElement(VmTabs::class);
  56. return $view;
  57. }
  58. public function create()
  59. {
  60. sl("sidebar")->getSidebar("virtualMachinesProxmoxCloudVps")->getChild("vmcreate")->setActive(true);
  61. (new AppParams())->initFromWhmcsParams();
  62. $view = view();
  63. $view->initCustomAssetFiles();
  64. return $view->addElement(VmCreateForm::class);
  65. }
  66. public function update()
  67. {
  68. $this->initVm();
  69. (new AppParams())->initFromWhmcsParams();
  70. $this->api();
  71. return view()->addElement(VmUpdateForm::class);
  72. }
  73. public function download()
  74. {
  75. $this->initVm();
  76. (new AppParams())->initFromWhmcsParams();
  77. $this->api();
  78. $response = new StreamedResponse();
  79. $response->setStatusCode(200);
  80. $response->headers->set('Content-Type', 'application/json; charset=utf-8');
  81. $response->headers->set('Content-Transfer-Encoding', 'Binary');
  82. $filename = sprintf("%s-firewal-rules.json",\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()->name);
  83. $response->headers->set('Content-Disposition', 'attachment; filename="'.$filename.'"');
  84. $firewalRules = new FirewallRulesRepository();
  85. $firewalRules->setApi($this->api());
  86. $firewalRules->findByVmModel([\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()]);
  87. $response->setCallback(function () use( $firewalRules)
  88. {
  89. echo \json_encode($firewalRules->fetchAsArray());
  90. die();
  91. });
  92. $response->send();
  93. }
  94. }