#include #include #include #include #include #include #include #include #include #include #include void ClearWhitelistCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out) { ParseeData *data = XMPPGetManagerCookie(m); char *trimmed = ParseeTrimJID(from); if (!ParseeIsAdmin(data, trimmed)) { SetNote("error", "User is not authorised to execute command."); Free(trimmed); return; } Free(trimmed); if (!DbDelete(data->db, 1, "whitelist")) { SetNote("error", "Parsee whitelist was non-existent or could not be removed."); return; } /* TODO: Cleanup old sessions? */ SetNote("info", "Parsee whitelist was removed."); (void) form; } void AddWhitelistCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out) { ParseeData *data = XMPPGetManagerCookie(m); char *trimmed = ParseeTrimJID(from); char *entity = NULL; DbRef *ref; GetFieldValue(entity, "entity", form); if (!ParseeIsAdmin(data, trimmed)) { SetNote("error", "User is not authorised to execute command."); Free(trimmed); return; } if (!entity) { SetNote("error", "No entity found."); Free(trimmed); return; } Free(trimmed); ref = DbLock(data->db, 1, "whitelist"); if (!ref) { ref = DbCreate(data->db, 1, "whitelist"); } if (!ref) { SetNote("error", "Couldn't get a database entry. You're cooked."); return; } JsonValueFree(HashMapSet( DbJson(ref), entity, JsonValueObject(HashMapCreate()) )); DbUnlock(data->db, ref); SetNote("info", "Server successfully whitelisted."); } void WhitelistCallback(XMPPCommandManager *m, char *from, XMLElement *form, XMLElement *out) { ParseeData *data = XMPPGetManagerCookie(m); char *trimmed = ParseeTrimJID(from); XMLElement *x; XMLElement *title; XMLElement *reported, *item, *field, *value, *txt; if (!ParseeIsAdmin(data, trimmed)) { SetNote("error", "User is not authorised to execute command."); Free(trimmed); return; } x = XMLCreateTag("x"); XMLAddAttr(x, "xmlns", "jabber:x:data"); title = XMLCreateTag("title"); XMLAddChild(x, title); XMLAddChild(out, x); Free(trimmed); SetTitle(x, NAME " chat whitelist"); XMLAddAttr(x, "type", "result"); { DbRef *ref = DbLock(data->db, 1, "whitelist"); HashMap *obj; char *serv; JsonValue *obj_val; reported = XMLCreateTag("reported"); XMLAddChild(x, reported); if (!ref) { ref = DbCreate(data->db, 1, "global_bans"); } obj = DbJson(ref); /* Report */ Report("server", "Allowed servers"); /* Set */ while (HashMapIterate(obj, &serv, (void **) &obj_val)) { BeginItem(); SetField("server", serv); EndItem(); (void) obj_val; } DbUnlock(data->db, ref); } (void) form; }