Implement post routes on link controller

This commit is contained in:
Daniel_I_Am 2020-08-29 19:20:02 +02:00
parent 10d6c7bb25
commit f5c47ceaa6
No known key found for this signature in database
GPG Key ID: 80C428FCC9743E84
2 changed files with 73 additions and 8 deletions

View File

@ -68,7 +68,7 @@ class LodestoneLinkController extends Controller
) {
$lodestoneId = $this->lodestoneCacheService->getCharacterByName($server, $name, $this->lodestoneApiService)->lodestoneId;
return $this->lodestoneLinkingService->validateLinkDiscord($lodestoneId, $discordUserId, $request->post('code'));
return $this->lodestoneLinkingService->validateLinkDiscord($lodestoneId, $discordUserId, $request->json()->get('code'));
}
public function linkDiscordId(
@ -76,7 +76,7 @@ class LodestoneLinkController extends Controller
int $discordUserId,
Request $request
) {
return $this->lodestoneLinkingService->validateLinkDiscord($lodestoneId, $discordUserId, $request->post('code'));
return $this->lodestoneLinkingService->validateLinkDiscord($lodestoneId, $discordUserId, $request->json()->get('code'));
}
public function linkWebsiteName(
@ -88,7 +88,7 @@ class LodestoneLinkController extends Controller
) {
$lodestoneId = $this->lodestoneCacheService->getCharacterByName($server, $name, $this->lodestoneApiService)->lodestoneId;
return $this->lodestoneLinkingService->validateLinkWebsite($lodestoneId, $hostname, $websiteUserId, $request->post('code'));
return $this->lodestoneLinkingService->validateLinkWebsite($lodestoneId, $hostname, $websiteUserId, $request->json()->get('code'));
}
public function linkWebsiteId(
@ -97,6 +97,6 @@ class LodestoneLinkController extends Controller
int $websiteUserId,
Request $request
) {
return $this->lodestoneLinkingService->validateLinkWebsite($lodestoneId, $hostname, $websiteUserId, $request->post('code'));
return $this->lodestoneLinkingService->validateLinkWebsite($lodestoneId, $hostname, $websiteUserId, $request->json()->get('code'));
}
}

View File

@ -96,17 +96,82 @@ class LodestoneLinkingService
];
}
public function validateLinkDiscord($lodestoneId, int $discordUserId, string $code)
public function validateLinkDiscord($lodestoneId, $discordUserId, $code)
{
$character = $this->lodestoneCacheService->getCharacterById($lodestoneId, $this->lodestoneApiService)->content;
$linkCode = LinkCode::where('expires', '>', Carbon::now())
->where('lodestoneId', $lodestoneId)
->where('discordUserId', $discordUserId)
->first();
if ($linkCode === null) {
// There is no code for that user
return $this->getLinkDiscord($lodestoneId, $discordUserId);
}
if ($linkCode->code !== $code) {
// The provided code is not valid
return [
'linked' => false,
'error' => 'Invalid code'
];
}
UserLink::updateOrCreate([
'lodestoneId' => $lodestoneId
], [
'discordUserId' => $discordUserId
]);
$linkCode->delete();
return [
'error' => 'Not yet implemented'
'linked' => true,
'lodestoneId' => $character['Character']['ID'],
'server' => $character['Character']['Server'],
'name' => $character['Character']['Name'],
'discordUserId' => $discordUserId
];
}
public function validateLinkWebsite($lodestoneId, string $hostname, int $websiteUserId, string $code)
public function validateLinkWebsite($lodestoneId, $hostname, $websiteUserId, $code)
{
$character = $this->lodestoneCacheService->getCharacterById($lodestoneId, $this->lodestoneApiService)->content;
$linkCode = LinkCode::where('expires', '>', Carbon::now())
->where('lodestoneId', $lodestoneId)
->where('websiteHostname', $hostname)
->where('websiteUserId', $websiteUserId)
->first();
if ($linkCode === null) {
// There is no code for that user
return $this->getLinkWebsite($lodestoneId, $hostname, $websiteUserId);
}
if ($linkCode->code !== $code) {
// The provided code is not valid
return [
'linked' => false,
'error' => 'Invalid code'
];
}
UserLink::updateOrCreate([
'lodestoneId' => $lodestoneId
], [
'websiteHostname' => $hostname,
'websiteUserId' => $websiteUserId
]);
$linkCode->delete();
return [
'error' => 'Not yet implemented'
'linked' => true,
'lodestoneId' => $character['Character']['ID'],
'server' => $character['Character']['Server'],
'name' => $character['Character']['Name'],
'websiteHostname' => $hostname,
'websiteUserId' => $websiteUserId
];
}
}