From a9e612d5bea11314bf4cb9ab033b60436bb84887 Mon Sep 17 00:00:00 2001 From: Ben Peachey Date: Mon, 7 Sep 2026 11:31:12 +0200 Subject: [PATCH 1/2] Change StorageServer::createStorage() to allow providing a storage ID. --- lib/StorageServer.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/StorageServer.php b/lib/StorageServer.php index 40aa5ae..1c2ed3c 100644 --- a/lib/StorageServer.php +++ b/lib/StorageServer.php @@ -33,23 +33,30 @@ public static function setStorageOwner($storageId, $owner) ]); } - public static function createStorage($ownerWebId) + public static function createStorage($ownerWebId, $storageId = null) { - $generatedStorageId = bin2hex(random_bytes(16)); - while (self::storageIdExists($generatedStorageId)) { + if (empty($storageId)) { $generatedStorageId = bin2hex(random_bytes(16)); + + while (self::storageIdExists($generatedStorageId)) { + $generatedStorageId = bin2hex(random_bytes(16)); + } + + $storageId = $generatedStorageId; } + Db::connect(); $query = Db::$pdo->prepare( 'INSERT OR REPLACE INTO storage VALUES(:storageId, :owner)' ); $query->execute([ - ':storageId' => $generatedStorageId, - ':owner' => $ownerWebId + ':storageId' => $storageId, + ':owner' => $ownerWebId, ]); + return [ - "storageId" => $generatedStorageId, - "storageUrl" => "https://storage-" . $generatedStorageId . "." . BASEDOMAIN . "/" + "storageId" => $storageId, + "storageUrl" => "https://storage-" . $storageId . "." . BASEDOMAIN . "/", ]; } From 85e969fc423e39897f8093868cf2668b3b68a5f7 Mon Sep 17 00:00:00 2001 From: Ben Peachey Date: Mon, 7 Sep 2026 11:32:07 +0200 Subject: [PATCH 2/2] Change User::createUser() to allow providing a user ID. --- lib/User.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/User.php b/lib/User.php index 34ae5fe..888e030 100644 --- a/lib/User.php +++ b/lib/User.php @@ -111,26 +111,33 @@ public static function createUser($newUser) if (!self::validatePasswordStrength($newUser['password'])) { return false; } - $generatedUserId = bin2hex(random_bytes(16)); - while (self::userIdExists($generatedUserId)) { + + if (! isset($newUser['userId'])) { $generatedUserId = bin2hex(random_bytes(16)); + + while (self::userIdExists($generatedUserId)) { + $generatedUserId = bin2hex(random_bytes(16)); + } + + $newUser['userId'] = $generatedUserId; } + $query = Db::$pdo->prepare( 'INSERT INTO users VALUES (:userId, :email, :passwordHash, :data)' ); $queryParams = []; - $queryParams[':userId'] = $generatedUserId; + $queryParams[':userId'] = $newUser['userId']; $queryParams[':email'] = $newUser['email']; $queryParams[':passwordHash'] = password_hash($newUser['password'], PASSWORD_BCRYPT); unset($newUser['password']); - $newUser['webId'] = "https://id-" . $generatedUserId . "." . BASEDOMAIN . "/#me"; + $newUser['webId'] = "https://id-" . $newUser['userId'] . "." . BASEDOMAIN . "/#me"; $queryParams[':data'] = json_encode($newUser); $query->execute($queryParams); return [ - "userId" => $generatedUserId, + "userId" => $newUser['userId'], "email" => $newUser['email'], "webId" => $newUser['webId'] ];