MCPcopy Create free account
hub / github.com/error311/FileRise / removeUser

Method removeUser

src/FileRise/Domain/UserModel.php:338–439  ·  view source on GitHub ↗

* Remove a user and update encrypted userPermissions.json. */

($usernameToRemove)

Source from the content-addressed store, hash-verified

336 * Remove a user and update encrypted userPermissions.json.
337 */
338 public static function removeUser($usernameToRemove)
339 {
340 global $encryptionKey;
341
342 if (!preg_match(REGEX_USER, $usernameToRemove)) {
343 return ["error" => "Invalid username"];
344 }
345
346 $usersFile = USERS_DIR . USERS_FILE;
347 if (!file_exists($usersFile)) {
348 return ["error" => "Users file not found"];
349 }
350
351 $existingUsers = file($usersFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [];
352 $newUsers = [];
353 $userFound = false;
354
355 foreach ($existingUsers as $line) {
356 $parts = explode(':', trim($line));
357 if (count($parts) < 3) {
358 continue;
359 }
360 if (strcasecmp($parts[0], $usernameToRemove) === 0) {
361 $userFound = true;
362 continue; // skip this user
363 }
364 $newUsers[] = $line;
365 }
366
367 if (!$userFound) {
368 return ["error" => "User not found"];
369 }
370
371 $newContent = $newUsers ? (implode(PHP_EOL, $newUsers) . PHP_EOL) : '';
372 if (file_put_contents($usersFile, $newContent, LOCK_EX) === false) {
373 return ["error" => "Failed to update users file"];
374 }
375
376 if (class_exists(AuthModel::class) && method_exists(AuthModel::class, 'revokeRememberTokensForUser')) {
377 AuthModel::revokeRememberTokensForUser($usernameToRemove);
378 }
379
380 // Update encrypted userPermissions.json — remove any key matching case-insensitively
381 $permissionsFile = USERS_DIR . "userPermissions.json";
382 if (file_exists($permissionsFile)) {
383 $raw = file_get_contents($permissionsFile);
384 $decrypted = decryptData($raw, $encryptionKey);
385 $permissionsArray = $decrypted !== false
386 ? json_decode($decrypted, true)
387 : (json_decode($raw, true) ?: []); // tolerate legacy plaintext
388
389 if (is_array($permissionsArray)) {
390 foreach (array_keys($permissionsArray) as $k) {
391 if (strcasecmp($k, $usernameToRemove) === 0) {
392 unset($permissionsArray[$k]);
393 }
394 }
395 $plain = json_encode($permissionsArray, JSON_PRETTY_PRINT);

Callers 1

removeUser.phpFile · 0.45

Calls 6

writeAtomicMethod · 0.95
decryptDataFunction · 0.85
encryptDataFunction · 0.85
purgeUserMethod · 0.80
metaRootMethod · 0.45

Tested by

no test coverage detected