Sfoglia il codice sorgente

Application index & create

Andrea Pollastri 5 anni fa
parent
commit
4a7285cd11

+ 1 - 1
app/Alias.php

@@ -13,7 +13,7 @@ class Alias extends Model
     ];
     ];
 
 
     public function application() {
     public function application() {
-        return $this->belongsTo(Application::class, 'server_id');
+        return $this->belongsTo(Application::class);
     }
     }
 
 
 }
 }

+ 1 - 2
app/Application.php

@@ -8,7 +8,6 @@ class Application extends Model
 {
 {
 
 
 	protected $fillable = [
 	protected $fillable = [
-        'name',
         'server_id',
         'server_id',
         'username',
         'username',
         'password',
         'password',
@@ -20,7 +19,7 @@ class Application extends Model
     ];
     ];
 
 
     public function server() {
     public function server() {
-        return $this->belongsTo(Server::class, 'server_id');
+        return $this->belongsTo(Server::class);
     }
     }
 
 
     public function aliases() {
     public function aliases() {

+ 22 - 41
app/Http/Controllers/ApplicationsController.php

@@ -3,15 +3,22 @@
 namespace App\Http\Controllers;
 namespace App\Http\Controllers;
 
 
 use Illuminate\Http\Request;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
 use App\Application;
 use App\Application;
 use App\Server;
 use App\Server;
 use App\Alias;
 use App\Alias;
-use Helper;
+use phpseclib\Net\SSH2 as SSH;
 use PDF;
 use PDF;
 
 
 class ApplicationsController extends Controller {
 class ApplicationsController extends Controller {
 
 
+    public function index() {
+        $applications = Application::with('server')->with('aliases')->get();
+        return view('applications', compact('applications'));
+    }
+
+    public function api() {
+        return Application::orderBy('domain')->get();
+    }
 
 
     public function create(Request $request) {
     public function create(Request $request) {
         $this->validate($request, [
         $this->validate($request, [
@@ -52,7 +59,7 @@ class ApplicationsController extends Controller {
             'php'           => $request->php,
             'php'           => $request->php,
             'appcode'       => $appcode,
             'appcode'       => $appcode,
         ]);
         ]);
-        $ssh = New \phpseclib\Net\SSH2($server->ip, $server->port);
+        $ssh = New SSH($server->ip, $server->port);
         if(!$ssh->login($server->username, $server->password)) {
         if(!$ssh->login($server->username, $server->password)) {
             $request->session()->flash('alert-error', 'There was a problem with server connection.');
             $request->session()->flash('alert-error', 'There was a problem with server connection.');
             return redirect('/applications');
             return redirect('/applications');
@@ -83,56 +90,34 @@ class ApplicationsController extends Controller {
         return view('application', compact('app','appcode'));
         return view('application', compact('app','appcode'));
     }
     }
 
 
-
-
-
-
-
-    public function delete(Request $request)
-    {
-
-        $user = User::find(Auth::id());
-        $profile = $user->name;
-
+    public function destroy(Request $request) {
         $this->validate($request, [
         $this->validate($request, [
             'appcode' => 'required',
             'appcode' => 'required',
         ]);
         ]);
-
         $application = Application::where('appcode', $request->appcode)->get()->first();
         $application = Application::where('appcode', $request->appcode)->get()->first();
-
         if(!$application) {
         if(!$application) {
             return abort(403);
             return abort(403);
         }
         }
-
-        $application->delete();
-
-        $ssh = New \phpseclib\Net\SSH2($application->server->ip, $application->server->port);
+        $ssh = New SSH($application->server->ip, $application->server->port);
         if(!$ssh->login($application->server->username, $application->server->password)) {
         if(!$ssh->login($application->server->username, $application->server->password)) {
-            $messagge = 'There was a problem with server connection. Try later!';
-            return view('generic', compact('profile','messagge'));
+            $request->session()->flash('alert-error', 'There was a problem with server connection.');
+            return redirect('/applications');
         }
         }
-
         $ssh->setTimeout(60);
         $ssh->setTimeout(60);
         foreach ($application->aliases as $alias) {
         foreach ($application->aliases as $alias) {
             $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /etc/cron.d/certbot_renew_'.$alias->domain.'.crontab');
             $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /etc/cron.d/certbot_renew_'.$alias->domain.'.crontab');
             $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /cipi/certbot_renew_'.$alias->domain.'.sh');
             $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /cipi/certbot_renew_'.$alias->domain.'.sh');
+            $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /etc/nginx/sites-enabled/'.$alias->domain.'.conf');
+            $ssh->exec('echo '.$application->server->password.' | sudo -S unlink /etc/nginx/sites-available/'.$alias->domain.'.conf');
         }
         }
-        $response = $ssh->exec('echo '.$application->server->password.' | sudo -S sudo sh /cipi/host-del.sh -u '.$application->username);
-
+        $ssh->exec('echo '.$application->server->password.' | sudo -S sudo sh /cipi/host-del.sh -u '.$application->username.' -d '.$application->domain);
         $application->delete();
         $application->delete();
-
-        return redirect()->route('applications');
-
+        $request->session()->flash('alert-success', 'Application has been removed!');
+        return redirect('/applications');
     }
     }
 
 
-
-
-
-
-    public function pdf($applicationcode)
-    {
-
-        $application = Application::where('appcode', $applicationcode)->get()->first();
+    public function pdf($appcode) {
+        $application = Application::where('appcode', $appcode)->first();
         $data = [
         $data = [
             'username'      => $application->username,
             'username'      => $application->username,
             'password'      => $application->password,
             'password'      => $application->password,
@@ -141,14 +126,10 @@ class ApplicationsController extends Controller {
             'port'          => $application->server->port,
             'port'          => $application->server->port,
             'domain'        => $application->domain,
             'domain'        => $application->domain,
             'dbpass'        => $application->dbpass,
             'dbpass'        => $application->dbpass,
-            'autoinstall'   => $application->autoinstall,
+            'php'           => $application->php,
         ];
         ];
-
         $pdf = PDF::loadView('pdf', $data);
         $pdf = PDF::loadView('pdf', $data);
         return $pdf->download($application->username.'_'.date('YmdHi').'_'.date('s').'.pdf');
         return $pdf->download($application->username.'_'.date('YmdHi').'_'.date('s').'.pdf');
-
     }
     }
 
 
-
-
 }
 }

+ 1 - 2
database/migrations/2020_04_27_000002_create_applications_table.php

@@ -16,12 +16,11 @@ class CreateApplicationsTable extends Migration
 
 
         Schema::create('applications', function (Blueprint $table) {
         Schema::create('applications', function (Blueprint $table) {
             $table->id();
             $table->id();
-            $table->string('name');
+            $table->string('domain');
             $table->bigInteger('server_id')->unsigned()->index();
             $table->bigInteger('server_id')->unsigned()->index();
             $table->string('username');
             $table->string('username');
             $table->string('password');
             $table->string('password');
             $table->string('dbpass');
             $table->string('dbpass');
-            $table->string('domain');
             $table->string('basepath')->nullable()->default('public');
             $table->string('basepath')->nullable()->default('public');
             $table->string('php')->default('7.4');
             $table->string('php')->default('7.4');
             $table->string('appcode')->index();
             $table->string('appcode')->index();

+ 87 - 0
resources/views/application.blade.php

@@ -0,0 +1,87 @@
+@extends('layouts.app')
+
+
+
+@section('title')
+Application {{ $app["domain"] }}
+@endsection
+
+
+
+@section('content')
+<div class="row">
+    <div class="col-lg-6 mb-4">
+        <div class="card sm-12">
+            <div class="card-header text-center">
+                <i class="fas fa-lock"></i> SSH/SFTP
+            </div>
+            <div class="card-body">
+                <div class="space"></div>
+                <b>Host</b> {{ $app["host"] }}
+                <div class="space"></div>
+                <b>Port</b> {{ $app["port"] }}
+                <div class="space"></div>
+                <b>User</b> {{ $app["user"] }}<br>
+                <div class="space"></div>
+                <b>Pass</b> {{ $app["pass"] }}<br>
+                <div class="space"></div>
+                <b>Path</b> /home/{{ $app["user"] }}/web/{{ $app["path"] }}<br>
+                <div class="space"></div>
+            </div>
+        </div>
+    </div>
+    <div class="col-lg-6 mb-4">
+        <div class="card sm-12">
+            <div class="card-header text-center">
+                <i class="fas fa-database"></i> MySQL
+            </div>
+            <div class="card-body">
+                <div class="space"></div>
+                <b>Host</b> 127.0.0.1
+                <div class="space"></div>
+                <b>Port</b> 3306
+                <div class="space"></div>
+                <b>User</b> {{ $app["dbuser"] }}<br>
+                <div class="space"></div>
+                <b>Pass</b> {{ $app["dbpass"] }}<br>
+                <div class="space"></div>
+                <b>Name</b> {{ $app["dbname"] }}
+                <div class="space"></div>
+            </div>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-sm-12 text-center">
+        <div class="space"></div>
+            <p>Your application <i>{{ $app["domain"] }}</i> is ready and is based on PHP <i>{{ $app["php"] }}</i>!</p>
+        <div class="space"></div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-sm-12 text-center">
+        <div class="space"></div>
+            <a href="/applications" class="btn btn-secondary btn-sm"><i class="fas fa-arrow-left"></i> Application list</a>
+            <a href="/application/pdf/{{ $appcode }}" class="btn btn-primary btn-sm" style="margin-left: 20px;"><i class="fas fa-file-pdf"></i> Download PDF</a>
+        <div class="space"></div>
+    </div>
+</div>
+@endsection
+
+
+
+@section('extra')
+
+@endsection
+
+
+
+@section('css')
+
+@endsection
+
+
+
+@section('js')
+
+@endsection

+ 83 - 0
resources/views/applications.blade.php

@@ -0,0 +1,83 @@
+@extends('layouts.app')
+
+
+
+@section('title')
+Applications
+@endsection
+
+
+
+@section('content')
+<div class="row">
+    <div class="col">
+        <a href="#" class="btn btn-sm btn-primary shadow-sm float-right" data-toggle="modal" data-target="#createModal">
+            <i class="fas fa-plus fa-sm text-white-50"></i> CREATE APP
+        </a>
+    </div>
+</div>
+<div class="space"></div>
+@if(Session::has('alert-success'))
+    <div class="alert alert-success" role="alert">
+        <b><i class="fa fa-check" aria-hidden="true"></i></b> {{ Session::get('alert-success') }}
+    </div>
+@endif
+    @if(Session::has('alert-error'))
+    <div class="alert alert-danger" role="alert">
+        <b><i class="fa fa-times" aria-hidden="true"></i></b> {{ Session::get('alert-error') }}
+    </div>
+@endif
+<div class="card shadow mb-4">
+    <div class="card-body">
+        <div class="table-responsive">
+            <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
+                <thead>
+                    <tr>
+                        <th class="text-center">Domain</th>
+                        <th class="text-center">Server</th>
+                        <th class="text-center">User</th>
+                        <th class="text-center">PHP</th>
+                        <th class="text-center">Aliases</th>
+                        <th class="text-center">Actions</th>
+                    </tr>
+                </thead>
+                <tbody>
+
+                    @foreach($applications as $application)
+                    <tr>
+                        <td class="text-center">{{ $application->domain }}</td>
+                        <td class="text-center">{{ $application->server->ip }}</td>
+                        <td class="text-center">{{ $application->username }}</td>
+                        <td class="text-center">{{ $application->php }}</td>
+                        <td class="text-center">{{ count($application->aliases) }}</td>
+                        <td class="text-center">
+                            <i class="fab fa-expeditedssl ssl-click" style="margin-right: 18px; cursor: pointer; color: gray;" data-application="{{ $application->appcode }}" id="ssl-{{ $application->appcode }}"></i>
+                            <i class="fas fa-trash-alt" data-toggle="modal" data-target="#deleteModal" class="fas fa-trash-alt" data-app-code="{{ $application->appcode }}" data-app-domain="{{ $application->domain }}" style="color:gray; cursor: pointer;"></i>
+                        </td>
+                    </tr>
+                    @endforeach
+
+                </tbody>
+            </table>
+        </div>
+    </div>
+</div>
+@endsection
+
+
+
+@section('extra')
+
+@endsection
+
+
+
+@section('css')
+
+@endsection
+
+
+
+@section('js')
+
+@endsection

+ 2 - 0
resources/views/server.blade.php

@@ -36,6 +36,7 @@ Server {{ $server->name }}
                         <th class="text-center">Domain</th>
                         <th class="text-center">Domain</th>
                         <th class="text-center">User</th>
                         <th class="text-center">User</th>
                         <th class="text-center">PHP</th>
                         <th class="text-center">PHP</th>
+                        <th class="text-center">Aliases</th>
                         <th class="text-center">Actions</th>
                         <th class="text-center">Actions</th>
                     </tr>
                     </tr>
                 </thead>
                 </thead>
@@ -46,6 +47,7 @@ Server {{ $server->name }}
                         <td class="text-center">{{ $application->domain }}</td>
                         <td class="text-center">{{ $application->domain }}</td>
                         <td class="text-center">{{ $application->username }}</td>
                         <td class="text-center">{{ $application->username }}</td>
                         <td class="text-center">{{ $application->php }}</td>
                         <td class="text-center">{{ $application->php }}</td>
+                        <td class="text-center">{{ count($application->aliases) }}</td>
                         <td class="text-center">
                         <td class="text-center">
                             <i class="fab fa-expeditedssl ssl-click" style="margin-right: 18px; cursor: pointer; color: gray;" data-application="{{ $application->appcode }}" id="ssl-{{ $application->appcode }}"></i>
                             <i class="fab fa-expeditedssl ssl-click" style="margin-right: 18px; cursor: pointer; color: gray;" data-application="{{ $application->appcode }}" id="ssl-{{ $application->appcode }}"></i>
                             <i class="fas fa-trash-alt" data-toggle="modal" data-target="#deleteModal" class="fas fa-trash-alt" data-app-code="{{ $application->appcode }}" data-app-domain="{{ $application->domain }}" style="color:gray; cursor: pointer;"></i>
                             <i class="fas fa-trash-alt" data-toggle="modal" data-target="#deleteModal" class="fas fa-trash-alt" data-app-code="{{ $application->appcode }}" data-app-domain="{{ $application->domain }}" style="color:gray; cursor: pointer;"></i>

+ 9 - 0
routes/web.php

@@ -42,6 +42,15 @@ Route::group(['middleware' => 'auth'], function () {
         Route::post('/destroy', 'ServersController@destroy');
         Route::post('/destroy', 'ServersController@destroy');
         Route::post('/changeip', 'ServersController@changeip');
         Route::post('/changeip', 'ServersController@changeip');
     });
     });
+    Route::group(['prefix' => 'applications'], function () {
+        Route::get('/', 'ApplicationsController@index');
+        Route::get('/api', 'ApplicationsController@api');
+    });
+    Route::group(['prefix' => 'application'], function () {
+        Route::post('/create', 'ApplicationsController@create');
+        Route::post('/destroy', 'ApplicationsController@destroy');
+        Route::post('/pdf/{appcode}', 'ApplicationsController@pdf');
+    });
     Route::group(['prefix' => 'settings'], function () {
     Route::group(['prefix' => 'settings'], function () {
         Route::get('/', 'SetupController@index');
         Route::get('/', 'SetupController@index');
         Route::post('/profile', 'SetupController@profile');
         Route::post('/profile', 'SetupController@profile');