Software / code / prosody
Comparison
core/rostermanager.lua @ 107:8d8debda3df2
Added: Roster manipulation functions to core.rostermanager
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Fri, 17 Oct 2008 22:19:26 +0500 |
| parent | 103:ebdb7875443e |
| child | 110:bb5ac5976a97 |
comparison
equal
deleted
inserted
replaced
| 106:f2a3d204a76a | 107:8d8debda3df2 |
|---|---|
| 11 local hosts = hosts; | 11 local hosts = hosts; |
| 12 | 12 |
| 13 require "util.datamanager" | 13 require "util.datamanager" |
| 14 | 14 |
| 15 local datamanager = datamanager; | 15 local datamanager = datamanager; |
| 16 local st = require "util.stanza"; | |
| 17 local send = require "core.sessionmanager".send_to_session; | |
| 16 | 18 |
| 17 module "rostermanager" | 19 module "rostermanager" |
| 18 | 20 |
| 19 --[[function getroster(username, host) | 21 --[[function getroster(username, host) |
| 20 return { | 22 return { |
| 25 ["idw@getjabber.ath.cx"] = true, | 27 ["idw@getjabber.ath.cx"] = true, |
| 26 } | 28 } |
| 27 --return datamanager.load(username, host, "roster") or {}; | 29 --return datamanager.load(username, host, "roster") or {}; |
| 28 end]] | 30 end]] |
| 29 | 31 |
| 30 function add_to_roster(roster, jid, item) | 32 function add_to_roster(session, jid, item) |
| 31 roster[jid] = item; | 33 if session.roster then |
| 32 -- TODO implement | 34 local old_item = session.roster[jid]; |
| 35 session.roster[jid] = item; | |
| 36 if save_roster(session.username, session.host) then | |
| 37 return true; | |
| 38 else | |
| 39 session.roster[jid] = old_item; | |
| 40 return nil, "wait", "internal-server-error", "Unable to save roster"; | |
| 41 end | |
| 42 else | |
| 43 return nil, "auth", "not-authorized", "Session's roster not loaded"; | |
| 44 end | |
| 33 end | 45 end |
| 34 | 46 |
| 35 function remove_from_roster(roster, jid) | 47 function remove_from_roster(session, jid) |
| 36 roster[jid] = nil; | 48 if session.roster then |
| 37 -- TODO implement | 49 local old_item = session.roster[jid]; |
| 50 session.roster[jid] = nil; | |
| 51 if save_roster(session.username, session.host) then | |
| 52 return true; | |
| 53 else | |
| 54 session.roster[jid] = old_item; | |
| 55 return nil, "wait", "internal-server-error", "Unable to save roster"; | |
| 56 end | |
| 57 else | |
| 58 return nil, "auth", "not-authorized", "Session's roster not loaded"; | |
| 59 end | |
| 60 end | |
| 61 | |
| 62 function roster_push(username, host, jid) | |
| 63 if hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster then | |
| 64 local item = hosts[host].sessions[username].roster[jid]; | |
| 65 local stanza = st.iq({type="set"}); | |
| 66 stanza:tag("query", {xmlns = "jabber:iq:roster"}); | |
| 67 if item then | |
| 68 stanza:tag("item", {jid = jid, subscription = item.subscription, name = item.name}); | |
| 69 else | |
| 70 stanza:tag("item", {jid = jid, subscription = "remove"}); | |
| 71 end | |
| 72 for group in item.groups do | |
| 73 stanza:tag("group"):text(group):up(); | |
| 74 end | |
| 75 stanza:up(); | |
| 76 stanza:up(); | |
| 77 -- stanza ready | |
| 78 for _, session in ipairs(hosts[host].sessions[username].sessions) do | |
| 79 if session.full_jid then | |
| 80 -- FIXME do we need to set stanza.attr.to? | |
| 81 send(session, stanza); | |
| 82 end | |
| 83 end | |
| 84 end | |
| 38 end | 85 end |
| 39 | 86 |
| 40 function load_roster(username, host) | 87 function load_roster(username, host) |
| 41 if hosts[host] and hosts[host].sessions[username] then | 88 if hosts[host] and hosts[host].sessions[username] then |
| 42 local roster = hosts[host].sessions[username].roster; | 89 local roster = hosts[host].sessions[username].roster; |
| 44 roster = datamanager.load(username, host, "roster") or {}; | 91 roster = datamanager.load(username, host, "roster") or {}; |
| 45 hosts[host].sessions[username].roster = roster; | 92 hosts[host].sessions[username].roster = roster; |
| 46 end | 93 end |
| 47 return roster; | 94 return roster; |
| 48 end | 95 end |
| 49 error("Attempt to load roster for non-loaded user"); --return nil; | 96 -- Attempt to load roster for non-loaded user |
| 50 end | 97 end |
| 51 | 98 |
| 52 function save_roster(username, host) | 99 function save_roster(username, host) |
| 53 if hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster then | 100 if hosts[host] and hosts[host].sessions[username] and hosts[host].sessions[username].roster then |
| 54 return datamanager.save(username, host, "roster", hosts[host].sessions[username].roster); | 101 return datamanager.save(username, host, "roster", hosts[host].sessions[username].roster); |