Skip to content
Open
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
11 changes: 9 additions & 2 deletions cncnet-api/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,26 @@ APP_URL=http://localhost
ASSET_URL=http://localhost
URL=http://localhost

# Laravel mysql config
# Mysql config
DB_HOST="mysql"
DB_DATABASE="cncnet_api"
DB_USERNAME="cncnet"
DB_PASSWORD="cncnet"

# Mysql config
# IRC Mysql config
DB_IRC_DATABASE="cncnet_irc"

# Main Ladder Mysql config
MYSQL_DATABASE="cncnet_api"
MYSQL_USER="cncnet"
MYSQL_PASSWORD="cncnet"
MYSQL_ALLOW_EMPTY_PASSWORD="false"
MYSQL_ROOT_PASSWORD="yourRandomRootPass"

# IRC Mysql config
MYSQL_IRC_HOST=mysql
MYSQL_IRC_DATABASE=cncnet_irc

CACHE_DRIVER="file"
SESSION_DRIVER="cookie"
QUEUE_DRIVER="database"
Expand Down
2 changes: 1 addition & 1 deletion cncnet-api/app/Http/Controllers/AccountController.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public function __construct()
public function getAccountIndex(Request $request)
{
$user = \Auth::user();
$user->ip_address_id = \App\Models\IpAddress::getID(isset($_SERVER["HTTP_CF_CONNECTING_IP"])
$user->ip_address_id = \App\Models\IrcIpAddress::getID(isset($_SERVER["HTTP_CF_CONNECTING_IP"])
? $_SERVER["HTTP_CF_CONNECTING_IP"]
: $request->getClientIp());

Expand Down
108 changes: 108 additions & 0 deletions cncnet-api/app/Http/Controllers/Admin/IrcBanController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Irc\CreateIrcBanRequest;
use App\Http\Services\IrcBanService;
use App\Models\IrcBan;
use App\Models\IrcWarning;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class IrcBanController extends Controller
{
protected IrcBanService $ircBanService;

public function __construct(
IrcBanService $ircBanService,
)
{
$this->ircBanService = $ircBanService;
}

public function getBanIndex()
{
$bans = IrcBan::limit(20)->orderBy("created_at", "desc")->get();
$warnings = IrcWarning::limit(20)->orderBy("created_at", "desc")->get();
return view('admin.irc.index', compact('bans', 'warnings'));
}

public function getAllBans()
{
$bans = IrcBan::orderBy("created_at", "desc")->paginate(20);
return view('admin.irc.bans', compact('bans'));
}

public function getCreateBan(Request $request)
{
return view('admin.irc.create');
}

public function createBan(CreateIrcBanRequest $request)
{
// Safety checks
if ($request->username == null && $request->ident == null && $request->host == null)
{
return redirect()->back()->withErrors(["You just banned everyone on the CnCNet server. Just kidding. Specify at least one value in the fields: user, ident or host"])->withInput();
}

if ($request->channel == null && $request->global_ban != "on")
{
return redirect()->back()->withErrors(["Which channel(s) are we banning this user from?"])->withInput();
}

$ircBan = $this->ircBanService->saveBan(
banReason: $request->ban_reason,
adminId: Auth::user()->id,
channel: $request->channel,
globalBan: $request->global_ban == "on",
username: $request->username,
ident: $request->ident,
host: $request->host,
expiresAt: $request->expires_at
);

return redirect()->route('admin.irc.bans.edit', ['id' => $ircBan->id])->with('status', 'Ban created');
}

public function getEditBan(Request $request)
{
$ban = IrcBan::findOrFail($request->id);
return view('admin.irc.edit', compact('ban'));
}

public function updateBan(Request $request)
{
$ban = IrcBan::findOrFail($request->ban_id);

// Safety checks
if ($request->username == null && $request->ident == null && $request->host == null)
{
return redirect()->back()->withErrors(["You just banned everyone on the CnCNet server. Just kidding. Specify at least one value in the fields: username, ident or host"])->withInput();
}

if ($request->channel == null && $request->global_ban != "on")
{
return redirect()->back()->withErrors(["Which channel(s) are we banning this user from?"])->withInput();
}

$this->ircBanService->updateBan(
banId: $ban->id,
banReason: $request->ban_reason,
adminId: Auth::user()->id,
channel: $request->channel,
globalBan: $request->global_ban == "on",
expiresAt: $request->expires_at
);

return redirect()->back()->with('status', 'Ban updated');
}

public function expireBan(Request $request)
{
$ban = IrcBan::findOrFail($request->ban_id);
$this->ircBanService->expireBan($ban, Auth::user()->id);
return redirect()->back()->with('status', 'Ban expired');
}
}
95 changes: 95 additions & 0 deletions cncnet-api/app/Http/Controllers/Admin/IrcWarningController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Irc\CreateIrcBanRequest;
use App\Http\Services\IrcBanService;
use App\Http\Services\IrcWarningService;
use App\Models\IrcBan;
use App\Models\IrcWarning;
use App\Rules\AtLeastOneField;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class IrcWarningController extends Controller
{
protected IrcWarningService $ircWarningService;

public function __construct(IrcWarningService $ircWarningService)
{
$this->ircWarningService = $ircWarningService;
}

public function getAllWarnings()
{
$warnings = IrcWarning::orderBy("created_at", "desc")->paginate(20);
return view('admin.irc.warnings', compact('warnings'));
}

public function getCreateWarning(Request $request)
{
return view('admin.irc.warning-create');
}

public function getEditWarning(Request $request)
{
$warning = IrcWarning::findOrFail($request->id);
return view('admin.irc.warning-edit', compact('warning'));
}

public function createWarning(Request $request)
{
// Safety checks
if ($request->username == null && $request->ident == null)
{
return redirect()->back()->withErrors(["Specify at least one value in the fields: user or ident"])->withInput();
}

if ($request->channel == null)
{
return redirect()->back()->withErrors(["Specify a channel this user will receive this message"])->withInput();
}

$this->ircWarningService->issueWarning(
adminId: Auth::user()->id,
username: $request->username,
ident: $request->ident,
warningMessage: $request->warning_message,
channel: $request->channel
);

return redirect()->route('admin.irc.warnings')->with('status', 'Warning created');
}

public function expireWarning(Request $request)
{
$this->ircWarningService->expireWarning($request->id);
return redirect()->route('admin.irc.warnings')->with('status', 'Warning expired');
}

public function updateWarning(Request $request)
{
// Safety checks
if ($request->username == null && $request->ident == null)
{
return redirect()->back()->withErrors(["Specify at least one value in the fields: user or ident"])->withInput();
}

if ($request->channel == null)
{
return redirect()->back()->withErrors(["Specify a channel this user will receive this message"])->withInput();
}

$this->ircWarningService->updateWarning(
warningId: $request->warning_id,
adminId: Auth::user()->id,
username: $request->username,
ident: $request->ident,
warningMessage: $request->warning_message,
channel: $request->channel
);

return redirect()->route('admin.irc.warnings.edit', ['id' => $request->warning_id])->with('status', 'Warning updated');
}
}
15 changes: 9 additions & 6 deletions cncnet-api/app/Http/Controllers/Admin/PodiumController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admi\Podium\ComputePodiumRequest;
use App\Http\Requests\Admin\Podium\ComputePodiumRequest;
use App\Models\Ladder;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
Expand All @@ -26,11 +26,13 @@ public function getPodiumForm()
return view('admin.podium', compact('ladders', 'fromDate', 'toDate'));
}

public function computePodium(ComputePodiumRequest $request) {
public function computePodium(ComputePodiumRequest $request)
{

if (RateLimiter::tooManyAttempts($this->getRateLimiterKey(), 1)) {
if (RateLimiter::tooManyAttempts($this->getRateLimiterKey(), 1))
{
$seconds = RateLimiter::availableIn($this->getRateLimiterKey());
$message = 'Don\'t submit this form this too often... You may try again in '.$seconds.' seconds.';
$message = 'Don\'t submit this form this too often... You may try again in ' . $seconds . ' seconds.';
return view('admin.podium.result-too-many-attempts', compact('message'));
}

Expand Down Expand Up @@ -69,7 +71,8 @@ public function computePodium(ComputePodiumRequest $request) {
return view('admin.podium.result', compact('players', 'from', 'to', 'ladder'));
}

private function getRateLimiterKey() {
return 'compute-podium-win-count:'.auth()->id();
private function getRateLimiterKey()
{
return 'compute-podium-win-count:' . auth()->id();
}
}
68 changes: 29 additions & 39 deletions cncnet-api/app/Http/Controllers/Api/V2/Bans/ApiBanController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,50 +6,40 @@
use App\Http\Services\AuthService;
use App\Http\Services\LadderService;
use App\Http\Services\PlayerService;
use App\Models\PlayerActiveHandle;
use Carbon\Carbon;
use App\Models\IrcIpAddress;
use App\Models\IrcIpAddressHistory;
use App\Models\IrcUser;
use Exception;
use Illuminate\Http\Request;

class ApiBanController extends Controller
{
private $authService;
private $ladderService;
private $playerService;

public function __construct()
public function checkIn(Request $request)
{
$this->authService = new AuthService();
$this->playerService = new PlayerService;
$this->ladderService = new LadderService;
}
try
{
$ircUser = IrcUser::where("ident", $request->username)->where("ident", $request->ident)->first();
if ($ircUser == null)
{
$ircUser = new IrcUser();
$ircUser->ident = $request->ident;
$ircUser->username = $request->username;
$ircUser->host = $request->host;
$ircUser->save();
}

public function getBans()
{
return [
[
"user" => "cncnet",
"ident" => "a964ad",
"host" => "gamesurge-d3a0cd5b.res.spectrum.com",
"kickBan" => true
],
[
"user" => null,
"ident" => "t364ad",
"host" => null,
"kickBan" => false
],
[
"user" => null,
"ident" => "",
"host" => "*.res.spectrum.com",
"kickBan" => false
],
[
"user" => "cncnet-moderator",
"ident" => null,
"host" => null,
"kickBan" => true
],
];
$ip = isset($_SERVER["HTTP_CF_CONNECTING_IP"]) ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $request->getClientIp();

$ircIpAddressId = IrcIpAddress::getID($ip);
IrcIpAddressHistory::addHistory($ircUser->id, $ircIpAddressId);

// Check for bans, return code

return $ircUser->bans;
}
catch (Exception $ex)
{
dd($ex);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
use App\Http\Services\QuickMatchSpawnService;
use App\Jobs\Qm\FindOpponentJob;
use App\Models\Game;
use App\Models\IpAddress;
use App\Models\IrcIpAddress;
use App\Models\Ladder;
use App\Models\MapPool;
use App\Models\Player;
Expand Down Expand Up @@ -60,7 +60,8 @@ public function __invoke(Request $request, Ladder $ladder, string $playerName)
}

// failsafe, is user allowed to match on 2v2 ladder
if ($ladder->ladder_type == Ladder::TWO_VS_TWO && !$user->userSettings->allow_2v2_ladders) {
if ($ladder->ladder_type == Ladder::TWO_VS_TWO && !$user->userSettings->allow_2v2_ladders)
{
return $this->quickMatchService->onFatalError(
$playerName . ' is not allowed to play on 2v2 ladders, speak with admins for assistance ' . $ladder->abbreviation
);
Expand Down Expand Up @@ -198,7 +199,7 @@ private function onUpdate(Player $player, $request)
$con->qm_match_id = $qmMatch->id;
$con->player_id = $player->id;
$con->peer_id = $peer['id'];
$con->ip_address_id = IpAddress::getID($peer['address']);
$con->ip_address_id = IrcIpAddress::getID($peer['address']);
$con->port = $peer['port'];
$con->rtt = $peer['rtt'];
$con->save();
Expand Down
Loading