Improve logic for logging into the websocket of the target node
This commit is contained in:
parent
5c5e2e24f1
commit
01926e2896
6 changed files with 63 additions and 31 deletions
|
@ -61,15 +61,18 @@ class WebsocketController extends ClientApiController
|
|||
$permissions = $this->permissionsService->handle($server, $user);
|
||||
|
||||
$node = null;
|
||||
|
||||
// Check if there is a transfer query param asking to connect to the target node's websocket.
|
||||
if ($request->query('transfer', 'false') === 'true') {
|
||||
if ($server->transfer !== null) {
|
||||
// Check if the user has permissions to receive transfer logs.
|
||||
if (! in_array('admin.websocket.transfer', $permissions)) {
|
||||
throw new HttpException(Response::HTTP_FORBIDDEN, 'You do not have permission to get transfer logs');
|
||||
throw new HttpException(Response::HTTP_FORBIDDEN, 'You do not have permission to view transfer logs');
|
||||
}
|
||||
|
||||
$node = $server->transfer->newNode;
|
||||
// Redirect the websocket request to the new node if the server has been archived.
|
||||
if ($server->transfer->archived) {
|
||||
$node = $server->transfer->newNode;
|
||||
} else {
|
||||
$node = $server->node;
|
||||
}
|
||||
} else {
|
||||
$node = $server->node;
|
||||
}
|
||||
|
|
|
@ -112,7 +112,6 @@ class ServerTransferController extends Controller
|
|||
|
||||
// Unsuspend the server and don't continue the transfer.
|
||||
if (! $request->input('successful')) {
|
||||
//$this->suspensionService->toggle($server, 'unsuspend');
|
||||
$server->transfer->forceFill([
|
||||
'successful' => false,
|
||||
])->saveOrFail();
|
||||
|
@ -142,6 +141,12 @@ class ServerTransferController extends Controller
|
|||
->relatedTo($server->uuid, true)
|
||||
->getToken($signer, new Key($server->node->getDecryptedKey()));
|
||||
|
||||
// Update the archived field on the transfer to make clients connect to the websocket
|
||||
// on the new node to be able to receive transfer logs.
|
||||
$server->transfer->forceFill([
|
||||
'archived' => true,
|
||||
])->saveOrFail();
|
||||
|
||||
// On the daemon transfer repository, make sure to set the node after the server
|
||||
// because setServer() tells the repository to use the server's node and not the one
|
||||
// we want to specify.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue