args['type'] ?? ''; switch ($type) { case APP_ENCRYPTION_TYPE_PROJECT_MASTER_KEY: $project = new Document($this->args['project'] ?? []); $this->rotateMasterKeyForProject($project); break; default: Console::error('No encryption operation type: ' . $type); } } protected function rotateMasterKeyForProject(Document $project): void { $projectId = $project->getId(); $dbForConsole = $this->getConsoleDB(); $oldKey = $project->getAttribute('keyId', ''); $secret = Authorization::skip(fn() => $dbForConsole->createDocument('secrets', new Document([ '$id' => $dbForConsole->getId(), '$read' => [], '$write' => [], '$collection' => 'secrets', 'secret' => OpenSSL::secretString(), ]))); $dbForConsole->updateDocument( 'projects', $projectId, $project ->setAttribute('keyId', $secret->getId()) ->setAttribute('keyRotationDate', time() + App::getEnv('_APP_KEY_ROTATION_INTERVAL', 60 * 60 * 24 * 90)) ); } }