159 lines
5.2 KiB
PHP
159 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Str;
|
|
use App\Models\Server;
|
|
use App\Models\GameToken;
|
|
use App\Models\User;
|
|
use App\Models\BodyColors;
|
|
use App\Models\OwnedItems;
|
|
use App\Models\Item;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\Response;
|
|
|
|
class ClientController extends Controller
|
|
{
|
|
public function generate(Request $request, $serverId)
|
|
{
|
|
if (Server::find($serverId)) {
|
|
$tokenString = Str::random(20);
|
|
|
|
$token = new GameToken;
|
|
$token->user_id = $request->user()->id;
|
|
$token->server_id = $serverId;
|
|
$token->token = $tokenString;
|
|
$token->save();
|
|
|
|
return $tokenString;
|
|
} else {
|
|
return abort(404);
|
|
}
|
|
}
|
|
|
|
public function join(Request $request, $requestToken)
|
|
{
|
|
$token = GameToken::where('token', $requestToken)->first();
|
|
|
|
if (!$token) {
|
|
return 'game:SetMessage("Invalid join token. If this error persists, contact us.")';
|
|
}
|
|
|
|
return view('client.join')->with('token', $token);
|
|
}
|
|
|
|
public function host(Request $request, $secret)
|
|
{
|
|
$server = Server::where('secret', $secret)->first();
|
|
|
|
if (!$server) {
|
|
return 'print("Invalid server.")';
|
|
}
|
|
|
|
return view('client.host')->with('server', $server);
|
|
}
|
|
|
|
public function admin(Request $request, $secret)
|
|
{
|
|
$server = Server::where('secret', $secret)->first();
|
|
|
|
if (!$server) {
|
|
return 'print("Invalid server.")';
|
|
}
|
|
|
|
$admins = User::where('admin', true)->get();
|
|
|
|
return view('client.admin')->with(['server' => $server, 'admins' => $admins]);
|
|
}
|
|
|
|
public function bodycolors(Request $request, $id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
$bodycolors = BodyColors::where('user_id', $user->id)->firstOrFail();
|
|
|
|
return view('users.bodycolors')->with('bodycolors', $bodycolors);
|
|
}
|
|
|
|
public function charapp(Request $request, $id)
|
|
{
|
|
$user = User::findOrFail($id);
|
|
|
|
$appearance = array();
|
|
$appearance[] = url('/users/' . $user->id . '/bodycolors');
|
|
|
|
$wearingItems = OwnedItems::where(['user_id' => $user->id, 'wearing' => true])->get();
|
|
|
|
foreach ($wearingItems as $wearingItem) {
|
|
$item = Item::find($wearingItem->item_id);
|
|
|
|
if ($item->approved) {
|
|
if ($item->isXmlAsset()) {
|
|
$appearance[] = url('/asset?id=' . $item->id);
|
|
} else {
|
|
$appearance[] = url('/xmlasset?id=' . $item->id);
|
|
}
|
|
}
|
|
}
|
|
|
|
return join(';', $appearance);
|
|
}
|
|
|
|
public function ping(Request $request, $secret)
|
|
{
|
|
$server = Server::where('secret', $secret)->first();
|
|
|
|
if (!$server) {
|
|
return abort(404);
|
|
}
|
|
|
|
Cache::put('server_online' . $server->id, true, Carbon::now()->addMinutes(1));
|
|
|
|
return 'OK';
|
|
}
|
|
|
|
public function getuserthumbnail(Request $request)
|
|
{
|
|
$user = User::findOrFail($request->userId);
|
|
|
|
$path = 'items/asset-error.png'; // default image (not found)
|
|
if (Storage::disk('public')->exists('users/user_' . $user->id . '.png')) {
|
|
$path = $user->banned ?
|
|
'items/asset-notapproved.png' : // user thumbnail if they're not banned
|
|
('users/user_' . $user->id . '.png'); // otherwise not approved if they're banned
|
|
}
|
|
|
|
$response = Response::make(Storage::disk('public')
|
|
->get($path, 200))
|
|
->header('Content-Type', 'image/png');
|
|
return $response;
|
|
}
|
|
|
|
public function signscript(Request $request)
|
|
{
|
|
if (!$request->script) {
|
|
abort(400);
|
|
}
|
|
|
|
if (!$request->version) {
|
|
abort(400);
|
|
}
|
|
|
|
$signature = "";
|
|
openssl_sign("\r\n" . $request->script, $signature, "-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCz+CJqGw2KhlX4fodgGk93S3jekukBqjXoUARhD5UEFZnjWQxLe/oRNQacHNnsvRlfI0r2Z8IrFiHUA+L7jdVZJG4vdk620OCGUy1xVbdDpV/Ja/4mF7HUC+2n+OMhVunAVX4/1rBWSRyCAl2PJ6ysgkY9DHWtZpXpBLrsdMgsrQIDAQABAoGAYIenbeI00Shc1HyJgDKcjRAeNMP31rzFTWYd8zG4bAhqElehEJve9XvLn9CZ0zFaen0jqCbfLt0gJ+gtx1+8Hr1T9WIfFvvv2MoUN+p5s0r/8DRUpzi2Yv6SfTeJNubO0XctJ4hoIOsLGt4Hik6pmrRhn61bCdav6vNbdVot9MECQQDnUNAx6w7hPRInJh7960yNWiR0HjIFgGtB25RYq4vflshxcVEjPtfkXDNDGzw3xGTGZFXTGQynmUtYR3vik/WPAkEAxyyd6XgY/8kOYCLOcu9JrJCS/iG0WjiqPSep+8HKe9OqXBQqjZNzTQJzCR3ogcPbYfQq7lwcA6n9UJWiSQD0AwJAX2dPVydRrchYclkgsy2XFz20h0fk7av3kOQVnTSzrfYsmc1Y36aNuJvmcKkM/xs7TTAYzcYpF/77ul9RUzQfNQJACUBFRWbSom7QQB7dv/DlVyKP8UXXfqlLHvQMrSjfIsk+DHDTWSgUHuuSNEYzWnOiaPZSWCfnFTR8E5Yfp4xnyQJBAIr5UxtuUY3LaztdQb4m9xwl9dX6E+tUXUu+xmwWbu99VSWfWJ7ppja6gracYqwwf3vlnpS5591Wi6jhrCiwtoo=\n-----END RSA PRIVATE KEY-----", OPENSSL_ALGO_SHA1);
|
|
|
|
$base64signature = base64_encode($signature);
|
|
|
|
$signedscript = "";
|
|
if ($request->version == "new") {
|
|
$signedscript = "--rbxsig%" . $base64signature . "%\r\n" . $request->script;
|
|
} else {
|
|
$signedscript = "%" . $base64signature . "%\r\n" . $request->script;
|
|
}
|
|
|
|
return $signedscript;
|
|
}
|
|
}
|