Beginning of conversion to web-rendered pages.

This commit is contained in:
Graphictoria 2022-04-15 15:16:25 -04:00
parent 5f3fbdc0ba
commit ae84b4036f
79 changed files with 1147 additions and 2012 deletions

BIN
etc/art/token.psd Normal file

Binary file not shown.

BIN
etc/art/troll.pdn Normal file

Binary file not shown.

20
etc/cert/RootCA.crt Normal file
View File

@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDRzCCAi+gAwIBAgIURJTrNof9lM8yv+OAHaWFPOgomlMwDQYJKoZIhvcNAQEL
BQAwMzELMAkGA1UEBhMCVVMxJDAiBgNVBAMMG0dyYXBoaWN0b3JpYS1EZXZlbG9w
bWVudC1DQTAeFw0yMjA0MTUwMjMzMzNaFw0yNTAyMDIwMjMzMzNaMDMxCzAJBgNV
BAYTAlVTMSQwIgYDVQQDDBtHcmFwaGljdG9yaWEtRGV2ZWxvcG1lbnQtQ0EwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjARnva6VgZ5jGWsHSMgR03GTv
rKXq0YGIkfsliFFkVMXpH7B2orU5Zt9I23vJ7NX5bsm8977NWCqt80lC0wt4Ld58
0JYjFkM/qgzDip6dUDTcQWdS81kq4zg0yMIiMaEddGBRmhJOsngX3iDNAypZ3XJQ
qZZ+ENTtDIh9+pqrt4+QFDMKTLNrcANdFlxfkriVhwQX/JmktGKIxCyG+4hSvuw4
pCvsVPso0+7lGr9GNIzEXBD2Jvwtr2buXYg4yg0wx92PMeaSLU0OKKS7BfEPdikm
rKanuNzXNcAPQHplLeXzfgO1m6Hi3thNIaDmrqGcnQ6vfKv2j6LaZaWp649lAgMB
AAGjUzBRMB0GA1UdDgQWBBTH+uxCWs1TcDYNFptpXWMESc+MejAfBgNVHSMEGDAW
gBTH+uxCWs1TcDYNFptpXWMESc+MejAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
DQEBCwUAA4IBAQB6nHMSv+3rfO50t/e4pc613nIYbDv9/PnPouFwt8AiYk5ifpIa
WUZmupwY6Yl2JynzSHFFpe1afimd039LblUetlfDbv2Z+H4IBJ8lgCZE8GIskKNN
wpWF9Ovog0995fubUQdG9QU0JeCrlLDVlaDYhz1ImjP3KdOSZHZRWDdrzicwH6nQ
GZe0CgSML4S/YMPX/1BiEawpugcnAbDW3ZPh0md9FlsNt/rdL1PZiv0y9PM9cd8k
mqfVgPD7OAwihrjGVzFtmKzis0PbNpaydmpzII1j8OaHc8lLMSpIuGykbrfocD3O
p7zJ6bVvpr9PohKjIbslj2gkrMb7gq9EH4Tv
-----END CERTIFICATE-----

