Switch to UNIX line breaks instead of DOS for not breaking linux.

This commit is contained in:
purple 2023-04-05 21:29:58 +02:00
parent 608ff0d4f2
commit b1e32ca8ae
16 changed files with 1058 additions and 1058 deletions

View file

@ -1,64 +1,64 @@
<?php
namespace Pterodactyl\Http\Controllers\Admin\Extensions\Blueprint;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Prologue\Alerts\AlertsMessageBag;
use Illuminate\Contracts\Console\Kernel;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintVariableService;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
use Illuminate\Contracts\Config\Repository as ConfigRepository;
use Pterodactyl\Http\Requests\Admin\Extensions\Blueprint\BlueprintSettingsFormRequest;
use Illuminate\Http\RedirectResponse;
class BlueprintExtensionController extends Controller
{
/**
* BlueprintExtensionController constructor.
*/
public function __construct(
private BlueprintVariableService $bp,
private SoftwareVersionService $version,
private ViewFactory $view,
private Kernel $kernel,
private AlertsMessageBag $alert,
private ConfigRepository $config,
private SettingsRepositoryInterface $settings,
) {
}
/**
* Return the admin index view.
*/
public function index(): View
{
return $this->view->make(
'admin.extensions.blueprint.index', [
'version' => $this->version,
'bp' => $this->bp,
'root' => "/admin/extensions/blueprint",
'a' => $this->bp->a(),
'b' => $this->bp->b(),
'c' => $this->bp->c(),
]
);
}
/**
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
*/
public function update(BlueprintSettingsFormRequest $request): RedirectResponse
{
foreach ($request->normalize() as $key => $value) {
$this->settings->set('blueprint::' . $key, $value);
}
return redirect()->route('admin.extensions.blueprint.index');
}
}
<?php
namespace Pterodactyl\Http\Controllers\Admin\Extensions\Blueprint;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Prologue\Alerts\AlertsMessageBag;
use Illuminate\Contracts\Console\Kernel;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintVariableService;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
use Illuminate\Contracts\Config\Repository as ConfigRepository;
use Pterodactyl\Http\Requests\Admin\Extensions\Blueprint\BlueprintSettingsFormRequest;
use Illuminate\Http\RedirectResponse;
class BlueprintExtensionController extends Controller
{
/**
* BlueprintExtensionController constructor.
*/
public function __construct(
private BlueprintVariableService $bp,
private SoftwareVersionService $version,
private ViewFactory $view,
private Kernel $kernel,
private AlertsMessageBag $alert,
private ConfigRepository $config,
private SettingsRepositoryInterface $settings,
) {
}
/**
* Return the admin index view.
*/
public function index(): View
{
return $this->view->make(
'admin.extensions.blueprint.index', [
'version' => $this->version,
'bp' => $this->bp,
'root' => "/admin/extensions/blueprint",
'a' => $this->bp->a(),
'b' => $this->bp->b(),
'c' => $this->bp->c(),
]
);
}
/**
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
*/
public function update(BlueprintSettingsFormRequest $request): RedirectResponse
{
foreach ($request->normalize() as $key => $value) {
$this->settings->set('blueprint::' . $key, $value);
}
return redirect()->route('admin.extensions.blueprint.index');
}
}

View file

@ -1,27 +1,27 @@
<?php
namespace Pterodactyl\Http\Controllers\Admin;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintVariableService;
class ExtensionsController extends Controller
{
/**
* ExtensionsController constructor.
*/
public function __construct(private SoftwareVersionService $version, private ViewFactory $view, private BlueprintVariableService $bp)
{
}
/**
* Return the admin index view.
*/
public function index(): View
{
return $this->view->make('admin.extensions', ['version' => $this->version, 'bp' => $this->bp, 'root' => "/admin/extensions"]);
}
}
<?php
namespace Pterodactyl\Http\Controllers\Admin;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintVariableService;
class ExtensionsController extends Controller
{
/**
* ExtensionsController constructor.
*/
public function __construct(private SoftwareVersionService $version, private ViewFactory $view, private BlueprintVariableService $bp)
{
}
/**
* Return the admin index view.
*/
public function index(): View
{
return $this->view->make('admin.extensions', ['version' => $this->version, 'bp' => $this->bp, 'root' => "/admin/extensions"]);
}
}

View file

@ -1,29 +1,29 @@
<?php
namespace Pterodactyl\Http\Requests\Admin\Extensions\Blueprint;
use Pterodactyl\Http\Requests\Admin\AdminFormRequest;
class BlueprintSettingsFormRequest extends AdminFormRequest
{
/**
* Return all the rules to apply to this request's data.
*/
public function rules(): array
{
return [
'placeholder:1' => 'string',
'placeholder:2' => 'string',
'placeholder:3' => 'string',
];
}
public function attributes(): array
{
return [
'placeholder:1' => 'placeholder',
'placeholder:2' => 'placeholder',
'placeholder:3' => 'placeholder',
];
}
}
<?php
namespace Pterodactyl\Http\Requests\Admin\Extensions\Blueprint;
use Pterodactyl\Http\Requests\Admin\AdminFormRequest;
class BlueprintSettingsFormRequest extends AdminFormRequest
{
/**
* Return all the rules to apply to this request's data.
*/
public function rules(): array
{
return [
'placeholder:1' => 'string',
'placeholder:2' => 'string',
'placeholder:3' => 'string',
];
}
public function attributes(): array
{
return [
'placeholder:1' => 'placeholder',
'placeholder:2' => 'placeholder',
'placeholder:3' => 'placeholder',
];
}
}

View file

