mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 13:45:10 +00:00
142 lines
3.2 KiB
C
142 lines
3.2 KiB
C
#include <Cytoplasm/HashMap.h>
|
|
#include <Cytoplasm/Memory.h>
|
|
#include <Cytoplasm/Json.h>
|
|
#include <Cytoplasm/Util.h>
|
|
#include <Cytoplasm/Str.h>
|
|
#include <Cytoplasm/Log.h>
|
|
|
|
#include <XMPPFormTool.h>
|
|
#include <XMPPCommand.h>
|
|
#include <Parsee.h>
|
|
#include <XMPP.h>
|
|
#include <XML.h>
|
|
|
|
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;
|
|
}
|