28
etc/cert/RootCA.key Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjARnva6VgZ5jG
WsHSMgR03GTvrKXq0YGIkfsliFFkVMXpH7B2orU5Zt9I23vJ7NX5bsm8977NWCqt
80lC0wt4Ld580JYjFkM/qgzDip6dUDTcQWdS81kq4zg0yMIiMaEddGBRmhJOsngX
3iDNAypZ3XJQqZZ+ENTtDIh9+pqrt4+QFDMKTLNrcANdFlxfkriVhwQX/JmktGKI
xCyG+4hSvuw4pCvsVPso0+7lGr9GNIzEXBD2Jvwtr2buXYg4yg0wx92PMeaSLU0O
KKS7BfEPdikmrKanuNzXNcAPQHplLeXzfgO1m6Hi3thNIaDmrqGcnQ6vfKv2j6La
ZaWp649lAgMBAAECggEADgCbd31uBqbHkSx9L18EEnzXP957Hz2RjMeLhTkdUsrU
eHb0K/DEtBJh9mqCSwGJDQUHF/BJR+79tZUrUy35c4CvNtYdO5TfQIINWCPZhcZ8
z/nfVBka7Qv5SVGAmbrdLgBQANqFHZUHq3c1pp7Rvcf/2K2Ew74S6G0V8Yp8TGlU
RrRtM5ovdePPFTx//V5DhktofjSlPNOO4g4oaXdR9DOlD9iTp9/WbgfE17Qc4Vz7
4Xc5qXn/q6MSPkejkMzTtTGpfCRO4rWrs2fJwj8CEuHIKL1cJw88rv1i2MT95buR
XEficvcD5jwFXoDAnyaMwqKmBr3inlmTnqlHkr9OiQKBgQC4FDNYoUNvuq4ZKrDK
BYAR9tLaNKfiwIDYn1trB2obL9WaojmWDFJM89IZlWqDePPCyVw+eItLi0/ZBvDl
3UjTa7ET4BEwbdSYAVlJlI5viAnyu57tU3aMg1QvnP0wZh7nBRBRlk4rWBDUs7X9
vo8YXXVejDyJh6LQ5uM3FWIKvQKBgQDisP4blS8YSIh76YAPhX/HZEknO+q1cAQ2
/5wBTWDddt9NftUa7i/YA4vquu0ssc4babteXe3aPFJN8SkutjR6jmFArB/nMeIp
9+G1TGEBUtzhdnpOakLweOSJ7OBA1bD89c6CE2nA1VC+TyWJFSFqedpjcQwHdRD+
uyOn+hg1yQKBgADr2PXwmK3OeWCW3huku2dbnOKKsOxpmjt7ULHQb6+DJcaIWVFu
7lqEPeDy5n2R9WZcK6IEaG4QXG3xovMDkIG+YDyBOpTLd+zq1M+RdsUIIUSdu8Xk
TQuW/KzgVEQRvsXZOKOv5ORCpJLr81U5xu2QSi4W9Zaany38edakvMDhAoGAcn7s
yWevMren39YO7UgDQuU/IYbcxClAp7qww+OeMh1RKeYOopx9I8Ce0b75/eIMdMIR
dddBREHFXEKbB1HV7bSuICkPsAj87y+ZG6XpNO7ySxo5KhP3nVeiLpuqpHSKASnx
1LcTaecT8hstnTBEAXBsQl+dsMKLA+3nU3c49SkCgYApyJ8XCv1uZDInFimJo3Hq
MXLkhxkzj9PJBWqps9ps6/QjthHGFYT9WMdcF2iNSTxoS5p1/O7wofQ3EHDiNlaz
uhOKhYeA01l52vZmgm8bCInLa9fcAe0oGnfyQI7oyBHq0J3FoVTmpG92GC7e3/cc
pPVAfmA8k77J9R/XWJylkA==
-----END PRIVATE KEY-----

20
etc/cert/RootCA.pem Normal file
View File

@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDRzCCAi+gAwIBAgIURJTrNof9lM8yv+OAHaWFPOgomlMwDQYJKoZIhvcNAQEL
BQAwMzELMAkGA1UEBhMCVVMxJDAiBgNVBAMMG0dyYXBoaWN0b3JpYS1EZXZlbG9w
bWVudC1DQTAeFw0yMjA0MTUwMjMzMzNaFw0yNTAyMDIwMjMzMzNaMDMxCzAJBgNV
BAYTAlVTMSQwIgYDVQQDDBtHcmFwaGljdG9yaWEtRGV2ZWxvcG1lbnQtQ0EwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjARnva6VgZ5jGWsHSMgR03GTv
rKXq0YGIkfsliFFkVMXpH7B2orU5Zt9I23vJ7NX5bsm8977NWCqt80lC0wt4Ld58
0JYjFkM/qgzDip6dUDTcQWdS81kq4zg0yMIiMaEddGBRmhJOsngX3iDNAypZ3XJQ
qZZ+ENTtDIh9+pqrt4+QFDMKTLNrcANdFlxfkriVhwQX/JmktGKIxCyG+4hSvuw4
pCvsVPso0+7lGr9GNIzEXBD2Jvwtr2buXYg4yg0wx92PMeaSLU0OKKS7BfEPdikm
rKanuNzXNcAPQHplLeXzfgO1m6Hi3thNIaDmrqGcnQ6vfKv2j6LaZaWp649lAgMB
AAGjUzBRMB0GA1UdDgQWBBTH+uxCWs1TcDYNFptpXWMESc+MejAfBgNVHSMEGDAW
gBTH+uxCWs1TcDYNFptpXWMESc+MejAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
DQEBCwUAA4IBAQB6nHMSv+3rfO50t/e4pc613nIYbDv9/PnPouFwt8AiYk5ifpIa
WUZmupwY6Yl2JynzSHFFpe1afimd039LblUetlfDbv2Z+H4IBJ8lgCZE8GIskKNN
wpWF9Ovog0995fubUQdG9QU0JeCrlLDVlaDYhz1ImjP3KdOSZHZRWDdrzicwH6nQ
GZe0CgSML4S/YMPX/1BiEawpugcnAbDW3ZPh0md9FlsNt/rdL1PZiv0y9PM9cd8k
mqfVgPD7OAwihrjGVzFtmKzis0PbNpaydmpzII1j8OaHc8lLMSpIuGykbrfocD3O
p7zJ6bVvpr9PohKjIbslj2gkrMb7gq9EH4Tv
-----END CERTIFICATE-----

