ldc-web/app/Http/Controllers/ProjectsController.php
2020-04-21 11:59:54 +02:00

222 lines
8.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Projects;
use App\Models\Servers;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use lfkeitel\phptotp\Base32;
use lfkeitel\phptotp\Totp;
use Ramsey\Uuid\Uuid;
class ProjectsController extends Controller
{
public function index(Request $request) {
$projects = Projects::orderBy('name')->get();
return view('projects.index', ['projects' => $projects]);
}
public function WpAutoLogin(Request $request) {
$url = $request->url;
$login = $request->login;
$pwd = $request->pwd;
return view('projects.wp-auto-login', ['url' => $url, 'login' => $login, 'pwd' => $pwd]);
}
public function add(Request $request) {
$dev_db_server = Servers::where([
['env', 'DEV'],
['type', 'DB']
])->get();
$dev_web_server = Servers::where([
['env', 'DEV'],
['type', 'WEB']
])->get();
$prod_db_server = Servers::where([
['env', 'PROD'],
['type', 'DB']
])->get();
$prod_web_server = Servers::where([
['env', 'PROD'],
['type', 'WEB']
])->get();
return view('projects.add', ['dev_db_server' => $dev_db_server, 'dev_web_server' => $dev_web_server, 'prod_db_server' => $prod_db_server, 'prod_web_server' => $prod_web_server]);
}
public function edit(Request $request) {
$uuid = $request->uuid;
$project = Projects::where('uuid', '=', $uuid)->first();
if (!$project)
abort(404);
$dev_db_server = Servers::where([
['env', 'DEV'],
['type', 'DB']
])->get();
$dev_web_server = Servers::where([
['env', 'DEV'],
['type', 'WEB']
])->get();
$prod_db_server = Servers::where([
['env', 'PROD'],
['type', 'DB']
])->get();
$prod_web_server = Servers::where([
['env', 'PROD'],
['type', 'WEB']
])->get();
return view('projects.edit', ['project' => $project, 'dev_db_server' => $dev_db_server, 'dev_web_server' => $dev_web_server, 'prod_db_server' => $prod_db_server, 'prod_web_server' => $prod_web_server]);
}
public function update(Request $request) {
$uuid = $request->uuid;
$project = Projects::where('uuid', '=', $uuid)->first();
if (!$project)
abort(404);
$this->makeChanges($request, $project);
return redirect()->route('projects.edit', ['uuid' => $project->uuid])->with('status', 'Sauvegardé !');
}
public function store(Request $request) {
$project = new Projects();
$project->uuid = Uuid::uuid4();
$this->makeChanges($request, $project);
return redirect()->route('projects.edit', ['uuid' => $project->uuid])->with('status', 'Sauvegardé !');
}
public function delete(Request $request)
{
$uuid = $request->uuid;
$project = Projects::where('uuid', '=', $uuid)->first();
if (!$project)
abort(404);
return view('projects.delete', ['project' => $project]);
}
public function forceDelete(Request $request)
{
$uuid = $request->uuid;
$otp1 = $request->otp1;
$otp2 = $request->otp2;
$otp3 = $request->otp3;
$otp4 = $request->otp4;
$otp5 = $request->otp5;
$otp6 = $request->otp6;
$otp = $otp1 . $otp2 . $otp3 . $otp4 . $otp5 . $otp6;
$lastCode = (new Totp())->GenerateToken(Base32::decode(Auth::user()->totp_secret), Carbon::now()->subSeconds(30)->timestamp);
$code = (new Totp())->GenerateToken(Base32::decode(Auth::user()->totp_secret));
if ($otp === $code || $otp === $lastCode) {
$project = Projects::where('uuid', '=', $uuid)->first();
if (!$project)
abort(404);
$project->delete();
return redirect()->route('projects.index')->with('status', 'Projet supprimé !');
}else{
return redirect()->route('projects.edit', ['uuid' => $uuid])->with('error', 'Code de vérification invalide.');
}
}
private function makeChanges(Request $request, $project) {
$name = $request->name;
$display_name = $request->display_name;
$php = $request->php;
$type = $request->type;
$https = $request->https;
$git_repo = $request->git_repo;
$git_user = $request->git_user;
$git_pwd = $request->git_pwd;
$prod_url = $request->prod_url;
$dev_url = $request->dev_url;
$prod_certificats = $request->prod_certificats;
$dev_certificats = $request->dev_certificats;
$prod_document_root = $request->prod_document_root;
$dev_document_root = $request->dev_document_root;
$prod_unix_user = $request->prod_unix_user;
$dev_unix_user = $request->dev_unix_user;
$prod_unix_pwd = $request->prod_unix_pwd;
$dev_unix_pwd = $request->dev_unix_pwd;
$prod_db_user = $request->prod_db_user;
$dev_db_user = $request->dev_db_user;
$prod_db_pwd = $request->prod_db_pwd;
$dev_db_pwd = $request->dev_db_pwd;
$prod_db_schema = $request->prod_db_schema;
$dev_db_schema = $request->dev_db_schema;
$prod_db_server_id = $request->prod_db_server_id;
$dev_db_server_id = $request->dev_db_server_id;
$prod_web_server_id = $request->prod_web_server_id;
$dev_web_server_id = $request->dev_web_server_id;
$prod_comment = $request->prod_comment;
$dev_comment = $request->dev_comment;
$prod_eai = $request->prod_eai;
$dev_eai = $request->dev_eai;
$prod_whitelist_fw = $request->prod_whitelist_fw;
$dev_whitelist_fw = $request->dev_whitelist_fw;
$prod_redirect_dns = $request->prod_redirect_dns;
$dev_redirect_dns = $request->dev_redirect_dns;
$dev_htaccess_user = $request->dev_htaccess_user;
$dev_htaccess_pwd = $request->dev_htaccess_pwd;
$prod_ga_id = $request->prod_ga_id;
if (Auth::user()->role === 1) {
$prod_login = $request->prod_login;
$dev_login = $request->dev_login;
$prod_bo_url = $request->prod_bo_url;
$dev_bo_url = $request->dev_bo_url;
}
$project->name = $name;
$project->display_name = $display_name;
$project->php = $php;
$project->type = $type;
$project->https = $https;
$project->git_repo = $git_repo;
$project->git_user = $git_user;
$project->git_pwd = $git_pwd;
$project->prod_url = $prod_url;
$project->dev_url = $dev_url;
$project->prod_certificats = $prod_certificats;
$project->dev_certificats = $dev_certificats;
$project->prod_document_root = $prod_document_root;
$project->dev_document_root = $dev_document_root;
$project->prod_unix_user = $prod_unix_user;
$project->dev_unix_user = $dev_unix_user;
$project->prod_unix_pwd = $prod_unix_pwd;
$project->dev_unix_pwd = $dev_unix_pwd;
$project->prod_db_user = $prod_db_user;
$project->dev_db_user = $dev_db_user;
$project->prod_db_pwd = $prod_db_pwd;
$project->dev_db_pwd = $dev_db_pwd;
$project->prod_db_schema = $prod_db_schema;
$project->dev_db_schema = $dev_db_schema;
$project->prod_db_server_id = $prod_db_server_id;
$project->dev_db_server_id = $dev_db_server_id;
$project->prod_web_server_id = $prod_web_server_id;
$project->dev_web_server_id = $dev_web_server_id;
$project->prod_comment = $prod_comment;
$project->dev_comment = $dev_comment;
$project->prod_eai = $prod_eai;
$project->dev_eai = $dev_eai;
$project->prod_whitelist_fw = $prod_whitelist_fw;
$project->dev_whitelist_fw = $dev_whitelist_fw;
$project->prod_redirect_dns = $prod_redirect_dns;
$project->dev_redirect_dns = $dev_redirect_dns;
$project->dev_htaccess_user = $dev_htaccess_user;
$project->dev_htaccess_pwd = $dev_htaccess_pwd;
$project->prod_ga_id = $prod_ga_id;
if (Auth::user()->role === 1) {
$project->prod_login = $prod_login;
$project->dev_login = $dev_login;
$project->prod_bo_url = $prod_bo_url;
$project->dev_bo_url = $dev_bo_url;
}
$project->save();
}
}