Set up all GetLink endpoints

This commit is contained in:
Daniel_I_Am 2020-08-29 13:30:29 +02:00
parent 25c2d13ca3
commit 10d19d35ef
No known key found for this signature in database
GPG Key ID: 80C428FCC9743E84

View File

@ -2,58 +2,118 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\LinkCode;
use App\Services\CodeGeneratorService; use App\Services\CodeGeneratorService;
use App\Services\LodestoneApiService; use App\Services\LodestoneApiService;
use App\Services\LodestoneCacheService; use App\Services\LodestoneCacheService;
use App\UserLink; use App\UserLink;
use Carbon\Carbon;
class LodestoneLinkController extends Controller class LodestoneLinkController extends Controller
{ {
private $codeGeneratorService;
private $lodestoneCacheService;
private $lodestoneApiService;
public function __construct(
CodeGeneratorService $codeGeneratorService,
LodestoneCacheService $lodestoneCacheService,
LodestoneApiService $lodestoneApiService
)
{
$this->codeGeneratorService = $codeGeneratorService;
$this->lodestoneCacheService = $lodestoneCacheService;
$this->lodestoneApiService = $lodestoneApiService;
}
public function checkDiscordName( public function checkDiscordName(
string $server, string $server,
string $name, string $name,
int $discordGuildId, int $discordGuildId,
int $discordUserId, int $discordUserId
CodeGeneratorService $codeGeneratorService,
LodestoneCacheService $lodestoneCacheService,
LodestoneApiService $lodestoneApiService
) { ) {
$character = $lodestoneCacheService->getCharacterByName($server, $name, $lodestoneApiService)->content; $character = $this->lodestoneCacheService->getCharacterByName($server, $name, $this->lodestoneApiService)->content;
if (UserLink::where('lodestoneId', $character['Character']['ID'])->count() > 0) // Check already linked
if (UserLink::where('lodestoneId', $character['Character']['ID'])->count() > 0) {
return [ return [
'linked' => true 'linked' => true,
'linkCode' => null,
'expires' => null
]; ];
}
// TODO: Store this code in the LinkCode table // Check code exists
$code = $codeGeneratorService->generateCode( $linkCode = LinkCode::where('lodestoneId', $character['Character']['ID'])->first();
'discord', $expirationTime = Carbon::now()->addMinutes(5);
$codeGeneratorService->generateIdentifierDiscordName($server, $name, $discordGuildId, $discordUserId) if ($linkCode !== null && $linkCode->expires > Carbon::now()) {
); $linkCode->expires = $expirationTime;
$linkCode->save();
} else {
if ($linkCode !== null)
$linkCode->delete();
$identifier = $this->codeGeneratorService->generateIdentifierDiscordName($server, $name, $discordGuildId, $discordUserId);
$code = $this->codeGeneratorService->generateCode(
'discord',
$identifier
);
$linkCode = LinkCode::create([
'lodestoneId' => $character['Character']['ID'],
'discordUserId' => $discordUserId,
'expires' => $expirationTime,
'code' => $code
]);
}
return [ return [
'linked' => false, 'linked' => false,
'linkCode' => $code 'linkCode' => $linkCode->code,
'expires' => $linkCode->expires
]; ];
} }
public function checkDiscordId( public function checkDiscordId(
int $lodestoneId, int $lodestoneId,
int $discordGuildId, int $discordGuildId,
int $discordUserId, int $discordUserId
CodeGeneratorService $codeGeneratorService
) { ) {
if (UserLink::where('lodestoneId', $lodestoneId)->count() > 0) $character = $this->lodestoneCacheService->getCharacterById($lodestoneId, $this->lodestoneApiService)->content;
// Check already linked
if (UserLink::where('lodestoneId', $character['Character']['ID'])->count() > 0) {
return [ return [
'linked' => true 'linked' => true,
'linkCode' => null,
'expires' => null
]; ];
}
// Check code exists
$linkCode = LinkCode::where('lodestoneId', $character['Character']['ID'])->first();
$expirationTime = Carbon::now()->addMinutes(5);
if ($linkCode !== null && $linkCode->expires > Carbon::now()) {
$linkCode->expires = $expirationTime;
$linkCode->save();
} else {
if ($linkCode !== null)
$linkCode->delete();
$identifier = $this->codeGeneratorService->generateIdentifierDiscordId($lodestoneId, $discordGuildId, $discordUserId);
$code = $this->codeGeneratorService->generateCode(
'discord',
$identifier
);
$linkCode = LinkCode::create([
'lodestoneId' => $character['Character']['ID'],
'discordUserId' => $discordUserId,
'expires' => $expirationTime,
'code' => $code
]);
}
return [ return [
'linked' => false, 'linked' => false,
'linkCode' => $codeGeneratorService->generateCode( 'linkCode' => $linkCode->code,
'discord', 'expires' => $linkCode->expires
$codeGeneratorService->generateIdentifierDiscordId($lodestoneId, $discordGuildId, $discordUserId)
)
]; ];
} }
@ -61,36 +121,90 @@ class LodestoneLinkController extends Controller
string $server, string $server,
string $name, string $name,
string $hostname, string $hostname,
int $websiteUserId, int $websiteUserId
CodeGeneratorService $codeGeneratorService,
LodestoneCacheService $lodestoneCacheService,
LodestoneApiService $lodestoneApiService
) { ) {
$character = $lodestoneCacheService->getCharacterByName($server, $name, $lodestoneApiService)->content; $character = $this->lodestoneCacheService->getCharacterByName($server, $name, $this->lodestoneApiService)->content;
// Check already linked
if (UserLink::where('lodestoneId', $character['Character']['ID'])->count() > 0) {
return [
'linked' => true,
'linkCode' => null,
'expires' => null
];
}
// Check code exists
$linkCode = LinkCode::where('lodestoneId', $character['Character']['ID'])->first();
$expirationTime = Carbon::now()->addMinutes(5);
if ($linkCode !== null && $linkCode->expires > Carbon::now()) {
$linkCode->expires = $expirationTime;
$linkCode->save();
} else {
if ($linkCode !== null)
$linkCode->delete();
$identifier = $this->codeGeneratorService->generateIdentifierWebsiteName($server, $name, $hostname, $websiteUserId);
$code = $this->codeGeneratorService->generateCode(
'discord',
$identifier
);
$linkCode = LinkCode::create([
'lodestoneId' => $character['Character']['ID'],
'websiteUserId' => $websiteUserId,
'expires' => $expirationTime,
'code' => $code
]);
}
return [ return [
'linked' => false, 'linked' => false,
'linkCode' => $codeGeneratorService->generateCode( 'linkCode' => $linkCode->code,
'discord', 'expires' => $linkCode->expires
$codeGeneratorService->generateIdentifierWebsiteName($server, $name, $hostname, $websiteUserId)
)
]; ];
} }
public function checkWebsiteId( public function checkWebsiteId(
int $lodestoneId, int $lodestoneId,
string $hostname, string $hostname,
int $websiteUserId, int $websiteUserId
CodeGeneratorService $codeGeneratorService,
LodestoneCacheService $lodestoneCacheService,
LodestoneApiService $lodestoneApiService
) { ) {
$character = $lodestoneCacheService->getCharacterById($lodestoneId, $lodestoneApiService)->content; $character = $this->lodestoneCacheService->getCharacterById($lodestoneId, $this->lodestoneApiService)->content;
// Check already linked
if (UserLink::where('lodestoneId', $character['Character']['ID'])->count() > 0) {
return [
'linked' => true,
'linkCode' => null,
'expires' => null
];
}
// Check code exists
$linkCode = LinkCode::where('lodestoneId', $character['Character']['ID'])->first();
$expirationTime = Carbon::now()->addMinutes(5);
if ($linkCode !== null && $linkCode->expires > Carbon::now()) {
$linkCode->expires = $expirationTime;
$linkCode->save();
} else {
if ($linkCode !== null)
$linkCode->delete();
$identifier = $this->codeGeneratorService->generateIdentifierWebsiteId($lodestoneId, $hostname, $websiteUserId);
$code = $this->codeGeneratorService->generateCode(
'discord',
$identifier
);
$linkCode = LinkCode::create([
'lodestoneId' => $character['Character']['ID'],
'websiteUserId' => $websiteUserId,
'expires' => $expirationTime,
'code' => $code
]);
}
return [ return [
'linked' => false, 'linked' => false,
'linkCode' => $codeGeneratorService->generateCode( 'linkCode' => $linkCode->code,
'discord', 'expires' => $linkCode->expires
$codeGeneratorService->generateIdentifierWebsiteId($lodestoneId, $hostname, $websiteUserId)
)
]; ];
} }