Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/Azuriom.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Azuriom
*
* @var string
*/
private const VERSION = '1.2.8';
private const VERSION = '1.2.9';

/**
* Get the current version of Azuriom CMS.
Expand Down
64 changes: 64 additions & 0 deletions app/Games/HytaleGame.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

namespace Azuriom\Games;

use Azuriom\Games\Minecraft\Servers\AzLink;
use Azuriom\Models\User;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

class HytaleGame extends Game
{
public const PLAYER_LOOKUP = 'https://playerdb.co/api/player/hytale/';

public function id(): string
{
return 'hytale';
}

public function name(): string
{
return 'Hytale';
}

public function getAvatarUrl(User $user, int $size = 64): string
{
return "https://crafthead.net/hytale/avatar/{$user->name}/{$size}.png";
}

public function getUserUniqueId(string $name): ?string
{
return Cache::remember('games.minecraft.uuid.'.$name, now()->addMinutes(30), function () use ($name) {
return Http::get(self::PLAYER_LOOKUP.$name)
->throw()
->json('data.player.id');
});
}

public function getUserName(User $user): ?string
{
if ($user->game_id === null) {
return $user->name;
}

$cacheKey = 'games.minecraft.profile.'.$user->game_id;

return Cache::remember($cacheKey, now()->addMinutes(30), function () use ($user) {
return Http::get(self::PLAYER_LOOKUP.$user->game_id)
->throw()
->json('data.player.username');
});
}

public function getSupportedServers()
{
return [
'mc-azlink' => AzLink::class,
];
}

public function trans(string $key, array $placeholders = []): string
{
return trans('game.minecraft.'.$key, $placeholders);
}
}
35 changes: 19 additions & 16 deletions app/Http/Controllers/InstallController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Azuriom\Extensions\Plugin\PluginManager;
use Azuriom\Extensions\UpdateManager;
use Azuriom\Games\FiveMGame;
use Azuriom\Games\HytaleGame;
use Azuriom\Games\Minecraft\MinecraftBedrockGame;
use Azuriom\Games\Minecraft\MinecraftOnlineGame;
use Azuriom\Games\Steam\SteamGame;
Expand Down Expand Up @@ -63,6 +64,10 @@ class InstallController extends Controller
'name' => 'Minecraft: Bedrock Edition',
'logo' => 'assets/img/games/minecraft.svg',
],
'hytale' => [
'name' => 'Hytale (Early Access)',
'logo' => 'assets/img/games/hytale.png',
],
'gmod' => [
'name' => 'Garry\'s mod',
'logo' => 'assets/img/games/gmod.svg',
Expand Down Expand Up @@ -228,18 +233,10 @@ public function showGame(string $game)
{
abort_if(! array_key_exists($game, $this->games), 404);

if ($game === 'minecraft') {
if ($game === 'minecraft' || $game === 'mc-bedrock' || $game === 'hytale') {
return view('install.games.minecraft', [
'game' => $game,
'gameName' => 'Minecraft',
'locales' => self::getAvailableLocales(),
]);
}

if ($game === 'mc-bedrock') {
return view('install.games.minecraft', [
'game' => $game,
'gameName' => 'Minecraft: Bedrock Edition',
'gameName' => Arr::get($this->games, $game.'.name', $game),
'locales' => self::getAvailableLocales(),
]);
}
Expand Down Expand Up @@ -273,8 +270,8 @@ public function setupGame(Request $request, string $game)
return $this->setupSteamGame($request, $game);
}

if ($game === 'minecraft' || $game === 'mc-bedrock') {
return $this->setupMinecraftGame($request, $game);
if ($game === 'minecraft' || $game === 'mc-bedrock' || $game === 'hytale') {
return $this->setupMinecraftOrHytale($request, $game);
}

if ($game === 'fivem-cfx') {
Expand Down Expand Up @@ -334,13 +331,13 @@ protected function setupSteamGame(Request $request, string $game)
}

/**
* Install Azuriom for Minecraft (with register or Microsoft OAuth).
* Install Azuriom for Minecraft (with register or Microsoft OAuth) or Hytale.
*
* @throws \Illuminate\Validation\ValidationException
*/
protected function setupMinecraftGame(Request $request, string $game)
protected function setupMinecraftOrHytale(Request $request, string $game)
{
if ($game !== 'mc-bedrock') {
if ($game !== 'mc-bedrock' && $game !== 'hytale') {
$game = $request->input('oauth') ? 'mc-online' : 'mc-offline';
}

Expand Down Expand Up @@ -368,6 +365,12 @@ protected function setupMinecraftGame(Request $request, string $game)
if ($name === null) {
throw ValidationException::withMessages(['xuid' => 'Invalid Xbox XUID.']);
}
} elseif ($game === 'hytale') {
$response = Http::get(HytaleGame::PLAYER_LOOKUP.$request->input('name'));

if (! $response->successful() || ! ($gameId = $response->json('data.player.id'))) {
throw ValidationException::withMessages(['name' => 'You must enter a valid Hytale username.']);
}
}

return $this->setupAzuriom($request, $game, $name, $gameId ?? null);
Expand Down Expand Up @@ -479,7 +482,7 @@ protected function setupAzuriom(Request $request, string $game, ?string $name, ?

$user->markEmailAsVerified();

if ($game !== 'mc-offline') {
if ($game !== 'mc-offline' && $game !== 'hytale') {
Setting::updateSettings('register', false);
}

Expand Down
6 changes: 3 additions & 3 deletions app/Http/Middleware/VerifyCaptcha.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public function handle(Request $request, Closure $next): Response
return $next($request);
}

$success = $this->verifyCaptcha($captchaType, $request, $secretKey);

return $success ? $next($request) : $this->sendFailedResponse($request);
return $this->verifyCaptcha($captchaType, $request, $secretKey)
? $next($request)
: $this->sendFailedResponse($request);
}

protected function sendFailedResponse(Request $request): Response
Expand Down
2 changes: 2 additions & 0 deletions app/Providers/GameServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Azuriom\Games\FallbackGame;
use Azuriom\Games\FiveMGame;
use Azuriom\Games\HytaleGame;
use Azuriom\Games\Minecraft\MinecraftBedrockGame;
use Azuriom\Games\Minecraft\MinecraftOfflineGame;
use Azuriom\Games\Minecraft\MinecraftOnlineGame;
Expand Down Expand Up @@ -42,6 +43,7 @@ public function register(): void
'tf2' => SteamGame::forName('tf2', 'Team Fortress 2'),
'unturned' => SteamGame::forName('unturned', 'Unturned'),
'7dtd' => SteamGame::forName('7dtd', '7 Days to Die', true),
'hytale' => HytaleGame::class,
]);
}

