#include #include #include #include #include #include #include #include #include #include #include /* Removes one admin user */ static bool DelAdmin(Array *admin_list, char *glob) { size_t i; bool removed = false; for (i = 0; i < ArraySize(admin_list); i++) { char *admin = JsonValueAsString(ArrayGet(admin_list, i)); if (StrEquals(admin, glob)) { removed = true; JsonValueFree(ArrayDelete(admin_list, i)); break; } } return removed; } void DelAdminCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out, char *node) { ParseeData *data = XMPPGetManagerCookie(m); char *trimmed = ParseeTrimJID(from); char *glob = NULL; DbRef *admins; Array *admin_list; size_t i, globs; bool removed = true; GFVCount(globs, "glob", form); if (!ParseeIsAdmin(data, trimmed)) { SetNote("error", "User is not authorised to execute command."); Free(trimmed); return; } if (!globs) { SetNote("error", "No glob found."); Free(trimmed); return; } admins = DbLock(data->db, 1, "admins"); admin_list = GrabArray(DbJson(admins), 1, "admins"); for (i = 0; i < globs; i++) { GFVMulti(glob, "glob", form, i); if (!glob) { continue; } if (!DelAdmin(admin_list, glob)) { removed = false; } } DbUnlock(data->db, admins); Free(trimmed); if (!removed) { SetNote("warn", "Couldn't remove some globrules."); return; } SetNote("info", "Sucessfully removed admins"); /* TODO */ (void) node; } void FormDelAdminCallback(XMPPCommandManager *m, XMPPCommand *cmd, char *from, char *node) { ParseeData *data = XMPPGetManagerCookie(m); DbRef *admins; Array *admin_list; size_t i; XMPPOption *admin_opt = NULL; char *trimmed = ParseeTrimJID(from); if (!ParseeIsAdmin(data, trimmed)) { Free(trimmed); admin_opt = XMPPCreateList(true, false, "glob", "[NOT AUTHORIZED!]"); XMPPAddOption(cmd, admin_opt); return; } Free(trimmed); admins = DbLock(data->db, 1, "admins"); admin_list = GrabArray(DbJson(admins), 1, "admins"); for (i = 0; i < ArraySize(admin_list); i++) { char *glob = JsonValueAsString(ArrayGet(admin_list, i)); if (!admin_opt) { admin_opt = XMPPCreateList(true, false, "glob", glob); continue; } XMPPAddListOption(admin_opt, glob); } DbUnlock(data->db, admins); XMPPAddOption(cmd, admin_opt); (void) node; }