tadah-eleven/app/Http/Controllers/AdminController.php

228 lines
6.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Server;
use App\Models\GameToken;
use App\Models\InviteKey;
use App\Models\Item;
use App\Models\OwnedItems;
use App\Models\RenderQueue;
use Illuminate\Support\Facades\Http;
use Carbon\Carbon;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('admin');
}
public function index(Request $request) {
return view('admin.index');
}
public function truncategametokens(Request $request) {
GameToken::Truncate();
return redirect('/admin')->with('message', 'Cleared all Game Tokens from the database.');
}
public function truncateservers(Request $request) {
Server::Truncate();
return redirect('/admin')->with('message', 'Cleared all Servers from the database.');
}
public function invitekeys(Request $request) {
$invitekeys = InviteKey::query();
return view('admin.invitekeys')->with('invitekeys', $invitekeys->orderBy('updated_at', 'DESC')->paginate(10)->appends($request->all()));
}
public function createinvitekey(Request $request) {
return view('admin.createinvitekey');
}
public function generateinvitekey(Request $request) {
$request->validate([
'uses' => ['required', 'min:1', 'max:20', 'integer']
]);
$inviteKey = InviteKey::create([
'creator' => $request->user()->id,
'token' => 'TadahKey-' . Str::random(25),
'uses' => $request['uses']
]);
return redirect('/admin/createinvitekey')->with('success', 'Created invite key. Key: "' . $inviteKey->token . '"');
}
public function disableinvitekey(Request $request, $id) {
$invitekey = InviteKey::find($id);
if (!$invitekey) {
return abort(404);
}
$invitekey->uses = 0;
$invitekey->save();
return redirect('/admin/invitekeys')->with('message', 'Invite key ID: ' . $invitekey->id . ', Token: ' . $invitekey->token . ' disabled.');
}
public function ban(Request $request) {
return view('admin.ban');
}
public function banuser(Request $request) {
$request->validate([
'username' => ['required', 'min:3', 'max:50'],
'banreason' => ['required', 'max:2000'],
'unbandate' => ['required', 'date']
]);
$user = User::where('username', $request['username'])->first();
if (!$user) {
return redirect('/admin/ban')->with('error', 'That user does not exist. Name: ' . $request['username']);
}
if ($user->banned) {
return redirect('/admin/ban')->with('error', 'That user is already banned. Reason: ' . $user->ban_reason);
}
if ($request->user()->id == $user->id) {
return redirect('/admin/ban')->with('error', 'You\'re trying to ban yourself?');
}
$user->banned = true;
$user->ban_reason = $request['banreason'];
$user->banned_until = Carbon::parse($request['unbandate']);
$user->save();
return redirect('/admin/ban')->with('success', $user->username . ' has been banned until ' . $user->banned_until);
}
public function unban(Request $request) {
return view('admin.unban');
}
public function unbanuser(Request $request) {
$request->validate([
'username' => ['required', 'min:3', 'max:20']
]);
$user = User::where('username', $request['username'])->first();
if (!$user) {
return redirect('/admin/unban')->with('error', 'That user does not exist. Name: ' . $request['username']);
}
if (!$user->banned) {
return redirect('/admin/unban')->with('error', 'That user is not banned.');
}
if ($request->user()->id == $user->id) {
return redirect('/admin/unban')->with('error', 'but... but... but... you are not banned......');
}
$user->banned = false;
$user->ban_reason = null;
$user->banned_until = null;
$user->save();
return redirect('/admin/unban')->with('success', $user->username . ' has been unbanned.');
}
public function xmlitem(Request $request)
{
return view('admin.newxmlitem');
}
public function createxmlitem(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'max:100'],
'description' => ['string', 'max:2000'],
'price' => ['required', 'integer', 'min:0', 'max:999999'],
'xml' => ['required', 'string'],
'type' => ['required', 'string']
]);
$item = Item::create([
'name' => $request['name'],
'description' => $request['description'],
'creator' => $request->user()->id,
'thumbnail_url' => $request['thumbnailurl'],
'price' => $request['price'],
'type' => $request['type'],
'sales' => 0,
'onsale' => true,
'approved' => config('app.assets_approved_by_default')
]);
Storage::disk('public')->put('items/' . $item->id, $request['xml']);
if ($item->type == "Hat" || $item->type == "Model" || $item->type == "Gear") {
RenderQueue::create([
'type' => 'xml',
'target_id' => $item->id
]);
}
if ($item->type == "Package") {
RenderQueue::create([
'type' => 'clothing',
'target_id' => $item->id
]);
}
OwnedItems::create([
'user_id' => $request->user()->id,
'item_id' => $item->id,
'wearing' => false
]);
return redirect(route('catalog.item', $item->id))->with('message', 'XML asset successfully created.');
}
public function robloxitemdata(Request $request, $id)
{
$response = Http::asForm()->get('https://api.roblox.com/marketplace/productinfo', [
"assetId" => $id
]);
return $response;
}
public function robloxxmldata(Request $request, $id, $version)
{
$response = Http::get('https://assetdelivery.roblox.com/v1/asset?id=' . intval($id) . "&version=" . intval($version));
return $response;
}
public function regenalluserthumbs(Request $request)
{
if (!$request->user()->id == 1) {
abort(404);
}
$users = User::all();
foreach ($users as $user) {
RenderQueue::create([
"type" => "user",
"target_id" => $user->id
]);
}
return "OK";
}
}