Expand Down
Binary file added public/assets/img/games/hytale.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions resources/views/install/games.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
<div id="gameSelect" class="text-center">
<h2 class="mb-3">{{ trans('install.game.title') }}</h2>

<p class="text-danger font-weight-bold mb-0">
<i class="bi bi-exclamation-triangle"></i> {{ trans('install.game.warn') }}
</p>

<div class="row justify-content-center mb-3">
@foreach ($games as $key => $game)
<div class="col-md-3">
Expand All @@ -15,9 +19,5 @@
</div>
@endforeach
</div>

<p class="text-danger font-weight-bold mb-0">
<i class="bi bi-exclamation-triangle"></i> {{ trans('install.game.warn') }}
</p>
</div>
@endsection
66 changes: 34 additions & 32 deletions resources/views/install/games/minecraft.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,45 @@

@section('game')
@if($game !== 'mc-bedrock')
<div class="mb-3">
<label class="form-label" for="oauth">
{{ trans('install.game.minecraft.premium') }}
</label>

<select name="oauth" class="form-select @error('oauth') is-invalid @enderror" id="oauth" data-toggle-select="oauth" required>
<option value=""></option>
<option value="1" @selected(old('oauth') === '1')>
{{ trans('messages.yes') }}
</option>
<option value="0" @selected(old('oauth') === '0')>
{{ trans('messages.no') }}
</option>
</select>

@error('oauth')
<span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
@enderror

<p class="form-text text-danger">
<i class="bi bi-exclamation-triangle"></i> {{ trans('install.game.warn') }}
</p>
</div>
@if($game !== 'hytale')
<div class="mb-3">
<label class="form-label" for="oauth">
{{ trans('install.game.minecraft.premium') }}
</label>

<select name="oauth" class="form-select @error('oauth') is-invalid @enderror" id="oauth" data-toggle-select="oauth" required>
<option value=""></option>
<option value="1" @selected(old('oauth') === '1')>
{{ trans('messages.yes') }}
</option>
<option value="0" @selected(old('oauth') === '0')>
{{ trans('messages.no') }}
</option>
</select>

@error('oauth')
<span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
@enderror

<div data-oauth="1">
<h3>{{ trans('install.game.user.title') }}</h3>
<p class="form-text text-danger">
<i class="bi bi-exclamation-triangle"></i> {{ trans('install.game.warn') }}
</p>
</div>

<div class="mb-3">
<label class="form-label" for="uuid">Minecraft UUID</label>
<div data-oauth="1">
<h3>{{ trans('install.game.user.title') }}</h3>

<input name="uuid" id="uuid" type="text" class="form-control @error('uuid') is-invalid @enderror" value="{{ old('uuid', '') }}">
<div class="mb-3">
<label class="form-label" for="uuid">Minecraft UUID</label>

@error('uuid')
<span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
@enderror
<input name="uuid" id="uuid" type="text" class="form-control @error('uuid') is-invalid @enderror" value="{{ old('uuid', '') }}">

@error('uuid')
<span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
@enderror
</div>
</div>
</div>
@endif

<div data-oauth="0">
<h3>{{ trans('install.game.user.title') }}</h3>
Expand Down