9
etc/cert/domains.ext Normal file
View File

@ -0,0 +1,9 @@
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = gtoria.local
DNS.3 = *.gtoria.local
DNS.4 = *.*.gtoria.local

23
etc/cert/localhost.crt Normal file
View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID0TCCArmgAwIBAgIUbUj9EBw3CYxjAyrsJy1LVn6r0q0wDQYJKoZIhvcNAQEL
BQAwMzELMAkGA1UEBhMCVVMxJDAiBgNVBAMMG0dyYXBoaWN0b3JpYS1EZXZlbG9w
bWVudC1DQTAeFw0yMjA0MTUwMjM1NTNaFw0yNTAyMDIwMjM1NTNaMG4xCzAJBgNV
BAYTAlVTMRIwEAYDVQQIDAlZb3VyU3RhdGUxETAPBgNVBAcMCFlvdXJDaXR5MSEw
HwYDVQQKDBhHcmFwaGljdG9yaWEtRGV2ZWxvcG1lbnQxFTATBgNVBAMMDGd0b3Jp
YS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALYo89k+V6a9
VX2BiMEiRQbRuqxYbhcafI5Pr1eUuv99IFuHFUV/fA5QiQ3j9woTr3/VdURkr4C0
ZWjEW4yd+8p+PjM/vAx9LZp2zhYyGu9wa+fsciOXmF0zhC6nuSIhcLlHwInwJ0cv
SabXV59GmoC9zxe0xoreSAU6hggLfuEXifn0dfdJTcXwfYgrneYr7ZFS/f0lCuEh
T19/FLBChw0Hch9axPJM1N1OGmUQxPx0NJTEOp7GGTjq1VlOTpnEx+OdpWBIb0JN
fFlpDkWGD53lnf/fhio68wz9hsIv+XyNXfw7XPa1AkZWVnoTZNxwcJKC0ltVxwUG
h/uvJpi9gvUCAwEAAaOBoTCBnjAfBgNVHSMEGDAWgBTH+uxCWs1TcDYNFptpXWME
Sc+MejAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE8DBEBgNVHREEPTA7gglsb2NhbGhv
c3SCDGd0b3JpYS5sb2NhbIIOKi5ndG9yaWEubG9jYWyCECouKi5ndG9yaWEubG9j
YWwwHQYDVR0OBBYEFIL06aX5T1tU7ozj1wC46e4qNW3wMA0GCSqGSIb3DQEBCwUA
A4IBAQBTZt4Pw6rzRNMPoPVOeAheLcd1JbO4Z+H3LW9MTerOp0JuaU7Q/LSbBBEp
/sP6aXzaIuepkiZk/pFlaXxDZ/XXrBy0sxGvMRI3K1hgU8evN3tiwTmLz1Vs2ffF
QEVUT3ytVxa/wP2A4uDhpZqqNjKvlxYesqXnSO7B20uO2IyYjliDwG1/dK6b6N64
XerbG+/sWjsNlpHLDu5qz7YYV78F6LO1bT24uVTWToXFFGuoJsf+3WrGp5Fg2RwN
FPBvLd+HbjWnkKN3BoMGP1fodAHTRhkiNOH3xMAOi4kxzArmxfg4gF+ABu6NO+67
iCBnuBC+ZyIkc24xsajDuU4csSho
-----END CERTIFICATE-----

17
etc/cert/localhost.csr Normal file
View File

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICszCCAZsCAQAwbjELMAkGA1UEBhMCVVMxEjAQBgNVBAgMCVlvdXJTdGF0ZTER
MA8GA1UEBwwIWW91ckNpdHkxITAfBgNVBAoMGEdyYXBoaWN0b3JpYS1EZXZlbG9w
bWVudDEVMBMGA1UEAwwMZ3RvcmlhLmxvY2FsMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAtijz2T5Xpr1VfYGIwSJFBtG6rFhuFxp8jk+vV5S6/30gW4cV
RX98DlCJDeP3ChOvf9V1RGSvgLRlaMRbjJ37yn4+Mz+8DH0tmnbOFjIa73Br5+xy
I5eYXTOELqe5IiFwuUfAifAnRy9JptdXn0aagL3PF7TGit5IBTqGCAt+4ReJ+fR1
90lNxfB9iCud5ivtkVL9/SUK4SFPX38UsEKHDQdyH1rE8kzU3U4aZRDE/HQ0lMQ6
nsYZOOrVWU5OmcTH452lYEhvQk18WWkORYYPneWd/9+GKjrzDP2Gwi/5fI1d/Dtc
9rUCRlZWehNk3HBwkoLSW1XHBQaH+68mmL2C9QIDAQABoAAwDQYJKoZIhvcNAQEL
BQADggEBAA/DMwmDDB989uhYGgpBiFENiqQBV4ApyWVSpf4p+egdVTgoa/1v1k2w
5dy2/z0x/MCzS+LTb8vwHoRXPWhLGerSXP5MgLtGWgFVrBvdfJ1QZCEc6OpihqFh
xHzKPD9Wbr3B9shUFURIsvl5qCYzwoePHPsEyrrgvF9wkmjV6ENJfIkaIi2U2ll6
H76GF3tN3ybR+NBcvRyc/xl+P8Hac4XAhvMNlDIvuFFvIMiZREnguoU0MSscSH61
3eJKZqGJx4kf81RXZw7bdAGG/OGfmF77s9EhBtxxGGKu6xcyfCzhdn0X1NsMvJXD
zIYiOCaou7k8Yu2A3VsLMsgLAV4PcH4=
-----END CERTIFICATE REQUEST-----