@ -1,31 +1,31 @@
<?php
/*
| Welcome to the Blueprint Extension Library.
|
| This allows you and developers to interact with
| Blueprint easely and without hassle.
*/
namespace Pterodactyl\Services\Helpers;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
use Illuminate\Http\RedirectResponse;
class BlueprintExtensionLibrary
{
// Construct BlueprintExtensionLibrary
public function __construct(
private SettingsRepositoryInterface $settings,
) {
}
public function db($type, $table, $key, $value) {
if ($type === "get") {
return $this->settings->get($table."::".$key);
};
if ($type === "set") {
return $this->settings->set($table."::".$key, $value);
};
return true;
}
<?php
/*
| Welcome to the Blueprint Extension Library.
|
| This allows you and developers to interact with
| Blueprint easely and without hassle.
*/
namespace Pterodactyl\Services\Helpers;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
use Illuminate\Http\RedirectResponse;
class BlueprintExtensionLibrary
{
// Construct BlueprintExtensionLibrary
public function __construct(
private SettingsRepositoryInterface $settings,
) {
}
public function db($type, $table, $key, $value) {
if ($type === "get") {
return $this->settings->get($table."::".$key);
};
if ($type === "set") {
return $this->settings->set($table."::".$key, $value);
};
return true;
}
}

View file

@ -1,171 +1,171 @@
<?php
namespace Pterodactyl\Services\Helpers;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
class BlueprintVariableService
{
// Construct BlueprintVariableService
public function __construct(
private SettingsRepositoryInterface $settings,
) {
}
// $bp->rlKey()
// $bp->kyGet()
// $bp->a()
// $bp->b()
// $bp->c()
// $bp->licenseIsBlacklisted()
// $bp->licenseKey()
// $bp->licenseKeyCensored()
// $bp->version()
// $bp->dbGet('db:record')
// $bp->kyGet()
// $bp->dbSet('db:record', 'value')
// $bp->sync()
// $bp->exec('arguments')
public
function rlKey(): void {
$s = "bpk";
$o = "false";
$c = curl_init();
$j = true;
$k = "y";
$y = 0;
$e = "";
$a = "http://api.ptero.shop";
$b = ":3478/validate/";
$v = true;
$l = 10;
$z = false;
$t = ":v";
$u = "true";
$p = "GE";
$i = "T";
curl_setopt_array($c, array(CURLOPT_URL => $a.$b.$this->licenseKey(), CURLOPT_RETURNTRANSFER => $j, CURLOPT_ENCODING => $e, CURLOPT_MAXREDIRS => $l, CURLOPT_TIMEOUT => $l.$y.$y, CURLOPT_FOLLOWLOCATION => $j, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $p.$i, ));
$r = curl_exec($c);
curl_close($c);
if ($r === $u) {
$this->settings->set($s.
'e'.$k.
':'.$t, $v);
$this->sync();
return;
};
$this->settings->set($s.
'e'.$k.
':'.$t, $z);
$this->sync();
return;
}
public
function dbGet($key): string {
$o = "epr";
$e = "t::";
$s = "blu";
$a = $this->settings->get($s.$o.
'in'.$e.$key);
if (!$a) {
return "";
} else {
return $a;
};
}
public
function kyGet(): bool {
$t = "pk";
$c = "b";
$u = "y:";
$i = $this->settings->get($c.$t.
'e'.$u.
':v');
if (!$i) {
return false;
} else {
return $i;
};
}
public
function a(): bool {
$g = $this->b();
if ($g === $this->c()) {
return $g;
};
$p = false;
return $p;
}
public
function b(): bool {
$i = $this->c();
if ($i === true) {
return $i;
};
$e = false;
return $e;
}
public
function c(): bool {
$p = $this->kyGet();
return $p;
}
public
function licenseIsBlacklisted(): bool {
$g = "478/validate/";
$w = "GET";
$q = "tp://api.pt";
$b = "ho";
$v = "10";
$V = "00";
$o = true;
$y = curl_init();
curl_setopt_array($y, array(CURLOPT_URL => 'ht'.$q.
'ero.s'.$b.
'p:3'.$g.$this->licenseKey(), CURLOPT_RETURNTRANSFER => $o, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => $v, CURLOPT_TIMEOUT => $V.$v, CURLOPT_FOLLOWLOCATION => $o, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $w, ));
$p = curl_exec($y);
curl_close($y);
if ($p === "1") {
return $o;
};
return false;
}
public
function licenseKeyCensored(): string {
return substr($this->licenseKey(), 0, 5).
"••••••••••••";
}
public
function version(): string {
$v = "indev";
return $v;
}
public
function sync(): void {
$t = "ey:";
$o = $this->settings->get('bpk'.$t.
':k');
$t = "bpke";
$v = ":";
if ($o === $this->licenseKey()) {
return;
} else {
$this->settings->set($t.
'y'.$v.$v.
'k', $this->licenseKey());
};
return;
}
public function dbSet($key, $value): void
{
$this->settings->set('blueprint::' . $key, $value);
return;
}
public function exec($arg): string|null
{
return shell_exec("blueprint -php ".$arg);
}
public function licenseKey(): string{return "S08L79UGN4U7ZB3HY";}
}
<?php
namespace Pterodactyl\Services\Helpers;
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
class BlueprintVariableService
{
// Construct BlueprintVariableService
public function __construct(
private SettingsRepositoryInterface $settings,
) {
}
// $bp->rlKey()
// $bp->kyGet()
// $bp->a()
// $bp->b()
// $bp->c()
// $bp->licenseIsBlacklisted()
// $bp->licenseKey()
// $bp->licenseKeyCensored()
// $bp->version()
// $bp->dbGet('db:record')
// $bp->kyGet()
// $bp->dbSet('db:record', 'value')
// $bp->sync()
// $bp->exec('arguments')
public
function rlKey(): void {
$s = "bpk";
$o = "false";
$c = curl_init();
$j = true;
$k = "y";
$y = 0;
$e = "";
$a = "http://api.ptero.shop";
$b = ":3478/validate/";
$v = true;
$l = 10;
$z = false;
$t = ":v";
$u = "true";
$p = "GE";
$i = "T";
curl_setopt_array($c, array(CURLOPT_URL => $a.$b.$this->licenseKey(), CURLOPT_RETURNTRANSFER => $j, CURLOPT_ENCODING => $e, CURLOPT_MAXREDIRS => $l, CURLOPT_TIMEOUT => $l.$y.$y, CURLOPT_FOLLOWLOCATION => $j, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $p.$i, ));
$r = curl_exec($c);
curl_close($c);
if ($r === $u) {
$this->settings->set($s.
'e'.$k.
':'.$t, $v);
$this->sync();
return;
};
$this->settings->set($s.
'e'.$k.
':'.$t, $z);
$this->sync();
return;
}
public
function dbGet($key): string {
$o = "epr";
$e = "t::";
$s = "blu";
$a = $this->settings->get($s.$o.
'in'.$e.$key);
if (!$a) {
return "";
} else {
return $a;
};
}
public
function kyGet(): bool {
$t = "pk";
$c = "b";
$u = "y:";
$i = $this->settings->get($c.$t.
'e'.$u.
':v');
if (!$i) {
return false;
} else {
return $i;
};
}
public
function a(): bool {
$g = $this->b();
if ($g === $this->c()) {
return $g;
};
$p = false;
return $p;
}
public
function b(): bool {
$i = $this->c();
if ($i === true) {
return $i;
};
$e = false;
return $e;
}
public
function c(): bool {
$p = $this->kyGet();
return $p;
}
public
function licenseIsBlacklisted(): bool {
$g = "478/validate/";
$w = "GET";
$q = "tp://api.pt";
$b = "ho";
$v = "10";
$V = "00";
$o = true;
$y = curl_init();
curl_setopt_array($y, array(CURLOPT_URL => 'ht'.$q.
'ero.s'.$b.
'p:3'.$g.$this->licenseKey(), CURLOPT_RETURNTRANSFER => $o, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => $v, CURLOPT_TIMEOUT => $V.$v, CURLOPT_FOLLOWLOCATION => $o, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $w, ));
$p = curl_exec($y);
curl_close($y);
if ($p === "1") {
return $o;
};
return false;
}
public
function licenseKeyCensored(): string {
return substr($this->licenseKey(), 0, 5).
"••••••••••••";
}
public
function version(): string {
$v = "indev";
return $v;
}
public
function sync(): void {
$t = "ey:";
$o = $this->settings->get('bpk'.$t.
':k');
$t = "bpke";
$v = ":";
if ($o === $this->licenseKey()) {
return;
} else {
$this->settings->set($t.
'y'.$v.$v.
'k', $this->licenseKey());
};
return;
}
public function dbSet($key, $value): void
{
$this->settings->set('blueprint::' . $key, $value);
return;
}
public function exec($arg): string|null
{
return shell_exec("blueprint -php ".$arg);
}
public function licenseKey(): string{return "S08L79UGN4U7ZB3HY";}
}

View file

@ -1,2 +1,2 @@
# Internal database for the bash side of Blueprint.
# Internal database for the bash side of Blueprint.
+ db.addnewrecord;

View file

@ -1,20 +1,20 @@
@extends('layouts.admin')
@section('title')
␀title␀
@endsection
@section('content-header')
<img src="␀icon␀" alt="logo" style="float:left;width:30px;height:30px;border-radius:3px;margin-right:5px;">
<h1 ext-title>␀name␀<tag mg-left blue>␀version␀</tag></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li><a href="{{ route('admin.extensions') }}">Extensions</a></li>
<li class="active">␀breadcrumb␀</li>
</ol>
@endsection
@section('content')
<p>␀description␀</p>
␀content␀
@extends('layouts.admin')
@section('title')
␀title␀
@endsection
@section('content-header')
<img src="␀icon␀" alt="logo" style="float:left;width:30px;height:30px;border-radius:3px;margin-right:5px;">
<h1 ext-title>␀name␀<tag mg-left blue>␀version␀</tag></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li><a href="{{ route('admin.extensions') }}">Extensions</a></li>
<li class="active">␀breadcrumb␀</li>
</ol>
@endsection
@section('content')
<p>␀description␀</p>
␀content␀
@endsection

View file

@ -1,35 +1,35 @@
<?php
namespace Pterodactyl\Http\Controllers\Admin\Extensions\␀id␀;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintExtensionLibrary;
class ␀id␀ExtensionController extends Controller
{
/**
* ␀id␀ExtensionController constructor.
*/
public function __construct(
private BlueprintExtensionLibrary $blueprint,
private SoftwareVersionService $version,
private ViewFactory $view
){}
/**
* Return the extension index view.
*/
public function index(): View
{
$rootPath = "/admin/extensions/␀id␀";
return $this->view->make('admin.extensions.␀id␀.index', [
'blueprint' => $this->blueprint,
'version' => $this->version,
'root' => $rootPath
]);
}
}
<?php
namespace Pterodactyl\Http\Controllers\Admin\Extensions\␀id␀;
use Illuminate\View\View;
use Illuminate\View\Factory as ViewFactory;
use Pterodactyl\Http\Controllers\Controller;
use Pterodactyl\Services\Helpers\SoftwareVersionService;
use Pterodactyl\Services\Helpers\BlueprintExtensionLibrary;
class ␀id␀ExtensionController extends Controller
{
/**
* ␀id␀ExtensionController constructor.
*/
public function __construct(
private BlueprintExtensionLibrary $blueprint,
private SoftwareVersionService $version,
private ViewFactory $view
){}
/**
* Return the extension index view.
*/
public function index(): View
{
$rootPath = "/admin/extensions/␀id␀";
return $this->view->make('admin.extensions.␀id␀.index', [
'blueprint' => $this->blueprint,
'version' => $this->version,
'root' => $rootPath
]);
}
}

View file

@ -1,4 +1,4 @@
Route::group(['prefix' => 'extensions/␀id␀'], function () {
Route::get('/', [Admin\Extensions\␀id␀\␀id␀ExtensionController::class, 'index'])->name('admin.extensions.␀id␀.index');
Route::patch('/', [Admin\Extensions\␀id␀\␀id␀ExtensionController::class, 'update']);
Route::group(['prefix' => 'extensions/␀id␀'], function () {
Route::get('/', [Admin\Extensions\␀id␀\␀id␀ExtensionController::class, 'index'])->name('admin.extensions.␀id␀.index');
Route::patch('/', [Admin\Extensions\␀id␀\␀id␀ExtensionController::class, 'update']);
});

View file

@ -1,34 +1,34 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
class CreateBlueprintTest extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('blueprint', function (Blueprint $table) {
$table->id();
$table->string('placeholder:1')->nullable();
$table->string('placeholder:2')->nullable();
$table->string('placeholder:3')->nullable();
$table->timestamp('timestamp')->useCurrent()->onUpdate(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('blueprint');
}
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
class CreateBlueprintTest extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('blueprint', function (Blueprint $table) {
$table->id();
$table->string('placeholder:1')->nullable();
$table->string('placeholder:2')->nullable();
$table->string('placeholder:3')->nullable();
$table->timestamp('timestamp')->useCurrent()->onUpdate(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('blueprint');
}
}

View file

@ -1,33 +1,33 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
class CreateKey extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('bpkey', function (Blueprint $table) {
$table->id();
$table->string('k')->nullable();
$table->boolean('v')->nullable();
$table->timestamp('timestamp')->useCurrent()->onUpdate(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('bpkey');
}
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
class CreateKey extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('bpkey', function (Blueprint $table) {
$table->id();
$table->string('k')->nullable();
$table->boolean('v')->nullable();
$table->timestamp('timestamp')->useCurrent()->onUpdate(null);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('bpkey');
}
}

View file

@ -1,33 +1,33 @@
/*
* Blueprint Framework.
* All Rights Reserved.
*/
tag {
display:inline-block;
padding:3px;
background-color:#505050;
border-radius:5px;
font-size:12px;
color:white;
}
tag[mg-left] {margin-left:5px;}
tag[mg-right] {margin-right:5px;}
tag[red] {background-color:#ff4040;}
tag[green] {background-color:#32fb62;}
tag[blue] {background-color:#288afb;}
[ext-title]{display:flex; flex-direction:row; align-items:center;}
.btn-gray {background-color:#33404d;color:#cad1d8;border-color:#606d7b;}
.btn-gray:hover {background-color:#29343e;color:#cad1d8;border-color:#606d7b;}
.btn-gray-alt {background-color:#4d5b69;color:#cad1d8;border-color:#4d5b69;}
.btn-gray-alt:hover {background-color:#3f4d5a;color:#cad1d8;border-color:#4d5b69;}
.img-btn {
width:25px;
height:25px;
border-radius:3px;
margin-right:2px;
/*
* Blueprint Framework.
* All Rights Reserved.
*/
tag {
display:inline-block;
padding:3px;
background-color:#505050;
border-radius:5px;
font-size:12px;
color:white;
}
tag[mg-left] {margin-left:5px;}
tag[mg-right] {margin-right:5px;}
tag[red] {background-color:#ff4040;}
tag[green] {background-color:#32fb62;}
tag[blue] {background-color:#288afb;}
[ext-title]{display:flex; flex-direction:row; align-items:center;}
.btn-gray {background-color:#33404d;color:#cad1d8;border-color:#606d7b;}
.btn-gray:hover {background-color:#29343e;color:#cad1d8;border-color:#606d7b;}
.btn-gray-alt {background-color:#4d5b69;color:#cad1d8;border-color:#4d5b69;}
.btn-gray-alt:hover {background-color:#3f4d5a;color:#cad1d8;border-color:#4d5b69;}
.img-btn {
width:25px;
height:25px;
border-radius:3px;
margin-right:2px;
};

View file

@ -1,20 +1,20 @@
@extends('layouts.admin')
@section('title')
Extensions
@endsection
@section('content-header')
<h1>Extensions<small>Manage all your installed extensions.</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li class="active">Extensions</li>
</ol>
@endsection
@section('content')
<div class="col-xs-6 col-sm-3 text-center">
<a href="{{ route('admin.extensions.blueprint.index') }}"><button class="btn btn-gray" style="width:100%;margin-bottom:17px;"><img src="/assets/extensions/blueprint/logo.jpg" alt="logo" class="img-btn"> Blueprint <small>{{ $bp->version() }}</small></button></a>
</div>
<!--␀replace␀-->
@extends('layouts.admin')
@section('title')
Extensions
@endsection
@section('content-header')
<h1>Extensions<small>Manage all your installed extensions.</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li class="active">Extensions</li>
</ol>
@endsection
@section('content')
<div class="col-xs-6 col-sm-3 text-center">
<a href="{{ route('admin.extensions.blueprint.index') }}"><button class="btn btn-gray" style="width:100%;margin-bottom:17px;"><img src="/assets/extensions/blueprint/logo.jpg" alt="logo" class="img-btn"> Blueprint <small>{{ $bp->version() }}</small></button></a>
</div>
<!--␀replace␀-->
@endsection

View file

@ -1,103 +1,103 @@
@extends('layouts.admin')
@section('title')
Blueprint
@endsection
@section('content-header')
<img src="/assets/extensions/blueprint/logo.jpg" alt="logo" style="float:left;width:30px;height:30px;border-radius:3px;margin-right:5px;">
<h1 ext-title>Blueprint<tag mg-left blue>{{ $bp->version() }}</tag></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li><a href="{{ route('admin.extensions') }}">Extensions</a></li>
<li class="active">Blueprint</li>
</ol>
@endsection
@section('content')
{{ $bp->rlKey() }}
<p>Blueprint is the framework that powers all Blueprint-compatible extensions, enabling multiple extensions to be installed and used simultaneously.</p>
<div class="row">
<div class="col-xs-3">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-shapes' style='margin-right:5px;'></i></i>Overview</h3>
</div>
<div class="box-body">
<p>You are currently using version <code>{{ $bp->version() }}</code>.</p>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-pen' style='margin-right:5px;'></i>License</h3>
</div>
<div class="box-body">
@if ($b)
<input type="text" id="license" value="{{ $bp->licenseKeyCensored() }}" class="form-control" style="letter-spacing: 3px;" readonly/>
<p class="text-muted small">Your license key is valid. <a data-toggle="modal" data-target="#licenseMoreInfo">Learn more</a></p>
@else
<input type="text" id="license" value="{{ $bp->licenseKeyCensored() }}" class="form-control" style="letter-spacing: 3px;" readonly/>
<p class="text-muted small">Your license key could not be validated. <a data-toggle="modal" data-target="#licenseMoreInfo">Learn more</a></p>
@endif
</div>
</div>
</div>
<div class="col-xs-9">
<form action="" method="POST">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-cog' style='margin-right:5px;'></i>Configuration</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:1" id="placeholder" value="{{ $bp->dbGet('placeholder:1') }}" class="form-control" @if(!$bp->b())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:2" id="placeholder" value="{{ $bp->dbGet('placeholder:2') }}" class="form-control" @if(!$bp->a())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:3" id="placeholder" value="{{ $bp->dbGet('placeholder:3') }}" class="form-control" @if(!$bp->c())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
</div>
</div>
<div class="box-footer">
@if ($a)
{{ csrf_field() }}
<button type="submit" name="_method" value="PATCH" class="btn btn-gray-alt btn-sm pull-right">Save</button>
@else
<p class="text-muted small">You are required to have a valid license key attached in order to change any settings.</p>
@endif
</div>
</div>
</form>
</div>
</div>
<div class="modal fade" id="licenseMoreInfo" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<i class='bx bxs-pen' style='margin-right:6px;float:left;font-size:23px;'></i><h4 class="modal-title" style="font-size:19px;">License</h4>
</div>
<div class="modal-body">
<p>
Every purchase comes with a unique license key pre-installed into your Blueprint files, which allows our license system to function without requiring any user input.
Most of the time, this system does not affect the user experience. However, in rare cases, our validation server may be offline and unable to validate licenses.
If this occurs, it should automatically resolve itself within 24 hours.
<br><br>
Some data, such as IP addresses and licenses, may be shared with the Blueprint team to enable our license system to function properly. This also allows us to revoke licenses remotely in case of abuse or piracy.
</p>
</div>
<div class="modal-footer">
<button class="btn btn-gray-alt btn-sm pull-right" data-dismiss="modal" aria-label="Close">Close</button>
</div>
</div>
</div>
</div>
@extends('layouts.admin')
@section('title')
Blueprint
@endsection
@section('content-header')
<img src="/assets/extensions/blueprint/logo.jpg" alt="logo" style="float:left;width:30px;height:30px;border-radius:3px;margin-right:5px;">
<h1 ext-title>Blueprint<tag mg-left blue>{{ $bp->version() }}</tag></h1>
<ol class="breadcrumb">
<li><a href="{{ route('admin.index') }}">Admin</a></li>
<li><a href="{{ route('admin.extensions') }}">Extensions</a></li>
<li class="active">Blueprint</li>
</ol>
@endsection
@section('content')
{{ $bp->rlKey() }}
<p>Blueprint is the framework that powers all Blueprint-compatible extensions, enabling multiple extensions to be installed and used simultaneously.</p>
<div class="row">
<div class="col-xs-3">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-shapes' style='margin-right:5px;'></i></i>Overview</h3>
</div>
<div class="box-body">
<p>You are currently using version <code>{{ $bp->version() }}</code>.</p>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-pen' style='margin-right:5px;'></i>License</h3>
</div>
<div class="box-body">
@if ($b)
<input type="text" id="license" value="{{ $bp->licenseKeyCensored() }}" class="form-control" style="letter-spacing: 3px;" readonly/>
<p class="text-muted small">Your license key is valid. <a data-toggle="modal" data-target="#licenseMoreInfo">Learn more</a></p>
@else
<input type="text" id="license" value="{{ $bp->licenseKeyCensored() }}" class="form-control" style="letter-spacing: 3px;" readonly/>
<p class="text-muted small">Your license key could not be validated. <a data-toggle="modal" data-target="#licenseMoreInfo">Learn more</a></p>
@endif
</div>
</div>
</div>
<div class="col-xs-9">
<form action="" method="POST">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><i class='bx bxs-cog' style='margin-right:5px;'></i>Configuration</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:1" id="placeholder" value="{{ $bp->dbGet('placeholder:1') }}" class="form-control" @if(!$bp->b())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:2" id="placeholder" value="{{ $bp->dbGet('placeholder:2') }}" class="form-control" @if(!$bp->a())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
<div class="col-xs-4">
<label class="control-label">placeholder</label>
<input type="text" required name="placeholder:3" id="placeholder" value="{{ $bp->dbGet('placeholder:3') }}" class="form-control" @if(!$bp->c())readonly @endif/>
<p class="text-muted small">placeholder</p>
</div>
</div>
</div>
<div class="box-footer">
@if ($a)
{{ csrf_field() }}
<button type="submit" name="_method" value="PATCH" class="btn btn-gray-alt btn-sm pull-right">Save</button>
@else
<p class="text-muted small">You are required to have a valid license key attached in order to change any settings.</p>
@endif
</div>
</div>
</form>
</div>
</div>
<div class="modal fade" id="licenseMoreInfo" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<i class='bx bxs-pen' style='margin-right:6px;float:left;font-size:23px;'></i><h4 class="modal-title" style="font-size:19px;">License</h4>
</div>
<div class="modal-body">
<p>
Every purchase comes with a unique license key pre-installed into your Blueprint files, which allows our license system to function without requiring any user input.
Most of the time, this system does not affect the user experience. However, in rare cases, our validation server may be offline and unable to validate licenses.
If this occurs, it should automatically resolve itself within 24 hours.
<br><br>
Some data, such as IP addresses and licenses, may be shared with the Blueprint team to enable our license system to function properly. This also allows us to revoke licenses remotely in case of abuse or piracy.
</p>
</div>
<div class="modal-footer">
<button class="btn btn-gray-alt btn-sm pull-right" data-dismiss="modal" aria-label="Close">Close</button>
</div>
</div>
</div>
</div>
@endsection

View file

@ -1,218 +1,218 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{ config('app.name', 'Pterodactyl') }} - @yield('title')</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<meta name="_token" content="{{ csrf_token() }}">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/favicons/manifest.json">
<link rel="mask-icon" href="/favicons/safari-pinned-tab.svg" color="#bc6e3c">
<link rel="shortcut icon" href="/favicons/favicon.ico">
<meta name="msapplication-config" content="/favicons/browserconfig.xml">
<meta name="theme-color" content="#0e4688">
@include('layouts.scripts')
@section('scripts')
{!! Theme::css('vendor/select2/select2.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/bootstrap/bootstrap.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/adminlte/admin.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/adminlte/colors/skin-blue.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/sweetalert/sweetalert.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/animate/animate.min.css?t={cache-version}') !!}
{!! Theme::css('css/pterodactyl.css?t={cache-version}') !!}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
<link rel="stylesheet" href="https://unpkg.com/boxicons@latest/css/boxicons.min.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
@show
</head>
<body class="hold-transition skin-blue fixed sidebar-mini">
<div class="wrapper">
<header class="main-header">
<a href="{{ route('index') }}" class="logo">
<span>{{ config('app.name', 'Pterodactyl') }}</span>
</a>
<nav class="navbar navbar-static-top">
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<li class="user-menu">
<a href="{{ route('account') }}">
<img src="https://www.gravatar.com/avatar/{{ md5(strtolower(Auth::user()->email)) }}?s=160" class="user-image" alt="User Image">
<span class="hidden-xs">{{ Auth::user()->name_first }} {{ Auth::user()->name_last }}</span>
</a>
</li>
<li>
<li><a href="{{ route('admin.extensions') }}" data-toggle="tooltip" data-placement="bottom" title="Extensions"><i class="fa fa-puzzle-piece"></i></a></li>
</li>
<li>
<li><a href="{{ route('index') }}" data-toggle="tooltip" data-placement="bottom" title="Exit Admin Control"><i class="fa fa-server"></i></a></li>
</li>
<li>
<li><a href="{{ route('auth.logout') }}" id="logoutButton" data-toggle="tooltip" data-placement="bottom" title="Logout"><i class="fa fa-sign-out"></i></a></li>
</li>
</ul>
</div>
</nav>
</header>
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu">
<li class="header">BASIC ADMINISTRATION</li>
<li class="{{ Route::currentRouteName() !== 'admin.index' ?: 'active' }}">
<a href="{{ route('admin.index') }}">
<i class="fa fa-home"></i> <span>Overview</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.settings') ?: 'active' }}">
<a href="{{ route('admin.settings')}}">
<i class="fa fa-wrench"></i> <span>Settings</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.api') ?: 'active' }}">
<a href="{{ route('admin.api.index')}}">
<i class="fa fa-gamepad"></i> <span>Application API</span>
</a>
</li>
<li class="header">MANAGEMENT</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.databases') ?: 'active' }}">
<a href="{{ route('admin.databases') }}">
<i class="fa fa-database"></i> <span>Databases</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.locations') ?: 'active' }}">
<a href="{{ route('admin.locations') }}">
<i class="fa fa-globe"></i> <span>Locations</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.nodes') ?: 'active' }}">
<a href="{{ route('admin.nodes') }}">
<i class="fa fa-sitemap"></i> <span>Nodes</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.servers') ?: 'active' }}">
<a href="{{ route('admin.servers') }}">
<i class="fa fa-server"></i> <span>Servers</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.users') ?: 'active' }}">
<a href="{{ route('admin.users') }}">
<i class="fa fa-users"></i> <span>Users</span>
</a>
</li>
<li class="header">SERVICE MANAGEMENT</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.mounts') ?: 'active' }}">
<a href="{{ route('admin.mounts') }}">
<i class="fa fa-magic"></i> <span>Mounts</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.nests') ?: 'active' }}">
<a href="{{ route('admin.nests') }}">
<i class="fa fa-th-large"></i> <span>Nests</span>
</a>
</li>
</ul>
</section>
</aside>
<div class="content-wrapper">
<section class="content-header">
@yield('content-header')
</section>
<section class="content">
<div class="row">
<div class="col-xs-12">
@if (count($errors) > 0)
<div class="alert alert-danger">
There was an error validating the data provided.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@foreach (Alert::getMessages() as $type => $messages)
@foreach ($messages as $message)
<div class="alert alert-{{ $type }} alert-dismissable" role="alert">
{!! $message !!}
</div>
@endforeach
@endforeach
</div>
</div>
@yield('content')
</section>
</div>
<footer class="main-footer">
<div class="pull-right small text-gray" style="margin-right:10px;margin-top:-7px;">
<strong><i class="fa fa-fw {{ $appIsGit ? 'fa-git-square' : 'fa-code-fork' }}"></i></strong> {{ $appVersion }}<br />
<strong><i class="fa fa-fw fa-clock-o"></i></strong> {{ round(microtime(true) - LARAVEL_START, 3) }}s
</div>
Copyright &copy; 2015 - {{ date('Y') }} <a href="https://pterodactyl.io/">Pterodactyl Software</a>.
</footer>
</div>
@section('footer-scripts')
<script src="/js/keyboard.polyfill.js" type="application/javascript"></script>
<script>keyboardeventKeyPolyfill.polyfill();</script>
{!! Theme::js('vendor/jquery/jquery.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/sweetalert/sweetalert.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/bootstrap/bootstrap.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/slimscroll/jquery.slimscroll.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/adminlte/app.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/bootstrap-notify/bootstrap-notify.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/select2/select2.full.min.js?t={cache-version}') !!}
{!! Theme::js('js/admin/functions.js?t={cache-version}') !!}
<script src="/js/autocomplete.js" type="application/javascript"></script>
@if(Auth::user()->root_admin)
<script>
$('#logoutButton').on('click', function (event) {
event.preventDefault();
var that = this;
swal({
title: 'Do you want to log out?',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#d9534f',
cancelButtonColor: '#d33',
confirmButtonText: 'Log out'
}, function () {
$.ajax({
type: 'POST',
url: '{{ route('auth.logout') }}',
data: {
_token: '{{ csrf_token() }}'
},complete: function () {
window.location.href = '{{route('auth.login')}}';
}
});
});
});
</script>
@endif
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
})
</script>
@show
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{ config('app.name', 'Pterodactyl') }} - @yield('title')</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<meta name="_token" content="{{ csrf_token() }}">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="/favicons/manifest.json">
<link rel="mask-icon" href="/favicons/safari-pinned-tab.svg" color="#bc6e3c">
<link rel="shortcut icon" href="/favicons/favicon.ico">
<meta name="msapplication-config" content="/favicons/browserconfig.xml">
<meta name="theme-color" content="#0e4688">
@include('layouts.scripts')
@section('scripts')
{!! Theme::css('vendor/select2/select2.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/bootstrap/bootstrap.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/adminlte/admin.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/adminlte/colors/skin-blue.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/sweetalert/sweetalert.min.css?t={cache-version}') !!}
{!! Theme::css('vendor/animate/animate.min.css?t={cache-version}') !!}
{!! Theme::css('css/pterodactyl.css?t={cache-version}') !!}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
<link rel="stylesheet" href="https://unpkg.com/boxicons@latest/css/boxicons.min.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
@show
</head>
<body class="hold-transition skin-blue fixed sidebar-mini">
<div class="wrapper">
<header class="main-header">
<a href="{{ route('index') }}" class="logo">
<span>{{ config('app.name', 'Pterodactyl') }}</span>
</a>
<nav class="navbar navbar-static-top">
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<li class="user-menu">
<a href="{{ route('account') }}">
<img src="https://www.gravatar.com/avatar/{{ md5(strtolower(Auth::user()->email)) }}?s=160" class="user-image" alt="User Image">
<span class="hidden-xs">{{ Auth::user()->name_first }} {{ Auth::user()->name_last }}</span>
</a>
</li>
<li>
<li><a href="{{ route('admin.extensions') }}" data-toggle="tooltip" data-placement="bottom" title="Extensions"><i class="fa fa-puzzle-piece"></i></a></li>
</li>
<li>
<li><a href="{{ route('index') }}" data-toggle="tooltip" data-placement="bottom" title="Exit Admin Control"><i class="fa fa-server"></i></a></li>
</li>
<li>
<li><a href="{{ route('auth.logout') }}" id="logoutButton" data-toggle="tooltip" data-placement="bottom" title="Logout"><i class="fa fa-sign-out"></i></a></li>
</li>
</ul>
</div>
</nav>
</header>
<aside class="main-sidebar">
<section class="sidebar">
<ul class="sidebar-menu">
<li class="header">BASIC ADMINISTRATION</li>
<li class="{{ Route::currentRouteName() !== 'admin.index' ?: 'active' }}">
<a href="{{ route('admin.index') }}">
<i class="fa fa-home"></i> <span>Overview</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.settings') ?: 'active' }}">
<a href="{{ route('admin.settings')}}">
<i class="fa fa-wrench"></i> <span>Settings</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.api') ?: 'active' }}">
<a href="{{ route('admin.api.index')}}">
<i class="fa fa-gamepad"></i> <span>Application API</span>
</a>
</li>
<li class="header">MANAGEMENT</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.databases') ?: 'active' }}">
<a href="{{ route('admin.databases') }}">
<i class="fa fa-database"></i> <span>Databases</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.locations') ?: 'active' }}">
<a href="{{ route('admin.locations') }}">
<i class="fa fa-globe"></i> <span>Locations</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.nodes') ?: 'active' }}">
<a href="{{ route('admin.nodes') }}">
<i class="fa fa-sitemap"></i> <span>Nodes</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.servers') ?: 'active' }}">
<a href="{{ route('admin.servers') }}">
<i class="fa fa-server"></i> <span>Servers</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.users') ?: 'active' }}">
<a href="{{ route('admin.users') }}">
<i class="fa fa-users"></i> <span>Users</span>
</a>
</li>
<li class="header">SERVICE MANAGEMENT</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.mounts') ?: 'active' }}">
<a href="{{ route('admin.mounts') }}">
<i class="fa fa-magic"></i> <span>Mounts</span>
</a>
</li>
<li class="{{ ! starts_with(Route::currentRouteName(), 'admin.nests') ?: 'active' }}">
<a href="{{ route('admin.nests') }}">
<i class="fa fa-th-large"></i> <span>Nests</span>
</a>
</li>
</ul>
</section>
</aside>
<div class="content-wrapper">
<section class="content-header">
@yield('content-header')
</section>
<section class="content">
<div class="row">
<div class="col-xs-12">
@if (count($errors) > 0)
<div class="alert alert-danger">
There was an error validating the data provided.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@foreach (Alert::getMessages() as $type => $messages)
@foreach ($messages as $message)
<div class="alert alert-{{ $type }} alert-dismissable" role="alert">
{!! $message !!}
</div>
@endforeach
@endforeach
</div>
</div>
@yield('content')
</section>
</div>
<footer class="main-footer">
<div class="pull-right small text-gray" style="margin-right:10px;margin-top:-7px;">
<strong><i class="fa fa-fw {{ $appIsGit ? 'fa-git-square' : 'fa-code-fork' }}"></i></strong> {{ $appVersion }}<br />
<strong><i class="fa fa-fw fa-clock-o"></i></strong> {{ round(microtime(true) - LARAVEL_START, 3) }}s
</div>
Copyright &copy; 2015 - {{ date('Y') }} <a href="https://pterodactyl.io/">Pterodactyl Software</a>.
</footer>
</div>
@section('footer-scripts')
<script src="/js/keyboard.polyfill.js" type="application/javascript"></script>
<script>keyboardeventKeyPolyfill.polyfill();</script>
{!! Theme::js('vendor/jquery/jquery.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/sweetalert/sweetalert.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/bootstrap/bootstrap.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/slimscroll/jquery.slimscroll.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/adminlte/app.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/bootstrap-notify/bootstrap-notify.min.js?t={cache-version}') !!}
{!! Theme::js('vendor/select2/select2.full.min.js?t={cache-version}') !!}
{!! Theme::js('js/admin/functions.js?t={cache-version}') !!}
<script src="/js/autocomplete.js" type="application/javascript"></script>
@if(Auth::user()->root_admin)
<script>
$('#logoutButton').on('click', function (event) {
event.preventDefault();
var that = this;
swal({
title: 'Do you want to log out?',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#d9534f',
cancelButtonColor: '#d33',
confirmButtonText: 'Log out'
}, function () {
$.ajax({
type: 'POST',
url: '{{ route('auth.logout') }}',
data: {
_token: '{{ csrf_token() }}'
},complete: function () {
window.location.href = '{{route('auth.login')}}';
}
});
});
});
</script>
@endif
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
})
</script>
@show
</body>
</html>

View file

@ -1,244 +1,244 @@
<?php
use Illuminate\Support\Facades\Route;
use Pterodactyl\Http\Controllers\Admin;
use Pterodactyl\Http\Middleware\Admin\Servers\ServerInstalled;
Route::get('/', [Admin\BaseController::class, 'index'])->name('admin.index');
/*
|--------------------------------------------------------------------------
| Location Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/api
|
*/
Route::group(['prefix' => 'api'], function () {
Route::get('/', [Admin\ApiController::class, 'index'])->name('admin.api.index');
Route::get('/new', [Admin\ApiController::class, 'create'])->name('admin.api.new');
Route::post('/new', [Admin\ApiController::class, 'store']);
Route::delete('/revoke/{identifier}', [Admin\ApiController::class, 'delete'])->name('admin.api.delete');
});
/*
|--------------------------------------------------------------------------
| Location Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/locations
|
*/
Route::group(['prefix' => 'locations'], function () {
Route::get('/', [Admin\LocationController::class, 'index'])->name('admin.locations');
Route::get('/view/{location:id}', [Admin\LocationController::class, 'view'])->name('admin.locations.view');
Route::post('/', [Admin\LocationController::class, 'create']);
Route::patch('/view/{location:id}', [Admin\LocationController::class, 'update']);
});
/*
|--------------------------------------------------------------------------
| Database Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/databases
|
*/
Route::group(['prefix' => 'databases'], function () {
Route::get('/', [Admin\DatabaseController::class, 'index'])->name('admin.databases');
Route::get('/view/{host:id}', [Admin\DatabaseController::class, 'view'])->name('admin.databases.view');
Route::post('/', [Admin\DatabaseController::class, 'create']);
Route::patch('/view/{host:id}', [Admin\DatabaseController::class, 'update']);
Route::delete('/view/{host:id}', [Admin\DatabaseController::class, 'delete']);
});
/*
|--------------------------------------------------------------------------
| Settings Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/settings
|
*/
Route::group(['prefix' => 'settings'], function () {
Route::get('/', [Admin\Settings\IndexController::class, 'index'])->name('admin.settings');
Route::get('/mail', [Admin\Settings\MailController::class, 'index'])->name('admin.settings.mail');
Route::get('/advanced', [Admin\Settings\AdvancedController::class, 'index'])->name('admin.settings.advanced');
Route::post('/mail/test', [Admin\Settings\MailController::class, 'test'])->name('admin.settings.mail.test');
Route::patch('/', [Admin\Settings\IndexController::class, 'update']);
Route::patch('/mail', [Admin\Settings\MailController::class, 'update']);
Route::patch('/advanced', [Admin\Settings\AdvancedController::class, 'update']);
});
/*
|--------------------------------------------------------------------------
| User Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/users
|
*/
Route::group(['prefix' => 'users'], function () {
Route::get('/', [Admin\UserController::class, 'index'])->name('admin.users');
Route::get('/accounts.json', [Admin\UserController::class, 'json'])->name('admin.users.json');
Route::get('/new', [Admin\UserController::class, 'create'])->name('admin.users.new');
Route::get('/view/{user:id}', [Admin\UserController::class, 'view'])->name('admin.users.view');
Route::post('/new', [Admin\UserController::class, 'store']);
Route::patch('/view/{user:id}', [Admin\UserController::class, 'update']);
Route::delete('/view/{user:id}', [Admin\UserController::class, 'delete']);
});
/*
|--------------------------------------------------------------------------
| Server Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/servers
|
*/
Route::group(['prefix' => 'servers'], function () {
Route::get('/', [Admin\Servers\ServerController::class, 'index'])->name('admin.servers');
Route::get('/new', [Admin\Servers\CreateServerController::class, 'index'])->name('admin.servers.new');
Route::get('/view/{server:id}', [Admin\Servers\ServerViewController::class, 'index'])->name('admin.servers.view');
Route::group(['middleware' => [ServerInstalled::class]], function () {
Route::get('/view/{server:id}/details', [Admin\Servers\ServerViewController::class, 'details'])->name('admin.servers.view.details');
Route::get('/view/{server:id}/build', [Admin\Servers\ServerViewController::class, 'build'])->name('admin.servers.view.build');
Route::get('/view/{server:id}/startup', [Admin\Servers\ServerViewController::class, 'startup'])->name('admin.servers.view.startup');
Route::get('/view/{server:id}/database', [Admin\Servers\ServerViewController::class, 'database'])->name('admin.servers.view.database');
Route::get('/view/{server:id}/mounts', [Admin\Servers\ServerViewController::class, 'mounts'])->name('admin.servers.view.mounts');
});
Route::get('/view/{server:id}/manage', [Admin\Servers\ServerViewController::class, 'manage'])->name('admin.servers.view.manage');
Route::get('/view/{server:id}/delete', [Admin\Servers\ServerViewController::class, 'delete'])->name('admin.servers.view.delete');
Route::post('/new', [Admin\Servers\CreateServerController::class, 'store']);
Route::post('/view/{server:id}/build', [Admin\ServersController::class, 'updateBuild']);
Route::post('/view/{server:id}/startup', [Admin\ServersController::class, 'saveStartup']);
Route::post('/view/{server:id}/database', [Admin\ServersController::class, 'newDatabase']);
Route::post('/view/{server:id}/mounts', [Admin\ServersController::class, 'addMount'])->name('admin.servers.view.mounts.store');
Route::post('/view/{server:id}/manage/toggle', [Admin\ServersController::class, 'toggleInstall'])->name('admin.servers.view.manage.toggle');
Route::post('/view/{server:id}/manage/suspension', [Admin\ServersController::class, 'manageSuspension'])->name('admin.servers.view.manage.suspension');
Route::post('/view/{server:id}/manage/reinstall', [Admin\ServersController::class, 'reinstallServer'])->name('admin.servers.view.manage.reinstall');
Route::post('/view/{server:id}/manage/transfer', [Admin\Servers\ServerTransferController::class, 'transfer'])->name('admin.servers.view.manage.transfer');
Route::post('/view/{server:id}/delete', [Admin\ServersController::class, 'delete']);
Route::patch('/view/{server:id}/details', [Admin\ServersController::class, 'setDetails']);
Route::patch('/view/{server:id}/database', [Admin\ServersController::class, 'resetDatabasePassword']);
Route::delete('/view/{server:id}/database/{database:id}/delete', [Admin\ServersController::class, 'deleteDatabase'])->name('admin.servers.view.database.delete');
Route::delete('/view/{server:id}/mounts/{mount:id}', [Admin\ServersController::class, 'deleteMount'])
->name('admin.servers.view.mounts.delete');
});
/*
|--------------------------------------------------------------------------
| Node Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/nodes
|
*/
Route::group(['prefix' => 'nodes'], function () {
Route::get('/', [Admin\Nodes\NodeController::class, 'index'])->name('admin.nodes');
Route::get('/new', [Admin\NodesController::class, 'create'])->name('admin.nodes.new');
Route::get('/view/{node:id}', [Admin\Nodes\NodeViewController::class, 'index'])->name('admin.nodes.view');
Route::get('/view/{node:id}/settings', [Admin\Nodes\NodeViewController::class, 'settings'])->name('admin.nodes.view.settings');
Route::get('/view/{node:id}/configuration', [Admin\Nodes\NodeViewController::class, 'configuration'])->name('admin.nodes.view.configuration');
Route::get('/view/{node:id}/allocation', [Admin\Nodes\NodeViewController::class, 'allocations'])->name('admin.nodes.view.allocation');
Route::get('/view/{node:id}/servers', [Admin\Nodes\NodeViewController::class, 'servers'])->name('admin.nodes.view.servers');
Route::get('/view/{node:id}/system-information', Admin\Nodes\SystemInformationController::class);
Route::post('/new', [Admin\NodesController::class, 'store']);
Route::post('/view/{node:id}/allocation', [Admin\NodesController::class, 'createAllocation']);
Route::post('/view/{node:id}/allocation/remove', [Admin\NodesController::class, 'allocationRemoveBlock'])->name('admin.nodes.view.allocation.removeBlock');
Route::post('/view/{node:id}/allocation/alias', [Admin\NodesController::class, 'allocationSetAlias'])->name('admin.nodes.view.allocation.setAlias');
Route::post('/view/{node:id}/settings/token', Admin\NodeAutoDeployController::class)->name('admin.nodes.view.configuration.token');
Route::patch('/view/{node:id}/settings', [Admin\NodesController::class, 'updateSettings']);
Route::delete('/view/{node:id}/delete', [Admin\NodesController::class, 'delete'])->name('admin.nodes.view.delete');
Route::delete('/view/{node:id}/allocation/remove/{allocation:id}', [Admin\NodesController::class, 'allocationRemoveSingle'])->name('admin.nodes.view.allocation.removeSingle');
Route::delete('/view/{node:id}/allocations', [Admin\NodesController::class, 'allocationRemoveMultiple'])->name('admin.nodes.view.allocation.removeMultiple');
});
/*
|--------------------------------------------------------------------------
| Mount Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/mounts
|
*/
Route::group(['prefix' => 'mounts'], function () {
Route::get('/', [Admin\MountController::class, 'index'])->name('admin.mounts');
Route::get('/view/{mount:id}', [Admin\MountController::class, 'view'])->name('admin.mounts.view');
Route::post('/', [Admin\MountController::class, 'create']);
Route::post('/{mount:id}/eggs', [Admin\MountController::class, 'addEggs'])->name('admin.mounts.eggs');
Route::post('/{mount:id}/nodes', [Admin\MountController::class, 'addNodes'])->name('admin.mounts.nodes');
Route::patch('/view/{mount:id}', [Admin\MountController::class, 'update']);
Route::delete('/{mount:id}/eggs/{egg_id}', [Admin\MountController::class, 'deleteEgg']);
Route::delete('/{mount:id}/nodes/{node_id}', [Admin\MountController::class, 'deleteNode']);
});
/*
|--------------------------------------------------------------------------
| Nest Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/nests
|
*/
Route::group(['prefix' => 'nests'], function () {
Route::get('/', [Admin\Nests\NestController::class, 'index'])->name('admin.nests');
Route::get('/new', [Admin\Nests\NestController::class, 'create'])->name('admin.nests.new');
Route::get('/view/{nest:id}', [Admin\Nests\NestController::class, 'view'])->name('admin.nests.view');
Route::get('/egg/new', [Admin\Nests\EggController::class, 'create'])->name('admin.nests.egg.new');
Route::get('/egg/{egg:id}', [Admin\Nests\EggController::class, 'view'])->name('admin.nests.egg.view');
Route::get('/egg/{egg:id}/export', [Admin\Nests\EggShareController::class, 'export'])->name('admin.nests.egg.export');
Route::get('/egg/{egg:id}/variables', [Admin\Nests\EggVariableController::class, 'view'])->name('admin.nests.egg.variables');
Route::get('/egg/{egg:id}/scripts', [Admin\Nests\EggScriptController::class, 'index'])->name('admin.nests.egg.scripts');
Route::post('/new', [Admin\Nests\NestController::class, 'store']);
Route::post('/import', [Admin\Nests\EggShareController::class, 'import'])->name('admin.nests.egg.import');
Route::post('/egg/new', [Admin\Nests\EggController::class, 'store']);
Route::post('/egg/{egg:id}/variables', [Admin\Nests\EggVariableController::class, 'store']);
Route::put('/egg/{egg:id}', [Admin\Nests\EggShareController::class, 'update']);
Route::patch('/view/{nest:id}', [Admin\Nests\NestController::class, 'update']);
Route::patch('/egg/{egg:id}', [Admin\Nests\EggController::class, 'update']);
Route::patch('/egg/{egg:id}/scripts', [Admin\Nests\EggScriptController::class, 'update']);
Route::patch('/egg/{egg:id}/variables/{variable:id}', [Admin\Nests\EggVariableController::class, 'update'])->name('admin.nests.egg.variables.edit');
Route::delete('/view/{nest:id}', [Admin\Nests\NestController::class, 'destroy']);
Route::delete('/egg/{egg:id}', [Admin\Nests\EggController::class, 'destroy']);
Route::delete('/egg/{egg:id}/variables/{variable:id}', [Admin\Nests\EggVariableController::class, 'destroy']);
});
/*
|--------------------------------------------------------------------------
| Blueprint Extensions
|--------------------------------------------------------------------------
|
| Endpoint: /admin/extensions
|
*/
Route::group(['prefix' => 'extensions'], function () {
Route::get('/', [Admin\ExtensionsController::class, 'index'])->name('admin.extensions');
});
Route::group(['prefix' => 'extensions/blueprint'], function () {
Route::get('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'index'])->name('admin.extensions.blueprint.index');
Route::patch('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'update']);
<?php
use Illuminate\Support\Facades\Route;
use Pterodactyl\Http\Controllers\Admin;
use Pterodactyl\Http\Middleware\Admin\Servers\ServerInstalled;
Route::get('/', [Admin\BaseController::class, 'index'])->name('admin.index');
/*
|--------------------------------------------------------------------------
| Location Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/api
|
*/
Route::group(['prefix' => 'api'], function () {
Route::get('/', [Admin\ApiController::class, 'index'])->name('admin.api.index');
Route::get('/new', [Admin\ApiController::class, 'create'])->name('admin.api.new');
Route::post('/new', [Admin\ApiController::class, 'store']);
Route::delete('/revoke/{identifier}', [Admin\ApiController::class, 'delete'])->name('admin.api.delete');
});
/*
|--------------------------------------------------------------------------
| Location Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/locations
|
*/
Route::group(['prefix' => 'locations'], function () {
Route::get('/', [Admin\LocationController::class, 'index'])->name('admin.locations');
Route::get('/view/{location:id}', [Admin\LocationController::class, 'view'])->name('admin.locations.view');
Route::post('/', [Admin\LocationController::class, 'create']);
Route::patch('/view/{location:id}', [Admin\LocationController::class, 'update']);
});
/*
|--------------------------------------------------------------------------
| Database Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/databases
|
*/
Route::group(['prefix' => 'databases'], function () {
Route::get('/', [Admin\DatabaseController::class, 'index'])->name('admin.databases');
Route::get('/view/{host:id}', [Admin\DatabaseController::class, 'view'])->name('admin.databases.view');
Route::post('/', [Admin\DatabaseController::class, 'create']);
Route::patch('/view/{host:id}', [Admin\DatabaseController::class, 'update']);
Route::delete('/view/{host:id}', [Admin\DatabaseController::class, 'delete']);
});
/*
|--------------------------------------------------------------------------
| Settings Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/settings
|
*/
Route::group(['prefix' => 'settings'], function () {
Route::get('/', [Admin\Settings\IndexController::class, 'index'])->name('admin.settings');
Route::get('/mail', [Admin\Settings\MailController::class, 'index'])->name('admin.settings.mail');
Route::get('/advanced', [Admin\Settings\AdvancedController::class, 'index'])->name('admin.settings.advanced');
Route::post('/mail/test', [Admin\Settings\MailController::class, 'test'])->name('admin.settings.mail.test');
Route::patch('/', [Admin\Settings\IndexController::class, 'update']);
Route::patch('/mail', [Admin\Settings\MailController::class, 'update']);
Route::patch('/advanced', [Admin\Settings\AdvancedController::class, 'update']);
});
/*
|--------------------------------------------------------------------------
| User Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/users
|
*/
Route::group(['prefix' => 'users'], function () {
Route::get('/', [Admin\UserController::class, 'index'])->name('admin.users');
Route::get('/accounts.json', [Admin\UserController::class, 'json'])->name('admin.users.json');
Route::get('/new', [Admin\UserController::class, 'create'])->name('admin.users.new');
Route::get('/view/{user:id}', [Admin\UserController::class, 'view'])->name('admin.users.view');
Route::post('/new', [Admin\UserController::class, 'store']);
Route::patch('/view/{user:id}', [Admin\UserController::class, 'update']);
Route::delete('/view/{user:id}', [Admin\UserController::class, 'delete']);
});
/*
|--------------------------------------------------------------------------
| Server Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/servers
|
*/
Route::group(['prefix' => 'servers'], function () {
Route::get('/', [Admin\Servers\ServerController::class, 'index'])->name('admin.servers');
Route::get('/new', [Admin\Servers\CreateServerController::class, 'index'])->name('admin.servers.new');
Route::get('/view/{server:id}', [Admin\Servers\ServerViewController::class, 'index'])->name('admin.servers.view');
Route::group(['middleware' => [ServerInstalled::class]], function () {
Route::get('/view/{server:id}/details', [Admin\Servers\ServerViewController::class, 'details'])->name('admin.servers.view.details');
Route::get('/view/{server:id}/build', [Admin\Servers\ServerViewController::class, 'build'])->name('admin.servers.view.build');
Route::get('/view/{server:id}/startup', [Admin\Servers\ServerViewController::class, 'startup'])->name('admin.servers.view.startup');
Route::get('/view/{server:id}/database', [Admin\Servers\ServerViewController::class, 'database'])->name('admin.servers.view.database');
Route::get('/view/{server:id}/mounts', [Admin\Servers\ServerViewController::class, 'mounts'])->name('admin.servers.view.mounts');
});
Route::get('/view/{server:id}/manage', [Admin\Servers\ServerViewController::class, 'manage'])->name('admin.servers.view.manage');
Route::get('/view/{server:id}/delete', [Admin\Servers\ServerViewController::class, 'delete'])->name('admin.servers.view.delete');
Route::post('/new', [Admin\Servers\CreateServerController::class, 'store']);
Route::post('/view/{server:id}/build', [Admin\ServersController::class, 'updateBuild']);
Route::post('/view/{server:id}/startup', [Admin\ServersController::class, 'saveStartup']);
Route::post('/view/{server:id}/database', [Admin\ServersController::class, 'newDatabase']);
Route::post('/view/{server:id}/mounts', [Admin\ServersController::class, 'addMount'])->name('admin.servers.view.mounts.store');
Route::post('/view/{server:id}/manage/toggle', [Admin\ServersController::class, 'toggleInstall'])->name('admin.servers.view.manage.toggle');
Route::post('/view/{server:id}/manage/suspension', [Admin\ServersController::class, 'manageSuspension'])->name('admin.servers.view.manage.suspension');
Route::post('/view/{server:id}/manage/reinstall', [Admin\ServersController::class, 'reinstallServer'])->name('admin.servers.view.manage.reinstall');
Route::post('/view/{server:id}/manage/transfer', [Admin\Servers\ServerTransferController::class, 'transfer'])->name('admin.servers.view.manage.transfer');
Route::post('/view/{server:id}/delete', [Admin\ServersController::class, 'delete']);
Route::patch('/view/{server:id}/details', [Admin\ServersController::class, 'setDetails']);
Route::patch('/view/{server:id}/database', [Admin\ServersController::class, 'resetDatabasePassword']);
Route::delete('/view/{server:id}/database/{database:id}/delete', [Admin\ServersController::class, 'deleteDatabase'])->name('admin.servers.view.database.delete');
Route::delete('/view/{server:id}/mounts/{mount:id}', [Admin\ServersController::class, 'deleteMount'])
->name('admin.servers.view.mounts.delete');
});
/*
|--------------------------------------------------------------------------
| Node Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/nodes
|
*/
Route::group(['prefix' => 'nodes'], function () {
Route::get('/', [Admin\Nodes\NodeController::class, 'index'])->name('admin.nodes');
Route::get('/new', [Admin\NodesController::class, 'create'])->name('admin.nodes.new');
Route::get('/view/{node:id}', [Admin\Nodes\NodeViewController::class, 'index'])->name('admin.nodes.view');
Route::get('/view/{node:id}/settings', [Admin\Nodes\NodeViewController::class, 'settings'])->name('admin.nodes.view.settings');
Route::get('/view/{node:id}/configuration', [Admin\Nodes\NodeViewController::class, 'configuration'])->name('admin.nodes.view.configuration');
Route::get('/view/{node:id}/allocation', [Admin\Nodes\NodeViewController::class, 'allocations'])->name('admin.nodes.view.allocation');
Route::get('/view/{node:id}/servers', [Admin\Nodes\NodeViewController::class, 'servers'])->name('admin.nodes.view.servers');
Route::get('/view/{node:id}/system-information', Admin\Nodes\SystemInformationController::class);
Route::post('/new', [Admin\NodesController::class, 'store']);
Route::post('/view/{node:id}/allocation', [Admin\NodesController::class, 'createAllocation']);
Route::post('/view/{node:id}/allocation/remove', [Admin\NodesController::class, 'allocationRemoveBlock'])->name('admin.nodes.view.allocation.removeBlock');
Route::post('/view/{node:id}/allocation/alias', [Admin\NodesController::class, 'allocationSetAlias'])->name('admin.nodes.view.allocation.setAlias');
Route::post('/view/{node:id}/settings/token', Admin\NodeAutoDeployController::class)->name('admin.nodes.view.configuration.token');
Route::patch('/view/{node:id}/settings', [Admin\NodesController::class, 'updateSettings']);
Route::delete('/view/{node:id}/delete', [Admin\NodesController::class, 'delete'])->name('admin.nodes.view.delete');
Route::delete('/view/{node:id}/allocation/remove/{allocation:id}', [Admin\NodesController::class, 'allocationRemoveSingle'])->name('admin.nodes.view.allocation.removeSingle');
Route::delete('/view/{node:id}/allocations', [Admin\NodesController::class, 'allocationRemoveMultiple'])->name('admin.nodes.view.allocation.removeMultiple');
});
/*
|--------------------------------------------------------------------------
| Mount Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/mounts
|
*/
Route::group(['prefix' => 'mounts'], function () {
Route::get('/', [Admin\MountController::class, 'index'])->name('admin.mounts');
Route::get('/view/{mount:id}', [Admin\MountController::class, 'view'])->name('admin.mounts.view');
Route::post('/', [Admin\MountController::class, 'create']);
Route::post('/{mount:id}/eggs', [Admin\MountController::class, 'addEggs'])->name('admin.mounts.eggs');
Route::post('/{mount:id}/nodes', [Admin\MountController::class, 'addNodes'])->name('admin.mounts.nodes');
Route::patch('/view/{mount:id}', [Admin\MountController::class, 'update']);
Route::delete('/{mount:id}/eggs/{egg_id}', [Admin\MountController::class, 'deleteEgg']);
Route::delete('/{mount:id}/nodes/{node_id}', [Admin\MountController::class, 'deleteNode']);
});
/*
|--------------------------------------------------------------------------
| Nest Controller Routes
|--------------------------------------------------------------------------
|
| Endpoint: /admin/nests
|
*/
Route::group(['prefix' => 'nests'], function () {
Route::get('/', [Admin\Nests\NestController::class, 'index'])->name('admin.nests');
Route::get('/new', [Admin\Nests\NestController::class, 'create'])->name('admin.nests.new');
Route::get('/view/{nest:id}', [Admin\Nests\NestController::class, 'view'])->name('admin.nests.view');
Route::get('/egg/new', [Admin\Nests\EggController::class, 'create'])->name('admin.nests.egg.new');
Route::get('/egg/{egg:id}', [Admin\Nests\EggController::class, 'view'])->name('admin.nests.egg.view');
Route::get('/egg/{egg:id}/export', [Admin\Nests\EggShareController::class, 'export'])->name('admin.nests.egg.export');
Route::get('/egg/{egg:id}/variables', [Admin\Nests\EggVariableController::class, 'view'])->name('admin.nests.egg.variables');
Route::get('/egg/{egg:id}/scripts', [Admin\Nests\EggScriptController::class, 'index'])->name('admin.nests.egg.scripts');
Route::post('/new', [Admin\Nests\NestController::class, 'store']);
Route::post('/import', [Admin\Nests\EggShareController::class, 'import'])->name('admin.nests.egg.import');
Route::post('/egg/new', [Admin\Nests\EggController::class, 'store']);
Route::post('/egg/{egg:id}/variables', [Admin\Nests\EggVariableController::class, 'store']);
Route::put('/egg/{egg:id}', [Admin\Nests\EggShareController::class, 'update']);
Route::patch('/view/{nest:id}', [Admin\Nests\NestController::class, 'update']);
Route::patch('/egg/{egg:id}', [Admin\Nests\EggController::class, 'update']);
Route::patch('/egg/{egg:id}/scripts', [Admin\Nests\EggScriptController::class, 'update']);
Route::patch('/egg/{egg:id}/variables/{variable:id}', [Admin\Nests\EggVariableController::class, 'update'])->name('admin.nests.egg.variables.edit');
Route::delete('/view/{nest:id}', [Admin\Nests\NestController::class, 'destroy']);
Route::delete('/egg/{egg:id}', [Admin\Nests\EggController::class, 'destroy']);
Route::delete('/egg/{egg:id}/variables/{variable:id}', [Admin\Nests\EggVariableController::class, 'destroy']);
});
/*
|--------------------------------------------------------------------------
| Blueprint Extensions
|--------------------------------------------------------------------------
|
| Endpoint: /admin/extensions
|
*/
Route::group(['prefix' => 'extensions'], function () {
Route::get('/', [Admin\ExtensionsController::class, 'index'])->name('admin.extensions');
});
Route::group(['prefix' => 'extensions/blueprint'], function () {
Route::get('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'index'])->name('admin.extensions.blueprint.index');
Route::patch('/', [Admin\Extensions\Blueprint\BlueprintExtensionController::class, 'update']);
});