ApplicationsController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Auth;
  5. use App\User;
  6. use App\Application;
  7. use App\Server;
  8. use App\Alias;
  9. use Helper;
  10. use PDF;
  11. class ApplicationsController extends Controller
  12. {
  13. public function __construct()
  14. {
  15. $this->middleware('auth');
  16. }
  17. public function index()
  18. {
  19. $user = User::find(Auth::id());
  20. $profile = $user->name;
  21. $applications = Application::orderBy('domain')->orderBy('server_id')->get();
  22. return view('applications', compact('profile', 'applications'));
  23. }
  24. public function create(Request $request)
  25. {
  26. $user = User::find(Auth::id());
  27. $profile = $user->name;
  28. $this->validate($request, [
  29. 'domain' => 'required', 'server_id' => 'required', 'basepath' => 'required',
  30. ]);
  31. if(Application::where('domain', $request->domain)->where('server_id', $request->server_id)->get()->first()) {
  32. $messagge = "This domain is already taken on this server.";
  33. return view('generic', compact('profile','messagge'));
  34. }
  35. if(Alias::where('domain', $request->domain)->where('server_id', $request->server_id)->get()->first()) {
  36. $messagge = "This domain is already taken on this server.";
  37. return view('generic', compact('profile','messagge'));
  38. }
  39. $server = Server::where('id', $request->server_id)->where('complete', 2)->get()->first();
  40. if(!$server) {
  41. return abort(403);
  42. }
  43. $code = hash('crc32', uniqid()).str_random(2);
  44. $pass = str_random(32);
  45. $dbpass = str_random(16);
  46. $base = $request->basepath;
  47. $appcode= sha1(uniqid().microtime().$request->name);
  48. $autoinstall = $request->autoinstall;
  49. $ssh = New \phpseclib\Net\SSH2($server->ip, $server->port);
  50. if(!$ssh->login($server->username, $server->password)) {
  51. $messagge = 'There was a problem with server connection. Try later!';
  52. return view('generic', compact('profile','messagge'));
  53. }
  54. $ssh->setTimeout(360);
  55. $response = $ssh->exec('echo '.$server->password.' | sudo -S sudo sh /cipi/host-add.sh -d '.$request->domain.' -u '.$code.' -p '.$pass.' -dbp '.$dbpass.' -b '.$base.' -ai '.$autoinstall);
  56. if(strpos($response, '###CIPI###') === false) {
  57. $messagge = 'There was a problem with server. Try later!';
  58. return view('generic', compact('profile','messagge'));
  59. }
  60. $response = explode('###CIPI###', $response);
  61. if(strpos($response[1], 'Ok') === false) {
  62. $messagge = 'There was a problem with server. Try later!';
  63. return view('generic', compact('profile','messagge'));
  64. }
  65. Application::create([
  66. 'domain' => $request->domain,
  67. 'server_id' => $request->server_id,
  68. 'username' => $code,
  69. 'password' => $pass,
  70. 'dbpass' => $dbpass,
  71. 'basepath' => $base,
  72. 'appcode' => $appcode,
  73. ]);
  74. $app = [
  75. 'user' => $code,
  76. 'pass' => $pass,
  77. 'dbname' => $code,
  78. 'dbuser' => $code,
  79. 'dbpass' => $dbpass,
  80. 'path' => $base,
  81. 'domain' => $request->domain,
  82. 'host' => $server->ip,
  83. 'port' => $server->port,
  84. ];
  85. return view('application', compact('profile','app','appcode'));
  86. }
  87. public function delete(Request $request)
  88. {
  89. $user = User::find(Auth::id());
  90. $profile = $user->name;
  91. $this->validate($request, [
  92. 'appcode' => 'required',
  93. ]);
  94. $application = Application::where('appcode', $request->appcode)->get()->first();
  95. if(!$application) {
  96. return abort(403);
  97. }
  98. $application->delete();
  99. $ssh = New \phpseclib\Net\SSH2($application->server->ip, $application->server->port);
  100. if(!$ssh->login($application->server->username, $application->server->password)) {
  101. $messagge = 'There was a problem with server connection. Try later!';
  102. return view('generic', compact('profile','messagge'));
  103. }
  104. $ssh->setTimeout(60);
  105. foreach ($application->aliases as $alias) {
  106. $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /etc/cron.d/certbot_renew_'.$alias->domain.'.crontab');
  107. $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /cipi/certbot_renew_'.$alias->domain.'.sh');
  108. }
  109. $response = $ssh->exec('echo '.$application->server->password.' | sudo -S sudo sh /cipi/host-del.sh -u '.$application->username);
  110. $application->delete();
  111. return redirect()->route('applications');
  112. }
  113. public function pdf($applicationcode)
  114. {
  115. $application = Application::where('appcode', $applicationcode)->get()->first();
  116. $data = [
  117. 'username' => $application->username,
  118. 'password' => $application->password,
  119. 'path' => $application->basepath,
  120. 'ip' => $application->server->ip,
  121. 'port' => $application->server->port,
  122. 'domain' => $application->domain,
  123. 'dbpass' => $application->dbpass,
  124. ];
  125. $pdf = PDF::loadView('pdf', $data);
  126. return $pdf->download($application->username.'_'.date('YmdHi').'_'.date('s').'.pdf');
  127. }
  128. }