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}
+