Class: AtlasRb::User
- Inherits:
-
Object
- Object
- AtlasRb::User
- Extended by:
- FaradayHelper
- Defined in:
- lib/atlas_rb/user.rb
Overview
User directory lookups (typeahead search, NUID → name resolution) plus a person's own account management — enumerating the accounts that share their NUID and choosing a preferred (default) one.
This is a user-context binding: calls authenticate as the acting
user via the standard relay-signing path (the acting NUID is signed into
the assertion sub), like every other top-level class. It is
deliberately not part of
System — that namespace is structurally reserved for
system-token calls (System::User.find_or_create), and these are ordinary
logged-in-user capabilities.
The directory lookups enforce minimal disclosure: every entry carries
nuid + name only (no email, role, or groups), and rows with role
anonymous, guest, or system are never returned. The account methods
(User.accounts / User.set_preferred) do disclose email/groups/affiliation, so
Atlas limits them to the person themselves (matching NUID), an admin, or the
system principal. Per the layering principle the gem adds nothing on top —
no caching, no name parsing, no result shaping; presentation belongs to the
host application.
Constant Summary collapse
- ROUTE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Atlas REST endpoint prefix for the user directory.
"/users"
Constants included from FaradayHelper
FaradayHelper::ASSERTION_AUDIENCE, FaradayHelper::ASSERTION_ISSUER, FaradayHelper::ASSERTION_TTL, FaradayHelper::INSTRUMENTATION_EVENT
Class Method Summary collapse
-
.accounts(target_nuid, nuid: nil) ⇒ AtlasRb::Mash?
List the accounts sharing a NUID — a person's staff/student logins.
-
.find_by_nuid(target_nuid, nuid: nil) ⇒ AtlasRb::Mash?
Resolve a single NUID to a directory entry.
-
.resolve(nuids, nuid: nil) ⇒ Array<AtlasRb::Mash>?
Batch-resolve a set of NUIDs to directory entries in one call.
-
.search(query, nuid: nil) ⇒ Array<AtlasRb::Mash>?
Typeahead search of the user directory.
-
.set_preferred(target_nuid, email:, nuid: nil) ⇒ AtlasRb::Mash
Set the preferred (default) account for a NUID — the account chosen when a login names no specific one.
Methods included from FaradayHelper
connection, multipart, read_body, read_raw, system_connection, with_file_part
Class Method Details
.accounts(target_nuid, nuid: nil) ⇒ AtlasRb::Mash?
List the accounts sharing a NUID — a person's staff/student logins.
Unlike the directory lookups this discloses each account's email,
affiliation label, role, stored group set, and which one is preferred —
the data the login "you have more than one account" check and the My DRS
accounts panel render from. Atlas limits it to the person themselves, an
admin, or the system principal; others get a 403.
131 132 133 134 135 |
# File 'lib/atlas_rb/user.rb', line 131 def self.accounts(target_nuid, nuid: nil) read_body(connection({}, nuid).get("#{ROUTE}/by_nuid/#{target_nuid}/accounts")) do |body| AtlasRb::Mash.new(body) end end |
.find_by_nuid(target_nuid, nuid: nil) ⇒ AtlasRb::Mash?
Resolve a single NUID to a directory entry.
75 76 77 78 79 |
# File 'lib/atlas_rb/user.rb', line 75 def self.find_by_nuid(target_nuid, nuid: nil) read_body(connection({}, nuid).get("#{ROUTE}/by_nuid/#{target_nuid}")) do |body| AtlasRb::Mash.new(body) end end |
.resolve(nuids, nuid: nil) ⇒ Array<AtlasRb::Mash>?
Batch-resolve a set of NUIDs to directory entries in one call.
Same response shape as search. Unresolvable NUIDs (unknown or
excluded-role) are dropped, so the result may be shorter than the
input — callers index by nuid. Atlas caps the batch at 100.
102 103 104 105 106 |
# File 'lib/atlas_rb/user.rb', line 102 def self.resolve(nuids, nuid: nil) read_body(connection({ nuids: Array(nuids).join(",") }, nuid).get(ROUTE)) do |body| body.map { |entry| AtlasRb::Mash.new(entry) } end end |
.search(query, nuid: nil) ⇒ Array<AtlasRb::Mash>?
Typeahead search of the user directory.
Case-insensitive match on name, prefix match on NUID (so typing a known NUID works too). Atlas caps the result (10 entries) and orders it by name; a blank query resolves to an empty list.
52 53 54 55 56 |
# File 'lib/atlas_rb/user.rb', line 52 def self.search(query, nuid: nil) read_body(connection({ q: query }, nuid).get(ROUTE)) do |body| body.map { |entry| AtlasRb::Mash.new(entry) } end end |
.set_preferred(target_nuid, email:, nuid: nil) ⇒ AtlasRb::Mash
Set the preferred (default) account for a NUID — the account chosen when a login names no specific one. Same self/admin/system scope as accounts.
149 150 151 152 153 |
# File 'lib/atlas_rb/user.rb', line 149 def self.set_preferred(target_nuid, email:, nuid: nil) response = connection({}, nuid) .put("#{ROUTE}/by_nuid/#{target_nuid}/preferred_account", { email: email }.to_json) AtlasRb::Mash.new(JSON.parse(response.body))["user"] end |