diff --git a/src/ModulesCore/LegacyCompat.php b/src/ModulesCore/LegacyCompat.php index d6b1c8ea..415f3840 100644 --- a/src/ModulesCore/LegacyCompat.php +++ b/src/ModulesCore/LegacyCompat.php @@ -248,6 +248,61 @@ namespace ModulesCore { return PdoFactory::createFromArray($db); } + /** + * @return array> + */ + public function knownAuthUsers(): array + { + $pdo = LegacyCompat::app()->basePdo(); + if (!$pdo instanceof \PDO) { + return []; + } + + try { + $stmt = $pdo->query( + 'SELECT sub, username, email, name, groups, last_login_at + FROM nexus_auth_users + ORDER BY COALESCE(NULLIF(name, \'\'), NULLIF(username, \'\'), email, sub)' + ); + if (!$stmt) { + return []; + } + } catch (\Throwable) { + return []; + } + + $users = []; + foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) ?: [] as $row) { + $groups = json_decode((string) ($row['groups'] ?? '[]'), true); + $row['groups'] = is_array($groups) + ? array_values(array_filter(array_map('strval', $groups))) + : []; + $users[] = $row; + } + + return $users; + } + + /** + * @return array + */ + public function knownAuthGroups(): array + { + $groups = []; + foreach ($this->knownAuthUsers() as $user) { + foreach (($user['groups'] ?? []) as $group) { + $group = trim((string) $group); + if ($group !== '') { + $groups[] = $group; + } + } + } + + sort($groups, SORT_NATURAL | SORT_FLAG_CASE); + + return array_values(array_unique($groups)); + } + private function modulePath(string $moduleName): string { return $this->projectRoot . '/modules/' . trim($moduleName, '/');