Merge branch 'development' into settings_rewrite

This commit is contained in:
IceToast 2022-01-23 15:00:23 +01:00 committed by GitHub
commit 9b797cf779
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 176 additions and 16 deletions

View file

@ -270,7 +270,7 @@ class PaymentController extends Controller
],
'mode' => 'payment',
"payment_method_types" => str_getcsv(Settings::getValueByKey("SETTINGS::PAYMENTS:STRIPE:METHODS")),
"payment_method_types" => str_getcsv(config("SETTINGS::PAYMENTS:STRIPE:METHODS")),
'success_url' => route('payment.StripeSuccess', ['product' => $creditProduct->id]) . '&session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => route('payment.Cancel'),
]);

View file

@ -88,10 +88,25 @@ class UserController extends Controller
"role" => ['sometimes', Rule::in(['admin', 'mod', 'client', 'member'])],
]);
$user->update($request->all());
event(new UserUpdateCreditsEvent($user));
//Update Users Password on Pterodactyl
//Username,Mail,First and Lastname are required aswell
$response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [
"username" => $request->name,
"first_name" => $request->name,
"last_name" => $request->name,
"email" => $request->email,
]);
if ($response->failed()) {
throw ValidationException::withMessages([
'pterodactyl_error_message' => $response->toException()->getMessage(),
'pterodactyl_error_status' => $response->toException()->getCode()
]);
}
$user->update($request->all());
return $user;
}
@ -166,6 +181,53 @@ class UserController extends Controller
return $user;
}
/**
* Suspends the user
*
* @param Request $request
* @param int $id
* @return bool
* @throws ValidationException
*/
public function suspend(Request $request, int $id)
{
$discordUser = DiscordUser::find($id);
$user = $discordUser ? $discordUser->user : User::findOrFail($id);
if ($user->isSuspended()) {
throw ValidationException::withMessages([
'error' => 'The user is already suspended',
]);
}
$user->suspend();
return $user;
}
/**
* Unsuspend the user
*
* @param Request $request
* @param int $id
* @return bool
* @throws ValidationException
*/
public function unsuspend(Request $request, int $id)
{
$discordUser = DiscordUser::find($id);
$user = $discordUser ? $discordUser->user : User::findOrFail($id);
if (!$user->isSuspended()) {
throw ValidationException::withMessages([
'error' => "You cannot unsuspend an User who is not suspended."
]);
}
$user->unSuspend();
return $user;
}
/**
* @throws ValidationException
*/

View file

@ -12,6 +12,7 @@ use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class RegisterController extends Controller
{
@ -68,9 +69,9 @@ class RegisterController extends Controller
$data['ip'] = session()->get('ip') ?? request()->ip();
if (User::where('ip', '=', request()->ip())->exists()) session()->put('ip', request()->ip());
$validationRules['ip'] = ['unique:users'];
return Validator::make($data, $validationRules, [
'ip.unique' => "You have already made an account! Please contact support if you think this is incorrect."
]);
}
@ -106,13 +107,17 @@ class RegisterController extends Controller
if ($response->failed()) {
$user->delete();
return $user;
throw ValidationException::withMessages([
'ptero_registration_error' => [__('Account already exists on Pterodactyl. Please contact the Support!')],
]);
}
$user->update([
'pterodactyl_id' => $response->json()['attributes']['id']
]);
return $user;
}
}

View file

@ -2,12 +2,14 @@
namespace App\Http\Controllers;
use App\Models\Settings;
use App\Classes\Pterodactyl;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class ProfileController extends Controller
{
@ -50,10 +52,27 @@ class ProfileController extends Controller
'new_password_confirmation' => 'required|same:new_password'
]);
//Update Users Password on Pterodactyl
//Username,Mail,First and Lastname are required aswell
$response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [
"password" => $request->input('new_password'),
"username" => $request->input('name'),
"first_name" => $request->input('name'),
"last_name" => $request->input('name'),
"email" => $request->input('email'),
]);
if ($response->failed()) {
throw ValidationException::withMessages([
'pterodactyl_error_message' => $response->toException()->getMessage(),
'pterodactyl_error_status' => $response->toException()->getCode()
]);
}
//update password
$user->update([
'password' => Hash::make($request->input('new_password')),
]);
}
//validate request
@ -77,11 +96,27 @@ class ProfileController extends Controller
]);
}
//update name and email on Pterodactyl
$response = Pterodactyl::client()->patch('/application/users/'.$user->pterodactyl_id, [
"username" => $request->input('name'),
"first_name" => $request->input('name'),
"last_name" => $request->input('name'),
"email" => $request->input('email'),
]);
if ($response->failed()) {
throw ValidationException::withMessages([
'pterodactyl_error_message' => $response->toException()->getMessage(),
'pterodactyl_error_status' => $response->toException()->getCode()
]);
}
//update name and email
$user->update([
'name' => $request->input('name'),
'email' => $request->input('email'),
]);
$user->sendEmailVerificationNotification();
return redirect()->route('profile.index')->with('success', __('Profile updated'));
}

