mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 16:45:10 +00:00
120 lines
2.7 KiB
C
120 lines
2.7 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>
|
|
|
|
/* 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)
|
|
{
|
|
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
|
|
FormDelAdminCallback(XMPPCommandManager *m, XMPPCommand *cmd, char *from)
|
|
{
|
|
ParseeData *data = XMPPGetManagerCookie(m);
|
|
DbRef *admins;
|
|
Array *admin_list;
|
|
size_t i;
|
|
XMPPOption *admin_opt;
|
|
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);
|
|
|
|
admin_opt = XMPPCreateList(true, false, "glob", "[NVM!]");
|
|
|
|
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));
|
|
|
|
XMPPAddListOption(admin_opt, glob);
|
|
}
|
|
|
|
DbUnlock(data->db, admins);
|
|
XMPPAddOption(cmd, admin_opt);
|
|
}
|