28
etc/cert/localhost.key Normal file
View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2KPPZPlemvVV9
gYjBIkUG0bqsWG4XGnyOT69XlLr/fSBbhxVFf3wOUIkN4/cKE69/1XVEZK+AtGVo
xFuMnfvKfj4zP7wMfS2ads4WMhrvcGvn7HIjl5hdM4Qup7kiIXC5R8CJ8CdHL0mm
11efRpqAvc8XtMaK3kgFOoYIC37hF4n59HX3SU3F8H2IK53mK+2RUv39JQrhIU9f
fxSwQocNB3IfWsTyTNTdThplEMT8dDSUxDqexhk46tVZTk6ZxMfjnaVgSG9CTXxZ
aQ5Fhg+d5Z3/34YqOvMM/YbCL/l8jV38O1z2tQJGVlZ6E2TccHCSgtJbVccFBof7
ryaYvYL1AgMBAAECggEAB97gcmGG3gB47NGnpq35YjW2UB4IsQeG8YswiKM3f98t
17vlcmRIvZbt5Q4VgszznJ1iJ2YGTemoJreykPJ+ikhGyGYXlPPlADM5QleV4a9E
1PeFaFOeKgtrdFdGNjBQXjZjHlKkZSdTklmO7VCFT8y5DE2A9UfCFYpqzMwvsOqw
YA/EZdQvswnDScG8Dfu5kOGB/qAxrNGLrXcefCbYpubXBfs/duYcJ2uadTLa79sj
AK878G6Ql9LkiXx/yyq0LnUQqA0zrQeJMF9CEdNLA6O1n9BRjO9kKcR0LspKa2vp
Ygi4ISzgwJ5oR7iABcj3o/Tv2cmLdlSJp0DRuygFgQKBgQDtQl/m3Ic/7xQ/efN+
V6vPUCF/lXfw2Ep/qE5oEasCUqvcmeBOrqB8Uprl0dnLCxDz5c1jDnDaxeJpN9L7
RjHGLxqIV7F3ZfCn+neI3Ju0vbzTGkCcs6C1cbgTfrF9flgirkfR+cB0peWhEA/g
poAQW9X+jnOl3m+9JHtflpdcYQKBgQDEjGngPD7yk53c4duf7b+Im594EIHzZlv+
uczXHbP75/AwOPCsQPBycL7J0sWnsw+jyOOuCY1aj4b1VUBD1kGrgN4zziuHtMaV
wgStbAwAJOSaPcWaXXmQpTC4u9eTX7nnvnezri5E3XrnToUfK9B7+aEAZT39XHiZ
ItwOAnFPFQKBgC30i0rWMERL9KoO3wD7zkWLidGCjAbUfimX2ggCVBNRHATQsUfM
Pz2VandVXFAdxpzXSB8FrwpRBffHXlBZWk6+1O7PvYoY7rI6q2iRAn/RuH9TOGyh
xmEes77i7VIXZM7i3vpm28Y8U+wMhmbHGUsR3rM9uFzKZu5F4Le1HYBBAoGAL8lr
3IcJTvUxBokrWsD1NoOPzCNHVSRn7ZDDCvI/1llX/oF5koffbhOXb359a/6PKOUo
5iGQappG19M4YsXvBYG5hKL11nLPbY3UkU2ZxVcy9YVbS+K6Mb7YD7IsAbreekfG
1rrcqQWoYiCnISMH93yD9pKm9bjL4X+mPQm+/tkCgYEAjwdfAFSYnzUdxB8zTsXx
+p2daNJlY00YK0kf//qg4WhXkW6//jILoJFOD8lFMaVz+H30bGsHtOqAoTZ/+Ozk
Jwzlie9J2gWrInXu9zqnw2jAfIQZGZRFMNpxOoRT3yvh2fnArIXKtBdP107p2yLl
2w2vr0QHVij28jWQpsRGG0U=
-----END PRIVATE KEY-----

View File

