diff --git a/app/Extensions/DynamicDatabaseConnection.php b/app/Extensions/DynamicDatabaseConnection.php index 3a8ba68d2..d14407427 100644 --- a/app/Extensions/DynamicDatabaseConnection.php +++ b/app/Extensions/DynamicDatabaseConnection.php @@ -25,7 +25,7 @@ class DynamicDatabaseConnection 'port' => $host->port, 'database' => $database, 'username' => $host->username, - 'password' => decrypt($host->password), + 'password' => $host->password, 'charset' => self::DB_CHARSET, 'collation' => self::DB_COLLATION, ]); diff --git a/app/Filament/Resources/ApiKeyResource/Pages/CreateApiKey.php b/app/Filament/Resources/ApiKeyResource/Pages/CreateApiKey.php index e8abde957..322e99dc9 100644 --- a/app/Filament/Resources/ApiKeyResource/Pages/CreateApiKey.php +++ b/app/Filament/Resources/ApiKeyResource/Pages/CreateApiKey.php @@ -19,7 +19,7 @@ class CreateApiKey extends CreateRecord return $form ->schema([ Forms\Components\Hidden::make('identifier')->default(ApiKey::generateTokenIdentifier(ApiKey::TYPE_APPLICATION)), - Forms\Components\Hidden::make('token')->default(encrypt(str_random(ApiKey::KEY_LENGTH))), + Forms\Components\Hidden::make('token')->default(str_random(ApiKey::KEY_LENGTH)), Forms\Components\Hidden::make('user_id') ->default(auth()->user()->id) diff --git a/app/Filament/Resources/ApiKeyResource/Pages/ListApiKeys.php b/app/Filament/Resources/ApiKeyResource/Pages/ListApiKeys.php index 0932848eb..cec780d46 100644 --- a/app/Filament/Resources/ApiKeyResource/Pages/ListApiKeys.php +++ b/app/Filament/Resources/ApiKeyResource/Pages/ListApiKeys.php @@ -28,7 +28,7 @@ class ListApiKeys extends ListRecords Tables\Columns\TextColumn::make('key') ->copyable() ->icon('tabler-clipboard-text') - ->state(fn (ApiKey $key) => $key->identifier . decrypt($key->token)), + ->state(fn (ApiKey $key) => $key->identifier . $key->token), Tables\Columns\TextColumn::make('memo') ->label('Description') diff --git a/app/Filament/Resources/DatabaseHostResource/Pages/CreateDatabaseHost.php b/app/Filament/Resources/DatabaseHostResource/Pages/CreateDatabaseHost.php index 8280c95c6..dd37e5c26 100644 --- a/app/Filament/Resources/DatabaseHostResource/Pages/CreateDatabaseHost.php +++ b/app/Filament/Resources/DatabaseHostResource/Pages/CreateDatabaseHost.php @@ -74,15 +74,6 @@ class CreateDatabaseHost extends CreateRecord ]); } - protected function mutateFormDataBeforeCreate(array $data): array - { - if (isset($data['password'])) { - $data['password'] = encrypt($data['password']); - } - - return $data; - } - protected function getHeaderActions(): array { return [ diff --git a/app/Filament/Resources/DatabaseHostResource/Pages/EditDatabaseHost.php b/app/Filament/Resources/DatabaseHostResource/Pages/EditDatabaseHost.php index 4817796b4..a6084bfc7 100644 --- a/app/Filament/Resources/DatabaseHostResource/Pages/EditDatabaseHost.php +++ b/app/Filament/Resources/DatabaseHostResource/Pages/EditDatabaseHost.php @@ -76,15 +76,6 @@ class EditDatabaseHost extends EditRecord ]; } - protected function mutateFormDataBeforeSave(array $data): array - { - if (isset($data['password'])) { - $data['password'] = encrypt($data['password']); - } - - return $data; - } - protected function getFormActions(): array { return []; diff --git a/app/Filament/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php b/app/Filament/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php index bee230001..e3b622840 100644 --- a/app/Filament/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php +++ b/app/Filament/Resources/DatabaseHostResource/RelationManagers/DatabasesRelationManager.php @@ -28,13 +28,13 @@ class DatabasesRelationManager extends RelationManager ->requiresConfirmation() ->action(fn (DatabasePasswordService $service, Database $database, $set, $get) => $this->rotatePassword($service, $database, $set, $get)) ) - ->formatStateUsing(fn (Database $database) => decrypt($database->password)), + ->formatStateUsing(fn (Database $database) => $database->password), Forms\Components\TextInput::make('remote')->label('Connections From'), Forms\Components\TextInput::make('max_connections'), Forms\Components\TextInput::make('JDBC') ->label('JDBC Connection String') ->columnSpanFull() - ->formatStateUsing(fn (Forms\Get $get, Database $database) => 'jdbc:mysql://' . $get('username') . ':' . urlencode(decrypt($database->password)) . '@' . $database->host->host . ':' . $database->host->port . '/' . $get('database')), + ->formatStateUsing(fn (Forms\Get $get, Database $database) => 'jdbc:mysql://' . $get('username') . ':' . urlencode($database->password) . '@' . $database->host->host . ':' . $database->host->port . '/' . $get('database')), ]); } public function table(Table $table): Table diff --git a/app/Http/Controllers/Admin/NodeAutoDeployController.php b/app/Http/Controllers/Admin/NodeAutoDeployController.php index 95221d33f..1029706c3 100644 --- a/app/Http/Controllers/Admin/NodeAutoDeployController.php +++ b/app/Http/Controllers/Admin/NodeAutoDeployController.php @@ -56,7 +56,7 @@ class NodeAutoDeployController extends Controller return new JsonResponse([ 'node' => $node->id, - 'token' => $key->identifier . decrypt($key->token), + 'token' => $key->identifier . $key->token, ]); } } diff --git a/app/Http/Controllers/Auth/LoginCheckpointController.php b/app/Http/Controllers/Auth/LoginCheckpointController.php index f022d359d..540aca5a0 100644 --- a/app/Http/Controllers/Auth/LoginCheckpointController.php +++ b/app/Http/Controllers/Auth/LoginCheckpointController.php @@ -65,9 +65,7 @@ class LoginCheckpointController extends AbstractLoginController return $this->sendLoginResponse($user, $request); } } else { - $decrypted = decrypt($user->totp_secret); - - if ($this->google2FA->verifyKey($decrypted, (string) $request->input('authentication_code'), config('panel.auth.2fa.window'))) { + if ($this->google2FA->verifyKey($user->totp_secret, (string) $request->input('authentication_code'), config('panel.auth.2fa.window'))) { Event::dispatch(new ProvidedAuthenticationToken($user)); return $this->sendLoginResponse($user, $request); diff --git a/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php b/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php index ce40796b8..5bacb25b6 100644 --- a/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php +++ b/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php @@ -41,7 +41,7 @@ class DaemonAuthenticate /** @var Node $node */ $node = Node::query()->where('daemon_token_id', $parts[0])->firstOrFail(); - if (hash_equals((string) decrypt($node->daemon_token), $parts[1])) { + if (hash_equals((string) $node->daemon_token, $parts[1])) { $request->attributes->set('node', $node); return $next($request); diff --git a/app/Models/ApiKey.php b/app/Models/ApiKey.php index 629212526..21c044c54 100644 --- a/app/Models/ApiKey.php +++ b/app/Models/ApiKey.php @@ -149,6 +149,7 @@ class ApiKey extends Model 'user_id' => 'int', 'last_used_at' => 'datetime', 'expires_at' => 'datetime', + 'token' => 'encrypted', self::CREATED_AT => 'datetime', self::UPDATED_AT => 'datetime', 'r_' . AdminAcl::RESOURCE_USERS => 'int', @@ -188,7 +189,7 @@ class ApiKey extends Model $identifier = substr($token, 0, self::IDENTIFIER_LENGTH); $model = static::where('identifier', $identifier)->first(); - if (!is_null($model) && decrypt($model->token) === substr($token, strlen($identifier))) { + if (!is_null($model) && $model->token === substr($token, strlen($identifier))) { return $model; } diff --git a/app/Models/Database.php b/app/Models/Database.php index 6d4fde2f9..7058ccf26 100644 --- a/app/Models/Database.php +++ b/app/Models/Database.php @@ -64,6 +64,7 @@ class Database extends Model 'server_id' => 'integer', 'database_host_id' => 'integer', 'max_connections' => 'integer', + 'password' => 'encrypted' ]; } diff --git a/app/Models/DatabaseHost.php b/app/Models/DatabaseHost.php index e06c3b957..159e17261 100644 --- a/app/Models/DatabaseHost.php +++ b/app/Models/DatabaseHost.php @@ -60,6 +60,7 @@ class DatabaseHost extends Model 'id' => 'integer', 'max_databases' => 'integer', 'node_id' => 'integer', + 'password' => 'encrypted', 'created_at' => 'immutable_datetime', 'updated_at' => 'immutable_datetime', ]; diff --git a/app/Models/Node.php b/app/Models/Node.php index c693c5b0d..7a732ca7a 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -127,6 +127,7 @@ class Node extends Model 'cpu' => 'integer', 'daemon_listen' => 'integer', 'daemon_sftp' => 'integer', + 'daemon_token' => 'encrypted', 'behind_proxy' => 'boolean', 'public' => 'boolean', 'maintenance_mode' => 'boolean', @@ -143,7 +144,7 @@ class Node extends Model { static::creating(function (self $node) { $node->uuid = Str::uuid(); - $node->daemon_token = encrypt(Str::random(self::DAEMON_TOKEN_LENGTH)); + $node->daemon_token = Str::random(self::DAEMON_TOKEN_LENGTH); $node->daemon_token_id = Str::random(self::DAEMON_TOKEN_ID_LENGTH); return true; @@ -171,7 +172,7 @@ class Node extends Model 'debug' => false, 'uuid' => $this->uuid, 'token_id' => $this->daemon_token_id, - 'token' => decrypt($this->daemon_token), + 'token' => $this->daemon_token, 'api' => [ 'host' => '0.0.0.0', 'port' => $this->daemon_listen, @@ -209,16 +210,6 @@ class Node extends Model return json_encode($this->getConfiguration(), $pretty ? JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT : JSON_UNESCAPED_SLASHES); } - /** - * Helper function to return the decrypted key for a node. - */ - public function getDecryptedKey(): string - { - return (string) decrypt( - $this->daemon_token - ); - } - public function isUnderMaintenance(): bool { return $this->maintenance_mode; diff --git a/app/Models/Traits/HasAccessTokens.php b/app/Models/Traits/HasAccessTokens.php index f6acac458..14a0f685b 100644 --- a/app/Models/Traits/HasAccessTokens.php +++ b/app/Models/Traits/HasAccessTokens.php @@ -31,7 +31,7 @@ trait HasAccessTokens 'user_id' => $this->id, 'key_type' => ApiKey::TYPE_ACCOUNT, 'identifier' => ApiKey::generateTokenIdentifier(ApiKey::TYPE_ACCOUNT), - 'token' => encrypt($plain = Str::random(ApiKey::KEY_LENGTH)), + 'token' => $plain = Str::random(ApiKey::KEY_LENGTH), 'memo' => $memo ?? '', 'allowed_ips' => $ips ?? [], ]); diff --git a/app/Models/User.php b/app/Models/User.php index b50dba9f0..f089aba07 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -171,6 +171,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac 'use_totp' => 'boolean', 'gravatar' => 'boolean', 'totp_authenticated_at' => 'datetime', + 'totp_secret' => 'encrypted', ]; } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 6317b6213..1c0deb622 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -60,7 +60,7 @@ class AppServiceProvider extends ServiceProvider 'daemon', fn (Node $node, array $headers = []) => Http::acceptJson() ->asJson() - ->withToken($node->getDecryptedKey()) + ->withToken($node->daemon_token) ->withHeaders($headers) ->withOptions(['verify' => (bool) app()->environment('production')]) ->timeout(config('panel.guzzle.timeout')) diff --git a/app/Services/Api/KeyCreationService.php b/app/Services/Api/KeyCreationService.php index 521702d4e..7fde94ba2 100644 --- a/app/Services/Api/KeyCreationService.php +++ b/app/Services/Api/KeyCreationService.php @@ -31,7 +31,7 @@ class KeyCreationService $data = array_merge($data, [ 'key_type' => $this->keyType, 'identifier' => ApiKey::generateTokenIdentifier($this->keyType), - 'token' => encrypt(str_random(ApiKey::KEY_LENGTH)), + 'token' => str_random(ApiKey::KEY_LENGTH), ]); if ($this->keyType === ApiKey::TYPE_APPLICATION) { diff --git a/app/Services/Databases/DatabaseManagementService.php b/app/Services/Databases/DatabaseManagementService.php index 9e5f8cf5a..364e89c6a 100644 --- a/app/Services/Databases/DatabaseManagementService.php +++ b/app/Services/Databases/DatabaseManagementService.php @@ -86,9 +86,7 @@ class DatabaseManagementService $data = array_merge($data, [ 'server_id' => $server->id, 'username' => sprintf('u%d_%s', $server->id, str_random(10)), - 'password' => encrypt( - Utilities::randomStringWithSpecialCharacters(24) - ), + 'password' => Utilities::randomStringWithSpecialCharacters(24), ]); return $this->connection->transaction(function () use ($data, &$database) { @@ -100,7 +98,7 @@ class DatabaseManagementService $database->createUser( $database->username, $database->remote, - decrypt($database->password), + $database->password, $database->max_connections ); $database->assignUserToDatabase($database->database, $database->username, $database->remote); diff --git a/app/Services/Databases/DatabasePasswordService.php b/app/Services/Databases/DatabasePasswordService.php index 71bae762a..47a8162f8 100644 --- a/app/Services/Databases/DatabasePasswordService.php +++ b/app/Services/Databases/DatabasePasswordService.php @@ -33,7 +33,7 @@ class DatabasePasswordService $this->dynamic->set('dynamic', $database->database_host_id); $database->update([ - 'password' => encrypt($password), + 'password' => $password, ]); $database->dropUser($database->username, $database->remote); diff --git a/app/Services/Databases/Hosts/HostCreationService.php b/app/Services/Databases/Hosts/HostCreationService.php index f18568949..dd9479aec 100644 --- a/app/Services/Databases/Hosts/HostCreationService.php +++ b/app/Services/Databases/Hosts/HostCreationService.php @@ -28,7 +28,7 @@ class HostCreationService { return $this->connection->transaction(function () use ($data) { $host = DatabaseHost::query()->create([ - 'password' => encrypt(array_get($data, 'password')), + 'password' => array_get($data, 'password'), 'name' => array_get($data, 'name'), 'host' => array_get($data, 'host'), 'port' => array_get($data, 'port'), diff --git a/app/Services/Databases/Hosts/HostUpdateService.php b/app/Services/Databases/Hosts/HostUpdateService.php index 16f55dddd..d4975cae0 100644 --- a/app/Services/Databases/Hosts/HostUpdateService.php +++ b/app/Services/Databases/Hosts/HostUpdateService.php @@ -26,9 +26,7 @@ class HostUpdateService */ public function handle(int $hostId, array $data): DatabaseHost { - if (!empty(array_get($data, 'password'))) { - $data['password'] = encrypt($data['password']); - } else { + if (empty(array_get($data, 'password'))) { unset($data['password']); } diff --git a/app/Services/Nodes/NodeCreationService.php b/app/Services/Nodes/NodeCreationService.php index 0c7720d33..1c10b328d 100644 --- a/app/Services/Nodes/NodeCreationService.php +++ b/app/Services/Nodes/NodeCreationService.php @@ -16,7 +16,7 @@ class NodeCreationService public function handle(array $data): Node { $data['uuid'] = Uuid::uuid4()->toString(); - $data['daemon_token'] = encrypt(Str::random(Node::DAEMON_TOKEN_LENGTH)); + $data['daemon_token'] = Str::random(Node::DAEMON_TOKEN_LENGTH); $data['daemon_token_id'] = Str::random(Node::DAEMON_TOKEN_ID_LENGTH); return Node::query()->create($data); diff --git a/app/Services/Nodes/NodeJWTService.php b/app/Services/Nodes/NodeJWTService.php index 0221c5236..325fe04c0 100644 --- a/app/Services/Nodes/NodeJWTService.php +++ b/app/Services/Nodes/NodeJWTService.php @@ -63,7 +63,7 @@ class NodeJWTService public function handle(Node $node, ?string $identifiedBy, string $algo = 'md5'): Plain { $identifier = hash($algo, $identifiedBy); - $config = Configuration::forSymmetricSigner(new Sha256(), InMemory::plainText($node->getDecryptedKey())); + $config = Configuration::forSymmetricSigner(new Sha256(), InMemory::plainText($node->daemon_token)); $builder = $config->builder(new TimestampDates()) ->issuedBy(config('app.url')) diff --git a/app/Services/Nodes/NodeUpdateService.php b/app/Services/Nodes/NodeUpdateService.php index 76d1aadbd..c4f769f8a 100644 --- a/app/Services/Nodes/NodeUpdateService.php +++ b/app/Services/Nodes/NodeUpdateService.php @@ -28,7 +28,7 @@ class NodeUpdateService public function handle(Node $node, array $data, bool $resetToken = false): Node { if ($resetToken) { - $data['daemon_token'] = encrypt(Str::random(Node::DAEMON_TOKEN_LENGTH)); + $data['daemon_token'] = Str::random(Node::DAEMON_TOKEN_LENGTH); $data['daemon_token_id'] = Str::random(Node::DAEMON_TOKEN_ID_LENGTH); } diff --git a/app/Services/Users/ToggleTwoFactorService.php b/app/Services/Users/ToggleTwoFactorService.php index 321643a35..64518e39b 100644 --- a/app/Services/Users/ToggleTwoFactorService.php +++ b/app/Services/Users/ToggleTwoFactorService.php @@ -32,9 +32,7 @@ class ToggleTwoFactorService */ public function handle(User $user, string $token, bool $toggleState = null): array { - $secret = decrypt($user->totp_secret); - - $isValidToken = $this->google2FA->verifyKey($secret, $token, config()->get('panel.auth.2fa.window')); + $isValidToken = $this->google2FA->verifyKey($user->totp_secret, $token, config()->get('panel.auth.2fa.window')); if (!$isValidToken) { throw new TwoFactorAuthenticationTokenInvalid(); diff --git a/app/Services/Users/TwoFactorSetupService.php b/app/Services/Users/TwoFactorSetupService.php index dd1671d64..fb906c9db 100644 --- a/app/Services/Users/TwoFactorSetupService.php +++ b/app/Services/Users/TwoFactorSetupService.php @@ -26,7 +26,7 @@ class TwoFactorSetupService throw new \RuntimeException($exception->getMessage(), 0, $exception); } - $user->totp_secret = encrypt($secret); + $user->totp_secret = $secret; $user->save(); $company = urlencode(preg_replace('/\s/', '', config('app.name'))); diff --git a/app/Transformers/Api/Application/ServerDatabaseTransformer.php b/app/Transformers/Api/Application/ServerDatabaseTransformer.php index 1091dc867..e74cd2586 100644 --- a/app/Transformers/Api/Application/ServerDatabaseTransformer.php +++ b/app/Transformers/Api/Application/ServerDatabaseTransformer.php @@ -45,7 +45,7 @@ class ServerDatabaseTransformer extends BaseTransformer { return $this->item($model, function (Database $model) { return [ - 'password' => decrypt($model->password), + 'password' => $model->password, ]; }, 'database_password'); } diff --git a/app/Transformers/Api/Client/DatabaseTransformer.php b/app/Transformers/Api/Client/DatabaseTransformer.php index 2739ac7ec..2d3077976 100644 --- a/app/Transformers/Api/Client/DatabaseTransformer.php +++ b/app/Transformers/Api/Client/DatabaseTransformer.php @@ -55,7 +55,7 @@ class DatabaseTransformer extends BaseClientTransformer return $this->item($database, function (Database $model) { return [ - 'password' => decrypt($model->password), + 'password' => $model->password, ]; }, 'database_password'); } diff --git a/database/Factories/ApiKeyFactory.php b/database/Factories/ApiKeyFactory.php index bfcb4b98b..3361433b4 100644 --- a/database/Factories/ApiKeyFactory.php +++ b/database/Factories/ApiKeyFactory.php @@ -26,7 +26,7 @@ class ApiKeyFactory extends Factory return [ 'key_type' => ApiKey::TYPE_APPLICATION, 'identifier' => ApiKey::generateTokenIdentifier(ApiKey::TYPE_APPLICATION), - 'token' => $token ?: $token = encrypt(Str::random(ApiKey::KEY_LENGTH)), + 'token' => $token ?: $token = Str::random(ApiKey::KEY_LENGTH), 'allowed_ips' => null, 'memo' => 'Test Function Key', 'created_at' => Carbon::now(), diff --git a/database/Factories/DatabaseFactory.php b/database/Factories/DatabaseFactory.php index 963c52add..d590a0e13 100644 --- a/database/Factories/DatabaseFactory.php +++ b/database/Factories/DatabaseFactory.php @@ -27,7 +27,7 @@ class DatabaseFactory extends Factory 'database' => Str::random(10), 'username' => Str::random(10), 'remote' => '%', - 'password' => $password ?: encrypt('test123'), + 'password' => $password ?: 'test123', 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), ]; diff --git a/database/Factories/DatabaseHostFactory.php b/database/Factories/DatabaseHostFactory.php index aaf8bbc69..ad76eac44 100644 --- a/database/Factories/DatabaseHostFactory.php +++ b/database/Factories/DatabaseHostFactory.php @@ -3,7 +3,6 @@ namespace Database\Factories; use App\Models\DatabaseHost; -use Illuminate\Support\Facades\Crypt; use Illuminate\Database\Eloquent\Factories\Factory; class DatabaseHostFactory extends Factory @@ -25,7 +24,7 @@ class DatabaseHostFactory extends Factory 'host' => $this->faker->unique()->ipv4(), 'port' => 3306, 'username' => $this->faker->colorName(), - 'password' => Crypt::encrypt($this->faker->word()), + 'password' => $this->faker->word(), ]; } } diff --git a/database/Factories/NodeFactory.php b/database/Factories/NodeFactory.php index 011db38a3..19a1fbf7b 100644 --- a/database/Factories/NodeFactory.php +++ b/database/Factories/NodeFactory.php @@ -5,7 +5,6 @@ namespace Database\Factories; use Ramsey\Uuid\Uuid; use Illuminate\Support\Str; use App\Models\Node; -use Illuminate\Support\Facades\Crypt; use Illuminate\Database\Eloquent\Factories\Factory; class NodeFactory extends Factory @@ -37,7 +36,7 @@ class NodeFactory extends Factory 'cpu_overallocate' => 0, 'upload_size' => 100, 'daemon_token_id' => Str::random(Node::DAEMON_TOKEN_ID_LENGTH), - 'daemon_token' => Crypt::encrypt(Str::random(Node::DAEMON_TOKEN_LENGTH)), + 'daemon_token' => Str::random(Node::DAEMON_TOKEN_LENGTH), 'daemon_listen' => 8080, 'daemon_sftp' => 2022, 'daemon_base' => '/var/lib/panel/volumes', diff --git a/resources/views/admin/api/index.blade.php b/resources/views/admin/api/index.blade.php index 8d848d403..717257187 100644 --- a/resources/views/admin/api/index.blade.php +++ b/resources/views/admin/api/index.blade.php @@ -33,7 +33,7 @@ @foreach($keys as $key)
{{ $key->identifier }}{{ decrypt($key->token) }}
{{ $key->identifier }}{{ $key->token }}