Use beginning of UUID for server uuidShort
This commit is contained in:
parent
85e75a2808
commit
36837df0a6
|
@ -15,6 +15,7 @@ This project follows [Semantic Versioning](http://semver.org) guidelines.
|
||||||
* Databases are now properly paginated when viewing a database host.
|
* Databases are now properly paginated when viewing a database host.
|
||||||
* No more loading daemon keys for every server model being loaded, some of us value our databases.
|
* No more loading daemon keys for every server model being loaded, some of us value our databases.
|
||||||
* Changed behavior of the subuser middleware to add a daemon access key if one is missing from the database for some reason.
|
* Changed behavior of the subuser middleware to add a daemon access key if one is missing from the database for some reason.
|
||||||
|
* Server short-codes are now based on the UUID as they were in previous versions of Pterodactyl.
|
||||||
|
|
||||||
## v0.7.4-h1 (Derelict Dermodactylus)
|
## v0.7.4-h1 (Derelict Dermodactylus)
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -136,4 +136,13 @@ interface ServerRepositoryInterface extends RepositoryInterface, SearchableInter
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getServersForPowerActionCount(array $servers = [], array $nodes = []): int;
|
public function getServersForPowerActionCount(array $servers = [], array $nodes = []): int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given UUID and UUID-Short string are unique to a server.
|
||||||
|
*
|
||||||
|
* @param string $uuid
|
||||||
|
* @param string $short
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isUniqueUuidCombo(string $uuid, string $short): bool;
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,6 +303,18 @@ class ServerRepository extends EloquentRepository implements ServerRepositoryInt
|
||||||
return $this->getServersForPowerAction($servers, $nodes, true);
|
return $this->getServersForPowerAction($servers, $nodes, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given UUID and UUID-Short string are unique to a server.
|
||||||
|
*
|
||||||
|
* @param string $uuid
|
||||||
|
* @param string $short
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isUniqueUuidCombo(string $uuid, string $short): bool
|
||||||
|
{
|
||||||
|
return ! $this->getBuilder()->where('uuid', '=', $uuid)->orWhere('uuidShort', '=', $short)->exists();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an array of server IDs that a given user can access based
|
* Return an array of server IDs that a given user can access based
|
||||||
* on owner and subuser permissions.
|
* on owner and subuser permissions.
|
||||||
|
|
|
@ -210,10 +210,12 @@ class ServerCreationService
|
||||||
*/
|
*/
|
||||||
private function createModel(array $data): Server
|
private function createModel(array $data): Server
|
||||||
{
|
{
|
||||||
|
$uuid = $this->generateUniqueUuidCombo();
|
||||||
|
|
||||||
return $this->repository->create([
|
return $this->repository->create([
|
||||||
'external_id' => array_get($data, 'external_id'),
|
'external_id' => array_get($data, 'external_id'),
|
||||||
'uuid' => Uuid::uuid4()->toString(),
|
'uuid' => $uuid,
|
||||||
'uuidShort' => str_random(8),
|
'uuidShort' => substr($uuid, 0, 8),
|
||||||
'node_id' => array_get($data, 'node_id'),
|
'node_id' => array_get($data, 'node_id'),
|
||||||
'name' => array_get($data, 'name'),
|
'name' => array_get($data, 'name'),
|
||||||
'description' => array_get($data, 'description') ?? '',
|
'description' => array_get($data, 'description') ?? '',
|
||||||
|
@ -289,4 +291,20 @@ class ServerCreationService
|
||||||
|
|
||||||
return $allocation->node_id;
|
return $allocation->node_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a unique UUID and UUID-Short combo for a server.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function generateUniqueUuidCombo(): string
|
||||||
|
{
|
||||||
|
$uuid = Uuid::uuid4()->toString();
|
||||||
|
|
||||||
|
if (! $this->repository->isUniqueUuidCombo($uuid, substr($uuid, 0, 8))) {
|
||||||
|
return $this->generateUniqueUuidCombo();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $uuid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,8 +116,14 @@ class ServerCreationServiceTest extends TestCase
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->connection->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull();
|
$this->connection->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull();
|
||||||
|
$this->repository->shouldReceive('isUniqueUuidCombo')
|
||||||
|
->once()
|
||||||
|
->with($this->getKnownUuid(), substr($this->getKnownUuid(), 0, 8))
|
||||||
|
->andReturn(true);
|
||||||
|
|
||||||
$this->repository->shouldReceive('create')->with(m::subset([
|
$this->repository->shouldReceive('create')->with(m::subset([
|
||||||
'uuid' => $this->getKnownUuid(),
|
'uuid' => $this->getKnownUuid(),
|
||||||
|
'uuidShort' => substr($this->getKnownUuid(), 0, 8),
|
||||||
'node_id' => $model->node_id,
|
'node_id' => $model->node_id,
|
||||||
'allocation_id' => $model->allocation_id,
|
'allocation_id' => $model->allocation_id,
|
||||||
'owner_id' => $model->owner_id,
|
'owner_id' => $model->owner_id,
|
||||||
|
@ -164,8 +170,14 @@ class ServerCreationServiceTest extends TestCase
|
||||||
$this->eggRepository->shouldReceive('setColumns->find')->once()->with($model->egg_id)->andReturn($eggModel);
|
$this->eggRepository->shouldReceive('setColumns->find')->once()->with($model->egg_id)->andReturn($eggModel);
|
||||||
|
|
||||||
$this->validatorService->shouldReceive('setUserLevel->handle')->once()->andReturn(collect([]));
|
$this->validatorService->shouldReceive('setUserLevel->handle')->once()->andReturn(collect([]));
|
||||||
$this->repository->shouldReceive('create')->once()->with(m::subset([
|
$this->repository->shouldReceive('isUniqueUuidCombo')
|
||||||
|
->once()
|
||||||
|
->with($this->getKnownUuid(), substr($this->getKnownUuid(), 0, 8))
|
||||||
|
->andReturn(true);
|
||||||
|
|
||||||
|
$this->repository->shouldReceive('create')->with(m::subset([
|
||||||
'uuid' => $this->getKnownUuid(),
|
'uuid' => $this->getKnownUuid(),
|
||||||
|
'uuidShort' => substr($this->getKnownUuid(), 0, 8),
|
||||||
'node_id' => $model->node_id,
|
'node_id' => $model->node_id,
|
||||||
'allocation_id' => $model->allocation_id,
|
'allocation_id' => $model->allocation_id,
|
||||||
'nest_id' => $model->nest_id,
|
'nest_id' => $model->nest_id,
|
||||||
|
@ -211,8 +223,14 @@ class ServerCreationServiceTest extends TestCase
|
||||||
$this->allocationSelectionService->shouldReceive('handle')->once()->withNoArgs()->andReturn($allocationModel);
|
$this->allocationSelectionService->shouldReceive('handle')->once()->withNoArgs()->andReturn($allocationModel);
|
||||||
|
|
||||||
$this->validatorService->shouldReceive('setUserLevel->handle')->once()->andReturn(collect([]));
|
$this->validatorService->shouldReceive('setUserLevel->handle')->once()->andReturn(collect([]));
|
||||||
$this->repository->shouldReceive('create')->once()->with(m::subset([
|
$this->repository->shouldReceive('isUniqueUuidCombo')
|
||||||
|
->once()
|
||||||
|
->with($this->getKnownUuid(), substr($this->getKnownUuid(), 0, 8))
|
||||||
|
->andReturn(true);
|
||||||
|
|
||||||
|
$this->repository->shouldReceive('create')->with(m::subset([
|
||||||
'uuid' => $this->getKnownUuid(),
|
'uuid' => $this->getKnownUuid(),
|
||||||
|
'uuidShort' => substr($this->getKnownUuid(), 0, 8),
|
||||||
'node_id' => $model->node_id,
|
'node_id' => $model->node_id,
|
||||||
'allocation_id' => $model->allocation_id,
|
'allocation_id' => $model->allocation_id,
|
||||||
'nest_id' => $model->nest_id,
|
'nest_id' => $model->nest_id,
|
||||||
|
@ -244,6 +262,7 @@ class ServerCreationServiceTest extends TestCase
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->connection->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull();
|
$this->connection->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull();
|
||||||
|
$this->repository->shouldReceive('isUniqueUuidCombo')->once()->andReturn(true);
|
||||||
$this->repository->shouldReceive('create')->once()->andReturn($model);
|
$this->repository->shouldReceive('create')->once()->andReturn($model);
|
||||||
$this->allocationRepository->shouldReceive('assignAllocationsToServer')->once()->andReturn(1);
|
$this->allocationRepository->shouldReceive('assignAllocationsToServer')->once()->andReturn(1);
|
||||||
$this->validatorService->shouldReceive('setUserLevel')->once()->andReturnSelf();
|
$this->validatorService->shouldReceive('setUserLevel')->once()->andReturnSelf();
|
||||||
|
|
Loading…
Reference in New Issue