summaryrefslogtreecommitdiff
path: root/activitypub.c
diff options
context:
space:
mode:
authorGravatar rako2025-11-28 10:37:49 +0100
committerGravatar rako2025-11-30 21:19:13 +0100
commita45c1ce152011e8fe25eb1d25594ac5705f65404 (patch)
tree93c9f3f9dc187fe7aa38e882879f72353b273925 /activitypub.c
parentMoved is_msg_mine() to data.c. (diff)
downloadsnac2-a45c1ce152011e8fe25eb1d25594ac5705f65404.tar.gz
snac2-a45c1ce152011e8fe25eb1d25594ac5705f65404.tar.xz
snac2-a45c1ce152011e8fe25eb1d25594ac5705f65404.zip
Fix user matching
In order to be a proper prefix, the actor url must end with a '/' otherwise it can match another user that starts with the same prefix: for example 'testuser' will match anything made by 'testuser2'
Diffstat (limited to 'activitypub.c')
-rw-r--r--activitypub.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/activitypub.c b/activitypub.c
index 2c0fa2e..90230d8 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -779,7 +779,7 @@ int is_msg_for_me(snac *snac, const xs_dict *c_msg)
779 object_get(object, &obj); 779 object_get(object, &obj);
780 780
781 /* if it's about one of our posts, accept it */ 781 /* if it's about one of our posts, accept it */
782 if (xs_startswith(object, snac->actor)) 782 if (is_msg_mine(snac, object))
783 return 2; 783 return 2;
784 784
785 /* blocked by hashtag? */ 785 /* blocked by hashtag? */
@@ -1242,7 +1242,7 @@ void notify(snac *snac, const char *type, const char *utype, const char *actor,
1242 1242
1243 if (xs_match(type, "Like|Announce|EmojiReact")) { 1243 if (xs_match(type, "Like|Announce|EmojiReact")) {
1244 /* if it's not an admiration about something by us, done */ 1244 /* if it's not an admiration about something by us, done */
1245 if (xs_is_null(objid) || !xs_startswith(objid, snac->actor)) 1245 if (xs_is_null(objid) || !is_msg_mine(snac, objid))
1246 return; 1246 return;
1247 1247
1248 /* if it's an announce by our own relay, done */ 1248 /* if it's an announce by our own relay, done */
@@ -1267,7 +1267,7 @@ void notify(snac *snac, const char *type, const char *utype, const char *actor,
1267 return; 1267 return;
1268 1268
1269 /* if it's not ours and we didn't vote, discard */ 1269 /* if it's not ours and we didn't vote, discard */
1270 if (!xs_startswith(poll_id, snac->actor) && !was_question_voted(snac, poll_id)) 1270 if (!is_msg_mine(snac, poll_id) && !was_question_voted(snac, poll_id))
1271 return; 1271 return;
1272 } 1272 }
1273 1273
@@ -2792,10 +2792,10 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
2792 if (xs_is_null(object)) 2792 if (xs_is_null(object))
2793 snac_log(snac, xs_fmt("malformed message: no 'id' field")); 2793 snac_log(snac, xs_fmt("malformed message: no 'id' field"));
2794 else 2794 else
2795 if (is_muted(snac, actor) && !xs_startswith(object, snac->actor)) 2795 if (is_muted(snac, actor) && !is_msg_mine(snac, object))
2796 snac_log(snac, xs_fmt("dropped 'Announce' from muted actor %s", actor)); 2796 snac_log(snac, xs_fmt("dropped 'Announce' from muted actor %s", actor));
2797 else 2797 else
2798 if (is_limited(snac, actor) && !xs_startswith(object, snac->actor)) 2798 if (is_limited(snac, actor) && !is_msg_mine(snac, object))
2799 snac_log(snac, xs_fmt("dropped 'Announce' from limited actor %s", actor)); 2799 snac_log(snac, xs_fmt("dropped 'Announce' from limited actor %s", actor));
2800 else { 2800 else {
2801 xs *a_msg = NULL; 2801 xs *a_msg = NULL;
@@ -2903,7 +2903,7 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req)
2903 snac_log(snac, xs_fmt("malformed message: no 'id' field")); 2903 snac_log(snac, xs_fmt("malformed message: no 'id' field"));
2904 else 2904 else
2905 if (object_here(object)) { 2905 if (object_here(object)) {
2906 if (xs_startswith(object, srv_baseurl) && !xs_startswith(object, actor)) 2906 if (xs_startswith(object, srv_baseurl) && !is_msg_mine(snac, object))
2907 snac_log(snac, xs_fmt("ignored incorrect 'Delete' %s %s", actor, object)); 2907 snac_log(snac, xs_fmt("ignored incorrect 'Delete' %s %s", actor, object));
2908 else { 2908 else {
2909 timeline_del(snac, object); 2909 timeline_del(snac, object);
@@ -3716,7 +3716,7 @@ int activitypub_get_handler(const xs_dict *req, const char *q_path,
3716 const char *type = xs_dict_get(i, "type"); 3716 const char *type = xs_dict_get(i, "type");
3717 const char *id = xs_dict_get(i, "id"); 3717 const char *id = xs_dict_get(i, "id");
3718 3718
3719 if (type && id && strcmp(type, "Note") == 0 && xs_startswith(id, snac.actor)) { 3719 if (type && id && strcmp(type, "Note") == 0 && is_msg_mine(&snac, id)) {
3720 if (is_msg_public(i)) { 3720 if (is_msg_public(i)) {
3721 xs *c_msg = msg_create(&snac, i); 3721 xs *c_msg = msg_create(&snac, i);
3722 list = xs_list_append(list, c_msg); 3722 list = xs_list_append(list, c_msg);