Add XEP-0377: Spam Reporting

Report and block:
`/blocked add someone@domain.org report-abuse This is not nice`
`/blocked add someone@domain.org report-spam This is not nice`

Regular block:
`/blocked add someone@domain.org`

Implement https://github.com/profanity-im/profanity/issues/1434
This commit is contained in:
Michael Vetter
2021-06-30 23:42:32 +02:00
parent dc79c514be
commit 31ebd6ab1c
5 changed files with 74 additions and 13 deletions

View File

@@ -109,7 +109,7 @@ blocked_ac_reset(void)
}
gboolean
blocked_add(char* jid)
blocked_add(char* jid, blocked_report reportkind, const char* const message)
{
GList* found = g_list_find_custom(blocked, jid, (GCompareFunc)g_strcmp0);
if (found) {
@@ -129,6 +129,31 @@ blocked_add(char* jid)
xmpp_stanza_set_name(item, STANZA_NAME_ITEM);
xmpp_stanza_set_attribute(item, STANZA_ATTR_JID, jid);
if (reportkind != BLOCKED_NO_REPORT) {
xmpp_stanza_t* report = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(report, STANZA_NAME_REPORT);
if (reportkind == BLOCKED_REPORT_ABUSE) {
xmpp_stanza_set_attribute(report, STANZA_ATTR_REASON, STANZA_REPORTING_ABUSE);
} else {
xmpp_stanza_set_attribute(report, STANZA_ATTR_REASON, STANZA_REPORTING_SPAM);
}
if (message) {
xmpp_stanza_t* text = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(text, STANZA_NAME_TEXT);
xmpp_stanza_t* txt = xmpp_stanza_new(ctx);
xmpp_stanza_set_text(txt, message);
xmpp_stanza_add_child(text, txt);
xmpp_stanza_add_child(report, text);
xmpp_stanza_release(txt);
}
xmpp_stanza_add_child(item, report);
xmpp_stanza_release(report);
}
xmpp_stanza_add_child(block, item);
xmpp_stanza_release(item);

View File

@@ -122,6 +122,7 @@
#define STANZA_NAME_AFTER "after"
#define STANZA_NAME_USERNAME "username"
#define STANZA_NAME_PROPOSE "propose"
#define STANZA_NAME_REPORT "report"
// error conditions
#define STANZA_NAME_BAD_REQUEST "bad-request"
@@ -245,6 +246,9 @@
#define STANZA_DATAFORM_SOFTWARE "urn:xmpp:dataforms:softwareinfo"
#define STANZA_REPORTING_ABUSE "urn:xmpp:reporting:abuse"
#define STANZA_REPORTING_SPAM "urn:xmpp:reporting:spam"
typedef struct caps_stanza_t
{
char* hash;

View File

@@ -70,6 +70,7 @@
#define XMPP_FEATURE_USER_AVATAR_METADATA_NOTIFY "urn:xmpp:avatar:metadata+notify"
#define XMPP_FEATURE_LAST_MESSAGE_CORRECTION "urn:xmpp:message-correct:0"
#define XMPP_FEATURE_MAM2 "urn:xmpp:mam:2"
#define XMPP_FEATURE_SPAM_REPORTING "urn:xmpp:reporting:1"
typedef enum {
JABBER_CONNECTING,
@@ -89,6 +90,12 @@ typedef enum {
INVITE_MEDIATED
} jabber_invite_t;
typedef enum {
BLOCKED_NO_REPORT,
BLOCKED_REPORT_ABUSE,
BLOCKED_REPORT_SPAM
} blocked_report;
typedef struct bookmark_t
{
char* barejid;
@@ -286,7 +293,7 @@ void roster_send_add_new(const char* const barejid, const char* const name);
void roster_send_remove(const char* const barejid);
GList* blocked_list(void);
gboolean blocked_add(char* jid);
gboolean blocked_add(char* jid, blocked_report reportkind, const char* const message);
gboolean blocked_remove(char* jid);
char* blocked_ac_find(const char* const search_str, gboolean previous, void* context);
void blocked_ac_reset(void);