@ -24,8 +24,20 @@ class AuthHelper
* @return boolean
*/
public static function Guard(Request $request) {
if(AuthHelper::IsAuthenticated($request))
return true;
}
/**
* Checks if the user is authenticated(logged in).
*
* @return Boolean
*/
public static function IsAuthenticated(Request $request) {
if(AuthHelper::GetCurrentUser($request))
return true;
return false;
}
/**

View File

@ -14,7 +14,7 @@ class ErrorHelper
*
* @return Response
*/
private static function error($data, $code = 400)
public static function error($data, $code = 400)
{
return response(['errors' => [$data]], 400);
}

View File

@ -10,6 +10,8 @@ use App\Helpers\JSON;
use App\Helpers\GridHelper;
use App\Helpers\ErrorHelper;
use App\Http\Controllers\Controller;
use App\Models\FFlag;
use App\Models\Fbucket;

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Apis;
use Illuminate\Http\Request;;
use App\Http\Controllers\Controller;
class AssetGame extends Controller
{
public function machineConfiguration()
{
// todo: move to backend
// this is only here for testing
return response('')
->header('Content-Type', 'text/plain');
}
public function validateMachine()
{
// todo: move to backend and make this actually return if the player is validated
// this is only here for testing
// true = machine banned
// false = machine is ok
return response(json_encode(['success'=>false]))
->header('Content-Type', 'text/plain');
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers\Apis;
use Illuminate\Http\Request;;
use App\Http\Controllers\Controller;
class ClientApi extends Controller
{
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')
->header('Content-Type', 'text/plain');
}
}

View File

@ -6,6 +6,9 @@ use Illuminate\Http\Request;
use App\Models\WebsiteConfiguration;
use App\Helpers\GridHelper;
use App\Helpers\ErrorHelper;
use App\Http\Controllers\Controller;
class VersionCompatibility extends Controller
{
@ -40,4 +43,20 @@ class VersionCompatibility extends Controller
]
]);
}
function getMemHashes(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)
]
]);
}
}

View File

@ -25,13 +25,4 @@ 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');
}
}

11
web/app/Models/Asset.php Normal file
View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Asset extends Model
{
use HasFactory;
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class AssetType extends Model
{
use HasFactory;
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class AssetVersion extends Model
{
use HasFactory;
}

View File

@ -45,6 +45,16 @@ class RouteServiceProvider extends ServiceProvider
->namespace($this->namespace)
->group(base_path('routes/apis.php'));
Route::domain('api.' . env('APP_URL'))
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/clientapis.php'));
Route::domain('assetgame.' . env('APP_URL'))
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/assetgame.php'));
Route::domain('clientsettings.api.' . env('APP_URL'))
->middleware('api')
->namespace($this->namespace)

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAssetTypesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('asset_types', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('asset_types');
}
}

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAssetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('assets', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('assets');
}
}

View File

@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAssetVersionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('asset_versions', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('asset_versions');
}
}

