mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 19:55:10 +00:00
[ADD] Filtering XMPP commands
This allows us to have commands apply to admins or MUCs only(which would help with many things I want to implement).
This commit is contained in:
parent
7c60ab28cb
commit
9a16d96323
9 changed files with 127 additions and 31 deletions
|
|
@ -12,6 +12,7 @@ typedef struct XMPPCommand XMPPCommand;
|
|||
typedef struct XMPPOption XMPPOption;
|
||||
typedef void (*XMPPCmdCallback)(XMPPCommandManager *, char *, XMLElement *, XMLElement *);
|
||||
typedef void (*XMPPOptionWriter)(XMPPCommandManager *, XMPPCommand *, char *);
|
||||
typedef bool (*XMPPCmdFilter)(XMPPCommandManager *, char *id, XMLElement *stanza);
|
||||
|
||||
/** Creates a simple XMPP command manager, which routes commands
|
||||
* with a single-stage form system, with a {cookie}
|
||||
|
|
@ -19,16 +20,28 @@ typedef void (*XMPPOptionWriter)(XMPPCommandManager *, XMPPCommand *, char *);
|
|||
* Returns: An opaque command manager[LA:HEAP]
|
||||
* Modifies: NOTHING
|
||||
* See-Also: XMPPFreeManager */
|
||||
extern XMPPCommandManager * XMPPCreateManager(void *cookie);
|
||||
extern XMPPCommandManager * XMPPCreateManager(void *cookie);
|
||||
extern void * XMPPGetManagerCookie(XMPPCommandManager *manager);
|
||||
|
||||
/** Changes the filter used for the command manager. This function
|
||||
* takes in the source stanza and the command "ID" to filter, and
|
||||
* returns true IFF the command should be shown to the requester.
|
||||
* -----------
|
||||
* Returns: NOTHING
|
||||
* Modifies: the manager's filter
|
||||
* See-Also: XMPPCreateManager */
|
||||
extern void
|
||||
XMPPManagerSetFilter(XMPPCommandManager *manager, XMPPCmdFilter filter);
|
||||
|
||||
/** Create a basic command with a node and name description
|
||||
* -----------------------------------------------------
|
||||
* Returns: A command to be used with {XMPPRegisterCommand}[LA:HEAP]
|
||||
* Modifies: NOTHING
|
||||
* See-Also: XMPPRegisterCommand */
|
||||
extern XMPPCommand * XMPPBasicCmd(char *node, char *name, XMPPCmdCallback cb);
|
||||
extern void XMPPCmdOptionsCreator(XMPPCommand *cmd, XMPPOptionWriter writer);
|
||||
extern XMPPCommand *
|
||||
XMPPBasicCmd(char *node, char *name, XMPPCmdCallback cb);
|
||||
extern void
|
||||
XMPPCmdOptionsCreator(XMPPCommand *cmd, XMPPOptionWriter writer);
|
||||
extern void XMPPAddOption(XMPPCommand *cmd, XMPPOption *opt);
|
||||
extern XMLElement * XMPPFormifyCommand(XMPPCommandManager *m, XMPPCommand *cmd, char *from);
|
||||
extern char * XMPPGetCommandNode(XMPPCommand *cmd);
|
||||
|
|
@ -71,11 +84,12 @@ extern bool XMPPVerifyForm(XMPPCommand *cmd, XMLElement *form);
|
|||
extern void XMPPRegisterCommand(XMPPCommandManager *m, XMPPCommand *cmd);
|
||||
|
||||
/** Shoves all {m} commands into XML as children of {p}, and a {jid}
|
||||
* (and with the stanza source)
|
||||
* -----------------------------------------------------
|
||||
* Returns: NOTHING
|
||||
* Modifies: {p}
|
||||
* See-Also: XMPPCreateManager */
|
||||
extern void XMPPShoveCommandList(XMPPCommandManager *m, char *jid, XMLElement *p);
|
||||
extern void XMPPShoveCommandList(XMPPCommandManager *m, char *jid, XMLElement *p, XMLElement *s);
|
||||
|
||||
/** Destroys all memory related to the command {manager}.
|
||||
* -----------------------------------------------------
|
||||
|
|
@ -95,7 +109,7 @@ extern bool XMPPManageCommand(XMPPCommandManager *m, XMLElement *stanza, ParseeD
|
|||
/* --------------------------------- COMMANDS --------------------------------- */
|
||||
/* Please edit stc/XMPPThread.c (you can just force-save) for these to apply! */
|
||||
|
||||
#define XMPP_COMMAND(f,n,t,s) \
|
||||
#define XMPP_COMMAND(f,l,n,t,s) \
|
||||
extern void \
|
||||
f(XMPPCommandManager *, char *, XMLElement *, XMLElement *); \
|
||||
/* This symbol might not exist. We do, however, not care, as
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
/* C X-macro file */
|
||||
typedef enum XMPPCommandFlags {
|
||||
XMPPCMD_ALL = 0,
|
||||
XMPPCMD_MUC , /* Only for MUCs */
|
||||
XMPPCMD_ADMINS /* Only for administrators */
|
||||
} XMPPCommandFlags;
|
||||
#define XMPPCOMMANDS \
|
||||
XMPP_COMMAND(StatusCallback, "stats", "Get Parsee statistics", {}) \
|
||||
XMPP_COMMAND(CleanCallback, "clean", "Cleanup temporary Parsee data", {}) \
|
||||
XMPP_COMMAND(AdminsCallback, "admin", "Get Parsee admin list", {}) \
|
||||
XMPP_COMMAND(NoflyCallback, "nofly", "Get Parsee nofly list", {}) \
|
||||
XMPP_COMMAND(AddAdminCallback, "add-admin", "Adds glob as admin", { \
|
||||
XMPP_COMMAND(StatusCallback, XMPPCMD_ALL, "stats", "Get Parsee statistics", {}) \
|
||||
XMPP_COMMAND(CleanCallback, XMPPCMD_ADMINS, "clean", "Cleanup temporary Parsee data", {}) \
|
||||
XMPP_COMMAND(AdminsCallback, XMPPCMD_ALL, "admin", "Get Parsee admin list", {}) \
|
||||
XMPP_COMMAND(NoflyCallback, XMPPCMD_ADMINS, "nofly", "Get Parsee nofly list", {}) \
|
||||
XMPP_COMMAND(AddAdminCallback, XMPPCMD_ADMINS, "add-admin", "Adds glob as admin", { \
|
||||
XMPPOption *glob = XMPPCreateText(true, "glob", ""); \
|
||||
XMPPSetDescription(glob, "Glob pattern to set as admin"); \
|
||||
XMPPAddOption(cmd, glob); \
|
||||
|
|
@ -12,12 +17,12 @@
|
|||
XMPPSetFormTitle(cmd, "Admin addition form"); \
|
||||
XMPPSetFormInstruction(cmd, "Select a glob pattern to add as an admin"); \
|
||||
}) \
|
||||
XMPP_COMMAND(DelAdminCallback, "del-admin", "Removes glob from being admin", { \
|
||||
XMPP_COMMAND(DelAdminCallback, XMPPCMD_ADMINS, "del-admin", "Removes glob from being admin", { \
|
||||
XMPPCmdOptionsCreator(cmd, FormDelAdminCallback); \
|
||||
XMPPSetFormTitle(cmd, "Admin removal form"); \
|
||||
XMPPSetFormInstruction(cmd, "Select a glob pattern to remove as an admin"); \
|
||||
}) \
|
||||
XMPP_COMMAND(AddNoflyCallback, "add-nofly", "Adds user to nofly", { \
|
||||
XMPP_COMMAND(AddNoflyCallback, XMPPCMD_ADMINS, "add-nofly", "Adds user to nofly", { \
|
||||
XMPPOption *entity = XMPPCreateText(true, "entity", ""); \
|
||||
XMPPOption *reason = XMPPCreateText(false, "reason", "Not behaving"); \
|
||||
XMPPSetDescription(entity, "Entity(glob) to no-fly"); \
|
||||
|
|
@ -28,8 +33,8 @@
|
|||
XMPPSetFormTitle(cmd, "No-fly addition form"); \
|
||||
XMPPSetFormInstruction(cmd, "Select a glob pattern to add to the nofly"); \
|
||||
}) \
|
||||
XMPP_COMMAND(ClearWhitelistCallback, "clear-wl", "Removes the chat whitelist", {}) \
|
||||
XMPP_COMMAND(AddWhitelistCallback, "add-wl", "Adds server to chat whitelist", { \
|
||||
XMPP_COMMAND(ClearWhitelistCallback, XMPPCMD_ADMINS, "clear-wl", "Removes the chat whitelist", {}) \
|
||||
XMPP_COMMAND(AddWhitelistCallback, XMPPCMD_ADMINS, "add-wl", "Adds server to chat whitelist", { \
|
||||
XMPPOption *serv = XMPPCreateText(true, "entity", ""); \
|
||||
XMPPSetDescription(serv, "Server to mark as admin"); \
|
||||
XMPPAddOption(cmd, serv); \
|
||||
|
|
@ -37,6 +42,6 @@
|
|||
XMPPSetFormTitle(cmd, "Chatlist addition form"); \
|
||||
XMPPSetFormInstruction(cmd, "Add a server to whitelist"); \
|
||||
}) \
|
||||
XMPP_COMMAND(WhitelistCallback, "wl", "Get Parsee's chat whitelist", {}) \
|
||||
XMPP_COMMAND(WhitelistCallback, XMPPCMD_ADMINS, "wl", "Get Parsee's chat whitelist", {}) \
|
||||
|
||||
XMPPCOMMANDS
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue