43 lines
909 B
Plaintext
43 lines
909 B
Plaintext
|
||
UsersCache = (authd-ws, on-user) ->
|
||
self = {}
|
||
|
||
on-user ||= (user) ->
|
||
|
||
# uid => user | "request sent"
|
||
# FIXME: "request sent" stays forever that way on failure.
|
||
self.users = {}
|
||
|
||
# TODO: We’ll probably want to handle “no such user” errors.
|
||
authd-ws.add-event-listener \user, (message) ->
|
||
user = message.user
|
||
|
||
self.users[user.uid] := user
|
||
self.users[user.login] := user
|
||
|
||
on-user user
|
||
|
||
authd-ws.add-event-listener \error, (message) ->
|
||
if message.reason == "user not found"
|
||
console.log "warning: got a “user not found” error"
|
||
|
||
# Note: uid may also be a login.
|
||
self.get-user = (uid, request-if-missing = true) ->
|
||
switch user = self.users[uid]
|
||
when void
|
||
if request-if-missing
|
||
console.log "Sending request for #{uid}"
|
||
self.users[uid] = "request sent"
|
||
authd-ws.get-user uid
|
||
|
||
void
|
||
when "request sent"
|
||
void
|
||
else
|
||
user
|
||
|
||
self
|
||
|
||
module.exports = UsersCache
|
||
|