Vm.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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\App\UI\VmClone\Forms\VmCloneForm;
  18. use ModulesGarden\Servers\ProxmoxCloudVps\Core\Http\AbstractClientController;
  19. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Traits\WhmcsParams;
  20. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ResourceManager;
  21. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  22. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\view;
  23. use Symfony\Component\HttpFoundation\StreamedResponse;
  24. class Vm extends AbstractClientController
  25. {
  26. use WhmcsParams;
  27. use ProductService;
  28. use BaseClientController;
  29. use ApiService;
  30. /**
  31. * details
  32. */
  33. public function index()
  34. {
  35. if ($this->getWhmcsParamByKey('status') != 'Active')
  36. {
  37. return;
  38. }
  39. $this->initVm();
  40. (new AppParams())->initFromWhmcsParams();
  41. $this->api();
  42. if (!ProxmoxAddonValidator::isInstalled())
  43. {
  44. ProxmoxAddonValidator::isInstalledOrFail();
  45. }
  46. else
  47. {
  48. if (!$this->isVmCreated(\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()))
  49. {
  50. return $this->onVpsBuild();
  51. }
  52. }
  53. $view = view();
  54. $view->initCustomAssetFiles();
  55. $view->addElement(ServiceDetails::class);
  56. $view->addElement(ServiceActions::class);
  57. $view->addElement(VmTabs::class);
  58. return $view;
  59. }
  60. public function create()
  61. {
  62. (new AppParams())->initFromWhmcsParams();
  63. $view = view();
  64. $view->initCustomAssetFiles();
  65. return $view->addElement(VmCreateForm::class);
  66. }
  67. public function update()
  68. {
  69. $this->initVm();
  70. (new AppParams())->initFromWhmcsParams();
  71. $this->api();
  72. return view()->addElement(VmUpdateForm::class);
  73. }
  74. public function download()
  75. {
  76. $this->initVm();
  77. (new AppParams())->initFromWhmcsParams();
  78. $this->api();
  79. $response = new StreamedResponse();
  80. $response->setStatusCode(200);
  81. $response->headers->set('Content-Type', 'application/json; charset=utf-8');
  82. $response->headers->set('Content-Transfer-Encoding', 'Binary');
  83. $filename = sprintf("%s-firewal-rules.json",\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()->name);
  84. $response->headers->set('Content-Disposition', 'attachment; filename="'.$filename.'"');
  85. $firewalRules = new FirewallRulesRepository();
  86. $firewalRules->setApi($this->api());
  87. $firewalRules->findByVmModel([\ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel()]);
  88. $response->setCallback(function () use( $firewalRules)
  89. {
  90. echo \json_encode($firewalRules->fetchAsArray());
  91. die();
  92. });
  93. $response->send();
  94. }
  95. public function clone()
  96. {
  97. (new AppParams())->initFromWhmcsParams();
  98. $view = view();
  99. $view->initCustomAssetFiles();
  100. return $view->addElement(VmCloneForm::class);
  101. }
  102. }