2384
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@
},
"devDependencies": {
"@babel/preset-react": "^7.13.13",
"@popperjs/core": "^2.9.2",
"@popperjs/core": "^2.11.5",
"axios": "^0.21",
"bootstrap": "^5.1.3",
"css-loader": "^6.4.0",

View File

@ -2,7 +2,7 @@
<defs>
<style>
.cls-1 {
fill: currentcolor;
fill: #e59800;
fill-rule: evenodd;
}
</style>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

15
web/resources/js.old/app.js vendored Normal file
View File

@ -0,0 +1,15 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes React and other helpers. It's a great starting point while
* building robust, powerful web applications using React + Laravel.
*/
require('./bootstrap');
/**
* Next, we will create a fresh React component instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
require('./components/Main');

18
web/resources/js.old/bootstrap.js vendored Normal file
View File

@ -0,0 +1,18 @@
window._ = require('lodash');
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
// import Echo from 'laravel-echo';
// window.Pusher = require('pusher-js');
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// forceTLS: true
// });

16
web/resources/js.old/components/Main.js vendored Normal file
View File

@ -0,0 +1,16 @@
import 'bootstrap';
import React from 'react';
import ReactDOM from 'react-dom';
import { useState, useEffect } from "react";
import App from '../layouts/App.js';
function Main() {
return (
<App />
);
}
export default Main;
ReactDOM.render(<Main />, document.getElementById('gtoria-root'));

6
web/resources/js.old/config.js vendored Normal file
View File

@ -0,0 +1,6 @@
const Config = {
BaseUrl: 'http://gtoria.local',
Protocol: 'http://'
};
export default Config;

View File

@ -1,16 +1,9 @@
import 'bootstrap';
import $ from 'jquery';
import * as Bootstrap from 'bootstrap';
import React from 'react';
import ReactDOM from 'react-dom';
import { useState, useEffect } from "react";
import App from '../layouts/App.js';
function Main() {
return (
<App />
);
}
export default Main;
ReactDOM.render(<Main />, document.getElementById('gtoria-root'));
$(document).ready(function() {
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new Bootstrap.Tooltip(tooltipTriggerEl)
});
});

0
web/resources/js/components/Search.js vendored Normal file
View File

View File

@ -231,6 +231,23 @@ html {
}
}
.graphictora-user-circle {
border-radius: 50%;
background: url("/Images/User-Image-Vignette.png");
background-size: cover;
}
// Border
.border {
html.gtoria-dark & {
border-color: $gray-700!important;
}
html.gtoria-light & {
border-color: $border-color!important;
}
}
// Navbar
.navbar {
@ -371,6 +388,12 @@ html {
margin-bottom: 16px !important;
}
.graphictoria-user-dropdown::after {
position: absolute;
top: 50%;
right: 0;
}
.graphictoria-search, #graphictoria-search-dropdown {
position: absolute;
@media (max-width: 992px) {

View File

@ -0,0 +1,5 @@
@extends('layouts.app')
@section('content')
<h1>abcd</h1>
@endsection

View File

@ -1,15 +1,17 @@
@extends('layouts.app', ['title' => 'JavaScript', 'jsPage' => true])
@extends('layouts.app', ['title' => 'Javascript'])
@section('content')
<div class="text-center m-auto container">
<h2>Uh oh!</h2>
<h5>Your browser doesn't seem to support JavaScript! Please upgrade your browser to use Graphictoria.</h5>
<hr class="mx-auto" width="20%"/>
<h4>JS Compatible Browsers:</h4>
<h4>Javascript Compatible Browsers:</h4>
<ul class="list-unstyled">
<li><a href="https://www.google.com/chrome/">Google Chrome</a></li>
<li><a href="https://www.mozilla.org/en-US/firefox/new/">Mozilla Firefox</a></li>
<li><a href="https://www.microsoft.com/en-us/edge">Microsoft Edge</a></li>
<li><a href="https://brave.com/download/">Brave</a></li>
<li><a href="https://www.opera.com/gx">Opera</a></li>
</ul>
</div>
@endsection

View File

@ -1,16 +1,21 @@
@php
$slogan = 'Graphictoria is an online social platform for those looking to relive the classic Roblox experience. So what are you waiting for? Join 8k+ other users in reliving the good ol\' days! Graphictoria is not affiliated with or sponsored by Roblox Corporation, all Roblox related indica and slogans belong to Roblox Corporation.';
$authenticated = \App\Helpers\AuthHelper::IsAuthenticated(request());
@endphp
<!DOCTYPE html>
<html class="{{ isset($jsPage) ? 'gtoria-dark graphictoria-nojs' : (isset($adminPage) ? 'gtoria-dark graphictoria-admin' : 'gtoria-light') }}" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<html class="gtoria-light" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<title>Graphictoria{{ isset($title) ? ' | ' . $title : '' }}</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="theme-color" content="#348AFF"/>
<meta name="author" content="Graphictoria"/>
<meta name="description" content="Graphictoria is an online social platform for those looking to relive the classic Roblox experience. So what are you waiting for? Join 1.7k+ other users in reliving the good ol' days! Graphictoria is not affiliated with or sponsored by Roblox Corporation, all Roblox related indica and slogans belong to Roblox Corporation."/>
<meta name="keywords" content="Graphictoria, XDiscuss, nostalgia, roblox, gtoria, private server"/>
<meta name="description" content="{{ $slogan }}"/>
<meta name="keywords" content="graphictoria, xdiscuss, nostalgia, roblox, gtoria, private server, classic, old roblox, classic roblox, forum, game engine, mmo, classic mmo, old internet"/>
<meta property="og:title" content="Graphictoria{{ isset($title) ? ' | ' . $title : '' }}"/>
<meta property="og:site_name" content="Graphictoria"/>
<meta property="og:description" content="Graphictoria is an online social platform for those looking to relive the classic Roblox experience. So what are you waiting for? Join 1.7k+ other users in reliving the good ol' days! Graphictoria is not affiliated with or sponsored by Roblox Corporation, all Roblox related indica and slogans belong to Roblox Corporation."/>
<meta property="og:description" content="{{ isset($description) ? $description . ' ' : '' }}{{ $slogan }}"/>
<meta property="og:type" content="website"/>
<meta property="og:image" content="{{ asset('images/banner.png') }}">
<meta name="twitter:image" content="{{ asset('images/banner.png') }}">
@ -22,11 +27,21 @@
<link href="{{ asset('manifest.json') }}" rel="manifest" integrity="{{ Sri::hash('manifest.json') }}" crossorigin="anonymous" />
<link href="{{ asset('css/graphictoria.css') }}" rel="stylesheet" integrity="{{ Sri::hash('css/graphictoria.css') }}" crossorigin="anonymous" />
@endonce
<script src="{{ asset('js/app.js') }}"></script>
@yield('extra-headers')
@yield('page-specific')
</head>
<body>
<div id="gtoria-root">
@if(!isset($noNav))
@include('layouts.nav')
@endif
@yield('content')
@if(!isset($noFooter))
@include('layouts.footer')
@endif
</div>
</body>
</html>

View File

@ -0,0 +1,55 @@
@php
// TODO: load from website configuration?
$routes = [
[
"label" => "About Us",
"location" => "/legal/about-us"
],
[
"label" => "Terms of Use",
"location" => "/legal/terms-of-use"
],
[
"label" => "Privacy Policy",
"location" => "/legal/privacy-policy"
],
[
"label" => "DMCA",
"location" => "/legal/dmca"
],
[
"label" => "Support",
"location" => "/support"
],
[
"label" => "Blog",
"location" => 'https://blog.gtoria.net'
],
]
@endphp
<div class="footer mt-auto pt-3 text-center shadow-lg">
<div class="container">
<h4 class="fw-bold mb-0">Graphictoria</h4>
<p class="text-muted fw-bold mb-0 mt-1">
@foreach($routes as $index => $route)
@php
// HACK
$route = (object)$route;
@endphp
<a class="text-decoration-none fw-normal" href="{{ url($route->location) }}">{{ $route->label }}</a>
@if($index != array_key_last($routes))
{{ ' | ' }}
@endif
@endforeach
</p>
<hr class="mx-auto my-2 w-25"/>
<p class="text-muted fw-light m-0">Copyright © {{ \Carbon\Carbon::now()->format('Y') }} Graphictoria. All rights reserved.</p>
<p class="text-muted fw-light m-0">Graphictoria is not affiliated with, endorsed by, or sponsored by Roblox Corporation. The usage of this website signifies your acceptance of the <a class="text-decoration-none fw-normal" href="{{ url('/legal/terms-of-use') }}">Terms of Use</a> and our <a class="text-decoration-none fw-normal" href="{{ url('/legal/privacy-policy') }}">Privacy Policy</a>.</p>
<div class="my-1">
<a class="mx-1" href="https://www.youtube.com/graphictoria?sub_confirmation=1" rel="noreferrer" target="_blank"><img src="{{ asset('/images/YouTube.svg') }}" alt="YouTube" height="22" width="28"></img></a>
<a class="mx-1" href="https://twitter.com/intent/user?screen_name=gtoriadotnet" rel="noreferrer" target="_blank"><img src="{{ asset('/images/Twitter.svg') }}" alt="Twitter" height="28" width="28"></img></a>
<a class="mx-1" href="https://discord.gg/q666a2sF6d" rel="noreferrer" target="_blank"><img src="{{ asset('/images/Discord.svg') }}" alt="Discord" height="28" width="28"></img></a>
</div>
</div>
</div>

View File

@ -0,0 +1,73 @@
@php
// TODO: load from website configuration?
$routes = [
[
"label" => "Games",
"location" => "/games"
],
[
"label" => "Shop",
"location" => "/shop"
],
[
"label" => "Forum",
"location" => "/forum"
]
]
@endphp
<div class="navbar graphictoria-navbar fixed-top navbar-expand-md shadow-sm">
<div class="container-md">
<a class="navbar-brand" href="/">
<img src="{{ asset('/images/logo.png') }}" alt="Graphictoria" width="43" height="43" draggable="false"/>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#graphictoria-nav" aria-controls="graphictoria-nav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="graphictoria-nav">
<ul class="navbar-nav me-auto">
@foreach($routes as $route)
@php
// HACK
$route = (object)$route;
@endphp
<li class="nav-item">
<a class="nav-link" href="{{ $route->location }}">{{ $route->label }}</a>
</li>
@endforeach
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="graphictoria-nav-dropdown" role="button" data-bs-toggle="dropdown" area-expanded="false">More</a>
<ul class="dropdown-menu graphictoria-nav-dropdown" area-labelledby="graphictoria-nav-dropdown">
<li><a class="dropdown-item" href="/users">Users</a></li>
<li><a class="dropdown-item" href="https://discord.gg/q666a2sF6d" target="_blank" rel="noreferrer">Discord</a></li>
</ul>
</li>
</ul>
@if($authenticated)
<div class="flex">
<p class="my-auto me-2 text-muted" style="color:#e59800!important;font-weight:bold">
<span data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tokens are Graphictoria's currency.">
<img src="{{ asset('images/symbols/token.svg') }}" height="20" width="20" class="img-fluid me-1" style="margin-top:-1px" />
123
</span>
</p>
<div class="dropdown">
<a class="nav-link dropdown-toggle graphictoria-user-dropdown" href="#" id="graphictoria-user-dropdown" role="button" data-bs-toggle="dropdown" area-expanded="false">
<span class="d-flex align-items-center">
<img src="{{ asset('images/testing/headshot.png') }}" class="img-fluid border me-1 graphictora-user-circle" width="37" height="37">
<p>Username</p>
</span>
</a>
<ul class="dropdown-menu graphictoria-user-dropdown" area-labelledby="graphictoria-user-dropdown">
<li><a class="dropdown-item" href="{{ url('/my/settings') }}">Settings</a></li>
<li><a class="dropdown-item" href="{{ url('/my/logout') }}">Logout</a></li>
</ul>
</div>
</div>
@else
<a class="btn btn-success" href="/login">Login / Sign up</a>
@endif
</div>
</div>
</div>
<div class="graphictoria-nav-margin"></div>

View File

@ -1,9 +0,0 @@
@extends('layouts.app')
@section('extra-headers')
<noscript><meta http-equiv="refresh" content="0; url=javascript"/></noscript>
@endsection
@section('content')
<script src="{{ asset('js/app.js') }}" integrity="{{ Sri::hash('js/app.js') }}" crossorigin="anonymous"></script>
@endsection

View File

@ -2,7 +2,6 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Apis\AppSettings;
/*
|--------------------------------------------------------------------------
@ -19,7 +18,7 @@ Route::get('/', function(){
return 'API OK';
});
Route::get('/Setting/QuietGet/{Bucket}', 'AppSettings@getBucket');
Route::get('/Setting/QuietGet/{Bucket}', 'Apis\AppSettings@getBucket');
Route::fallback(function(){
return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404)

29
web/routes/assetgame.php Normal file
View File

@ -0,0 +1,29 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::get('/', function(){
return 'API OK';
});
// client apis
Route::get('/Game/MachineConfiguration', 'Apis\AssetGame@machineConfiguration');
Route::get('/game/validate-machine', 'Apis\AssetGame@validateMachine');
Route::fallback(function(){
return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404)
->header('Cache-Control', 'private')
->header('Content-Type', 'application/json; charset=utf-8');
});

28
web/routes/clientapis.php Normal file
View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::get('/', function(){
return 'API OK';
});
// client apis
Route::get('/universes/validate-place-join', 'Apis\ClientApi@validatePlaceJoin');
Route::fallback(function(){
return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404)
->header('Cache-Control', 'private')
->header('Content-Type', 'application/json; charset=utf-8');
});

View File

@ -2,7 +2,6 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Apis\VersionCompatibility;
/*
|--------------------------------------------------------------------------
@ -20,10 +19,10 @@ Route::get('/', function(){
});
// RCC Security Backbone
Route::get('/GetAllowedSecurityVersions', 'VersionCompatibility@getVersions');
Route::get('/GetAllowedSecurityKeys', 'VersionCompatibility@getVersions');
Route::get('/GetAllowedMD5Hashes', 'VersionCompatibility@getMD5Hashes');
Route::get('/GetAllowedMemHashes', 'VersionCompatibility@getMemHashes');
Route::get('/GetAllowedSecurityVersions', 'Apis\VersionCompatibility@getVersions');
Route::get('/GetAllowedSecurityKeys', 'Apis\VersionCompatibility@getVersions');
Route::get('/GetAllowedMD5Hashes', 'Apis\VersionCompatibility@getMD5Hashes');
Route::get('/GetAllowedMemHashes', 'Apis\VersionCompatibility@getMemHashes');
// Client/Launcher apis
Route::get('/GetCurrentClientVersionUpload', 'VersionCompatibility@getClientVersion');

View File

@ -15,58 +15,8 @@ use App\Http\Controllers\GridTest;
|
*/
// client apis
Route::get('/universes/validate-place-join', 'GamesController@validatePlaceJoin');
// web
Route::view('/', 'home');
// other
Route::get('/javascript', function(){
return view('javascript');
})->middleware('auth');
Route::get('/', function(){
return view('main');
});
Route::get('/home', function(){
return view('main');
});
Route::get('/forum', function(){
return view('main');
});
Route::get('/login', function(){
return view('main');
});
Route::get('/register', function(){
return view('main');
});
Route::get('/passwordreset', function(){
return view('main');
});
Route::get('/legal/about-us', function(){
return view('main');
});
Route::get('/legal/terms-of-service', function(){
return view('main');
});
Route::get('/legal/privacy-policy', function(){
return view('main');
});
Route::get('/legal/dmca', function(){
return view('main');
});
Route::get('/games', function(){
return view('main');
});
Route::get('/account/logout', 'AuthController@logout');
Route::get('/test123', 'GridTest@generateThumbnail');
// misc
Route::view('/javascript', 'javascript');