Merge pull request #1569 from profanity-im/feature/1434-spam-reporting

Add XEP-0377: Spam Reporting
This commit is contained in:
Michael Vetter
2021-07-01 17:04:04 +02:00
committed by GitHub
8 changed files with 93 additions and 21 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

@@ -1385,7 +1385,7 @@ _autoping_timed_send(xmpp_conn_t* const conn, void* const userdata)
if (connection_supports(XMPP_FEATURE_PING) == FALSE) {
log_warning("Server doesn't advertise %s feature, disabling autoping.", XMPP_FEATURE_PING);
prefs_set_autoping(0);
cons_show_error("Server ping not supported, autoping disabled.");
cons_show_error("Server ping not supported (%s), autoping disabled.", XMPP_FEATURE_PING);
xmpp_conn_t* conn = connection_get_conn();
xmpp_timed_handler_delete(conn, _autoping_timed_send);
return 1;
@@ -2586,7 +2586,7 @@ iq_mam_request(ProfChatWin* win)
{
if (connection_supports(XMPP_FEATURE_MAM2) == FALSE) {
log_warning("Server doesn't advertise %s feature.", XMPP_FEATURE_MAM2);
cons_show_error("Server doesn't support MAM.");
cons_show_error("Server doesn't support MAM (%s).", XMPP_FEATURE_MAM2);
return;
}

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);