diff --git a/web/app/Helpers/ErrorHelper.php b/web/app/Helpers/ErrorHelper.php new file mode 100644 index 0000000..22d365a --- /dev/null +++ b/web/app/Helpers/ErrorHelper.php @@ -0,0 +1,21 @@ + [$data]], 400); + } +} diff --git a/web/app/Helpers/GridHelper.php b/web/app/Helpers/GridHelper.php index 106f78c..d83ff93 100644 --- a/web/app/Helpers/GridHelper.php +++ b/web/app/Helpers/GridHelper.php @@ -2,31 +2,32 @@ /* Graphictoria 2022 - JSON Pretty Printer + Grid helper */ namespace App\Helpers; -use App\Helpers\COMHelper; +use Illuminate\Http\Request; +use App\Helpers\COMHelper; use App\Models\WebsiteConfiguration; class GridHelper { - public static function isIpWhitelisted($request) { + public static function isIpWhitelisted(Request $request) { $ip = $request->ip(); $whitelistedIps = explode(';', WebsiteConfiguration::where('name', 'WhitelistedIPs')->first()->value); return in_array($ip, $whitelistedIps); } - public static function isAccessKeyValid($request) { + public static function isAccessKeyValid(Request $request) { $accessKey = WebsiteConfiguration::where('name', 'ComputeServiceAccessKey')->first()->value; return ($request->header('AccessKey') == $accessKey); } - public static function hasAllAccess($request) { + public static function hasAllAccess(Request $request) { if(COMHelper::isCOM()) return true; if(GridHelper::isIpWhitelisted($request) && GridHelper::isAccessKeyValid($request)) return true; diff --git a/web/app/Http/Controllers/AppSettings.php b/web/app/Http/Controllers/Apis/AppSettings.php similarity index 87% rename from web/app/Http/Controllers/AppSettings.php rename to web/app/Http/Controllers/Apis/AppSettings.php index 87c6225..0baed94 100644 --- a/web/app/Http/Controllers/AppSettings.php +++ b/web/app/Http/Controllers/Apis/AppSettings.php @@ -1,6 +1,6 @@ 'Flag' ]; - /** - * Returns a JSON array with the error code and message. - * - * @return Response - */ - private function error($data, $code = 400) - { - return response(['errors' => [$data]], 400); - } - /** * Returns a JSON array of settings for the specified bucket. * @@ -66,7 +57,7 @@ class AppSettings extends Controller $bucketIds = array_merge($bucketIds, json_decode($primaryBucket->inheritedGroupIds)); if($primaryBucket->protected == 1 && !GridHelper::hasAllAccess($request)) { - return $this->error([ + return ErrorHelper::error([ 'code' => 2, 'message' => 'You do not have access to this bucket.' ], 401); @@ -98,7 +89,7 @@ class AppSettings extends Controller return JSON::EncodeResponse($flags); } else { - return $this->error([ + return ErrorHelper::error([ 'code' => 1, 'message' => 'The requested bucket does not exist.' ]); diff --git a/web/app/Http/Controllers/Apis/VersionCompatibility.php b/web/app/Http/Controllers/Apis/VersionCompatibility.php new file mode 100644 index 0000000..5f86d1e --- /dev/null +++ b/web/app/Http/Controllers/Apis/VersionCompatibility.php @@ -0,0 +1,43 @@ + 1, + 'message' => 'You do not have access to this resource.' + ], 401); + } + + return Response()->json([ + 'data' => [ + explode(';', WebsiteConfiguration::where('name', 'VersionCompatibilityVersions')->first()->value) + ] + ]); + } + + function getMD5Hashes(Request $request) + { + if(!GridHelper::hasAllAccess($request)) { + return ErrorHelper::error([ + 'code' => 1, + 'message' => 'You do not have access to this resource.' + ], 401); + } + + return Response()->json([ + 'data' => [ + explode(';', WebsiteConfiguration::where('name', 'VersionCompatibilityHashes')->first()->value) + ] + ]); + } +} diff --git a/web/app/Http/Controllers/GamesController.php b/web/app/Http/Controllers/GamesController.php index b257c68..1197a49 100644 --- a/web/app/Http/Controllers/GamesController.php +++ b/web/app/Http/Controllers/GamesController.php @@ -25,4 +25,13 @@ class GamesController extends Controller return response()->json(['available' => $status->operational]) ->header('Content-Type', 'application/json'); } + + public function validatePlaceJoin() + { + // todo: move to backend and make this actually return if the player is validated + // this is only here for testing + + return response('true', null) + ->header('Content-Type', 'text/plain'); + } } diff --git a/web/app/Http/Controllers/GridTest.php b/web/app/Http/Controllers/GridTest.php index db2628a..629e7e5 100644 --- a/web/app/Http/Controllers/GridTest.php +++ b/web/app/Http/Controllers/GridTest.php @@ -17,11 +17,10 @@ class GridTest extends Controller game:GetService("ContentProvider"):SetThreadPool(16) game:GetService("Stats"):SetReportUrl("http://api.gtoria.net/teststat") - local p = game:GetService("Players"):CreateLocalPlayer(0) - p.CharacterAppearance = "http://api.gtoria.net/user/getCharacter.php?key=D869593BF742A42F79915993EF1DB&mode=ch&sid=1&uid=15" - p:LoadCharacter(false) + game:GetService("ContentProvider"):SetBaseUrl("http://www.roblox.com/") + game:LoadWorld(23173663) - return game:GetService("ThumbnailGenerator"):Click("PNG", 2048, 2048, true, false) + return game:GetService("ThumbnailGenerator"):Click("PNG", 1920, 1080, false, false) TestScript; $test = new SoapService('http://127.0.0.1:64989'); diff --git a/web/app/Http/Controllers/MaintenanceController.php b/web/app/Http/Controllers/MaintenanceController.php index e2efe8a..fd2929e 100644 --- a/web/app/Http/Controllers/MaintenanceController.php +++ b/web/app/Http/Controllers/MaintenanceController.php @@ -2,12 +2,12 @@ namespace App\Http\Controllers; -use App\Models\WebsiteConfiguration; - use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Symfony\Component\HttpFoundation\Cookie; +use App\Models\WebsiteConfiguration; + class MaintenanceController extends Controller { /** diff --git a/web/app/Providers/RouteServiceProvider.php b/web/app/Providers/RouteServiceProvider.php index a0e24fe..80d9a79 100644 --- a/web/app/Providers/RouteServiceProvider.php +++ b/web/app/Providers/RouteServiceProvider.php @@ -50,6 +50,11 @@ class RouteServiceProvider extends ServiceProvider ->namespace($this->namespace) ->group(base_path('routes/appsettings.php')); + Route::domain('versioncompatibility.api.' . env('APP_URL')) + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/versioncompatibility.php')); + Route::domain('impulse.' . env('APP_URL')) ->middleware('admin') ->namespace($this->namespace) diff --git a/web/database/migrations/2021_12_15_224204_create_fflags_table.php b/web/database/migrations/2021_12_15_224204_create_fflags_table.php index d460fae..2913cde 100644 --- a/web/database/migrations/2021_12_15_224204_create_fflags_table.php +++ b/web/database/migrations/2021_12_15_224204_create_fflags_table.php @@ -23,7 +23,7 @@ class CreateFflagsTable extends Migration Schema::create('fflags', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->string('value'); + $table->longText('value'); $table->enum('dataType', ['Log', 'Int', 'String', 'Boolean']); $table->enum('type', ['Unscoped', 'Fast', 'Dynamic', 'Synchronised']); $table->bigInteger('bucketId'); diff --git a/web/database/seeders/WebConfigurationSeeder.php b/web/database/seeders/WebConfigurationSeeder.php index e70fa28..80f7adc 100644 --- a/web/database/seeders/WebConfigurationSeeder.php +++ b/web/database/seeders/WebConfigurationSeeder.php @@ -33,5 +33,15 @@ class WebConfigurationSeeder extends Seeder 'name' => 'WhitelistedIPs', 'value' => '127.0.0.1' ]); + + WebsiteConfiguration::create([ + 'name' => 'VersionCompatibilityVersions', + 'value' => '0.1.0pcplayer' // version1;version2;version3 + ]); + + WebsiteConfiguration::create([ + 'name' => 'VersionCompatibilityHashes', + 'value' => 'debughash' // hash1;hash2;hash3 + ]); } } diff --git a/web/public/images/symbols/token.svg b/web/public/images/symbols/token.svg new file mode 100644 index 0000000..7228c27 --- /dev/null +++ b/web/public/images/symbols/token.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/web/resources/js/components/Navbar.js b/web/resources/js/components/Navbar.js index 464b5f5..e9cad6f 100644 --- a/web/resources/js/components/Navbar.js +++ b/web/resources/js/components/Navbar.js @@ -51,8 +51,11 @@ const Navbar = (props) => { <> {props.user? -
-
Bank: ${props.user.bank}
+
+

+ + ${props.user.bank} +

    • diff --git a/web/resources/js/layouts/App.js b/web/resources/js/layouts/App.js index e8edc24..b2e34b3 100644 --- a/web/resources/js/layouts/App.js +++ b/web/resources/js/layouts/App.js @@ -104,7 +104,6 @@ const App = () => { } const authMiddleware = (to, from, next) => { - console.log(user); if (to.meta.auth) { if (user) next(); diff --git a/web/resources/js/pages/Auth/Login.js b/web/resources/js/pages/Auth/Login.js index 9edc6ca..343d284 100644 --- a/web/resources/js/pages/Auth/Login.js +++ b/web/resources/js/pages/Auth/Login.js @@ -43,7 +43,7 @@ const LoginForm = (props) => {
      { e.preventDefault(); SubmitLogin(new FormData(e.target)); - }} class="fs"> + }} className="fs"> input == `username`)? `is-invalid` : ``)}`} placeholder="Username" name="username"/> input == `password`)? `is-invalid` : ``)}`} placeholder="Password" name="password"/>
      diff --git a/web/routes/appsettings.php b/web/routes/appsettings.php index a33712a..8463f0f 100644 --- a/web/routes/appsettings.php +++ b/web/routes/appsettings.php @@ -2,7 +2,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; -use App\Http\Controllers\AppSettings; +use App\Http\Controllers\Apis\AppSettings; /* |-------------------------------------------------------------------------- diff --git a/web/routes/versioncompatibility.php b/web/routes/versioncompatibility.php new file mode 100644 index 0000000..370eac0 --- /dev/null +++ b/web/routes/versioncompatibility.php @@ -0,0 +1,35 @@ +header('Cache-Control', 'private') + ->header('Content-Type', 'application/json; charset=utf-8'); +}); \ No newline at end of file diff --git a/web/routes/web.php b/web/routes/web.php index 7e9492b..852bacd 100644 --- a/web/routes/web.php +++ b/web/routes/web.php @@ -1,6 +1,7 @@ middleware('auth');