Software / code / prosody-modules
Comparison
mod_http_admin_api/mod_http_admin_api.lua @ 4345:1bb08e9ffa82
mod_http_admin_api: Add methods for managing users
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 17 Jan 2021 13:58:52 +0000 |
| parent | 4343:ee313922b8d1 |
| child | 4349:5ca36c36ab05 |
comparison
equal
deleted
inserted
replaced
| 4344:844cfc8c4039 | 4345:1bb08e9ffa82 |
|---|---|
| 1 local usermanager = require "core.usermanager"; | |
| 2 | |
| 1 local json = require "util.json"; | 3 local json = require "util.json"; |
| 2 | 4 |
| 3 module:depends("http"); | 5 module:depends("http"); |
| 4 | 6 |
| 5 local invites = module:depends("invites"); | 7 local invites = module:depends("invites"); |
| 6 local tokens = module:depends("tokenauth"); | 8 local tokens = module:depends("tokenauth"); |
| 9 local mod_pep = module:depends("pep"); | |
| 7 | 10 |
| 8 local json_content_type = "application/json"; | 11 local json_content_type = "application/json"; |
| 9 | 12 |
| 10 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name); | 13 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name); |
| 11 | 14 |
| 100 return 404; | 103 return 404; |
| 101 end | 104 end |
| 102 return 200; | 105 return 200; |
| 103 end | 106 end |
| 104 | 107 |
| 108 local function get_user_info(username) | |
| 109 if not usermanager.user_exists(username, module.host) then | |
| 110 return nil; | |
| 111 end | |
| 112 local display_name; | |
| 113 do | |
| 114 local pep_service = mod_pep.get_pep_service(username); | |
| 115 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true); | |
| 116 if ok and nick_item then | |
| 117 display_name = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick"); | |
| 118 end | |
| 119 end | |
| 120 | |
| 121 return { | |
| 122 username = username; | |
| 123 display_name = display_name; | |
| 124 }; | |
| 125 end | |
| 126 | |
| 127 function list_users(event) | |
| 128 local user_list = {}; | |
| 129 for username in usermanager.users(module.host) do | |
| 130 table.insert(user_list, get_user_info(username)); | |
| 131 end | |
| 132 | |
| 133 event.response.headers["Content-Type"] = json_content_type; | |
| 134 return json.encode(user_list); | |
| 135 end | |
| 136 | |
| 137 function get_user_by_name(event, username) | |
| 138 local user_info = get_user_info(username); | |
| 139 if not user_info then | |
| 140 return 404; | |
| 141 end | |
| 142 | |
| 143 event.response.headers["Content-Type"] = json_content_type; | |
| 144 return json.encode(user_info); | |
| 145 end | |
| 146 | |
| 147 function delete_user(event, username) --luacheck: ignore 212/event | |
| 148 if not usermanager.delete_user(username, module.host) then | |
| 149 return 404; | |
| 150 end | |
| 151 return 200; | |
| 152 end | |
| 153 | |
| 105 module:provides("http", { | 154 module:provides("http", { |
| 106 route = check_auth { | 155 route = check_auth { |
| 107 ["GET /invites"] = list_invites; | 156 ["GET /invites"] = list_invites; |
| 108 ["GET /invites/*"] = get_invite_by_id; | 157 ["GET /invites/*"] = get_invite_by_id; |
| 109 ["PUT /invites"] = create_invite; | 158 ["PUT /invites"] = create_invite; |
| 110 ["DELETE /invites/*"] = delete_invite; | 159 ["DELETE /invites/*"] = delete_invite; |
| 160 | |
| 161 ["GET /users"] = list_users; | |
| 162 ["GET /users/*"] = get_user_by_name; | |
| 163 ["DELETE /users/*"] = delete_user; | |
| 111 }; | 164 }; |
| 112 }); | 165 }); |