View file

@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCreditProductsTable extends Migration
class CreatePaypalProductsTable extends Migration
{
/**
* Run the migrations.
@ -13,13 +13,13 @@ class CreateCreditProductsTable extends Migration
*/
public function up()
{
Schema::create('credit_products', function (Blueprint $table) {
Schema::create('paypal_products', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('type');
$table->decimal('price')->default(0);
$table->unsignedInteger('quantity');
$table->string('description');
$table->string('currency_code' , 3);
$table->string('currency_code', 3);
$table->boolean('disabled')->default(true);
$table->timestamps();
});
@ -32,6 +32,6 @@ class CreateCreditProductsTable extends Migration
*/
public function down()
{
Schema::dropIfExists('credit_products');
Schema::dropIfExists('paypal_products');
}
}

View file

@ -23,6 +23,13 @@
<small><strong>{{ $message }}</strong></small>
</span>
@enderror
@if( $errors->has('ptero_registration_error') )
@foreach( $errors->get('ptero_registration_error') as $err )
<span class="text-danger" role="alert">
<small><strong>{{ $err }}</strong></small>
</span>
@endforeach
@endif
@csrf
<div class="form-group">

View file

@ -36,6 +36,24 @@
</head>
<body class="sidebar-mini layout-fixed dark-mode" style="height: auto;">
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.14.1/dist/sweetalert2.all.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.10.24/datatables.min.js"></script>
<!-- Summernote -->
<script src="{{ asset('plugins/summernote/summernote-bs4.min.js') }}"></script>
<!-- select2 -->
<script src="{{ asset('plugins/select2/js/select2.min.js') }}"></script>
<!-- Moment.js -->
<script src="{{ asset('plugins/moment/moment.min.js') }}"></script>
<!-- Datetimepicker -->
<script src="{{ asset('plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js') }}"></script>
<!-- Select2 -->
<script src={{ asset('plugins/select2/js/select2.min.js') }}></script>
<div class="wrapper">
<!-- Navbar -->
<nav class="main-header sticky-top navbar navbar-expand navbar-dark navbar-light">
@ -425,7 +443,6 @@
html: '{{ Session::get('error') }}',
})
@endif
@if (Session::has('success'))
Swal.fire({
icon: 'success',

View file

@ -36,14 +36,14 @@
href="{{ route('verification.send') }}">{{ __('Click here to resend verification email') }}</a>
<br>
{{ __('Please contact support If you didnt receive your verification email.') }}
</div>
@endif
@if (is_null(Auth::user()->discordUser) && strtolower($force_discord_verification) == 'true')
@if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
<div class="alert alert-warning p-2 m-2">
<h5><i
class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
</h5>
{{ __('You have not yet verified your discord account') }}
<a class="text-primary"
@ -52,8 +52,7 @@
</div>
@else
<div class="alert alert-danger p-2 m-2">
<h5><i
class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
<h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
</h5>
{{ __('Due to system settings you are required to verify your discord account!') }} <br>
{{ __('It looks like this hasnt been set-up correctly! Please contact support.') }}'
@ -117,7 +116,21 @@
<div class="col">
<div class="row">
<div class="col">
<div class="form-group"><label>{{ __('Name') }}</label> <input
@if( $errors->has('pterodactyl_error_message') )
@foreach( $errors->get('pterodactyl_error_message') as $err )
<span class="text-danger" role="alert">
<small><strong>{{ $err }}</strong></small>
</span>
@endforeach
@endif
@if( $errors->has('pterodactyl_error_status') )
@foreach( $errors->get('pterodactyl_error_status') as $err )
<span class="text-danger" role="alert">
<small><strong>{{ $err }}</strong></small>
</span>
@endforeach
@endif
<div class="form-group"><label>{{__('Name')}}</label> <input
class="form-control @error('name') is-invalid @enderror"
type="text" name="name" placeholder="{{ $user->name }}"
value="{{ $user->name }}">

View file

@ -81,4 +81,23 @@
</section>
<!-- END CONTENT -->
<script>
const getUrlParameter = (param) => {
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
return urlParams.get(param);
}
const voucherCode = getUrlParameter('voucher');
//if voucherCode not empty, open the modal and fill the input
if (voucherCode) {
$(function() {
$('#redeemVoucherModal').modal('show');
$('#redeemVoucherCode').val(voucherCode);
});
}
</script>
@endsection

View file

@ -20,6 +20,8 @@ use Illuminate\Support\Facades\Route;
Route::middleware('api.token')->group(function () {
Route::patch('/users/{user}/increment', [UserController::class, 'increment']);
Route::patch('/users/{user}/decrement', [UserController::class, 'decrement']);
Route::patch('/users/{user}/suspend', [UserController::class, 'suspend']);
Route::patch('/users/{user}/unsuspend', [UserController::class, 'unsuspend']);
Route::resource('users', UserController::class)->except(['create']);
Route::patch('/servers/{server}/suspend', [ServerController::class, 'suspend']);