From 5c2c7b27aca8bec59f90007481e5e2c6e961827f Mon Sep 17 00:00:00 2001 From: grunfink Date: Sat, 29 Nov 2025 06:08:37 +0100 Subject: New function is_msg_mine(). --- snac.h | 1 + 1 file changed, 1 insertion(+) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 91dfa27..4d387a6 100644 --- a/snac.h +++ b/snac.h @@ -388,6 +388,7 @@ int send_to_inbox(snac *snac, const xs_str *inbox, const xs_dict *msg, xs_str *get_actor_inbox(const char *actor, int shared); int send_to_actor(snac *snac, const char *actor, const xs_dict *msg, xs_val **payload, int *p_size, int timeout); +int is_msg_mine(snac *user, const char *id); int is_msg_public(const xs_dict *msg); int is_msg_from_private_user(const xs_dict *msg); int is_msg_for_me(snac *snac, const xs_dict *msg); -- cgit v1.2.3 From 1ec7d7c8219d7f39da50ca097a6d900da64a19a2 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 4 Dec 2025 10:50:24 +0100 Subject: Version 2.85 RELEASED. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 4d387a6..732d0b2 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ -#define VERSION "2.85-dev" +#define VERSION "2.85" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3 From ee7483cf0dd007d104a815fce47a0d5f050ca870 Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 9 Dec 2025 13:31:37 +0100 Subject: New query variable terse=anything. If set to any value, a public post page doesn't show any headline. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 732d0b2..01947c5 100644 --- a/snac.h +++ b/snac.h @@ -411,7 +411,7 @@ xs_str *encode_html(const char *str); xs_str *html_timeline(snac *user, const xs_list *list, int read_only, int skip, int show, int show_more, - const char *title, const char *page, int utl, const char *error); + const char *title, const char *page, int utl, const char *error, int terse); int html_get_handler(const xs_dict *req, const char *q_path, char **body, int *b_size, char **ctype, -- cgit v1.2.3 From e66446a57d79623227353e57cd553cbb42e4ca93 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 18 Dec 2025 07:51:30 +0100 Subject: Bumped version. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 01947c5..e1d25f2 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ -#define VERSION "2.85" +#define VERSION "2.86-dev" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3 From 85ed0eb0d535700a5df837c37f51848811e461a0 Mon Sep 17 00:00:00 2001 From: violette Date: Thu, 18 Dec 2025 07:58:24 +0100 Subject: Added emoji reactions (contributed by violette). --- snac.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index e1d25f2..3d98aac 100644 --- a/snac.h +++ b/snac.h @@ -146,12 +146,15 @@ void object_touch(const char *id); int object_admire(const char *id, const char *actor, int like); int object_unadmire(const char *id, const char *actor, int like); +int object_emoji_react(const char *mid, const char *eid); +int object_rm_emoji_react(const char *mid, const char *eid); int object_likes_len(const char *id); int object_announces_len(const char *id); xs_list *object_children(const char *id); xs_list *object_likes(const char *id); xs_list *object_announces(const char *id); +xs_list *object_get_emoji_reacts(const char *id); int object_parent(const char *md5, char parent[MD5_HEX_SIZE]); int object_user_cache_add(snac *snac, const char *id, const char *cachedir); @@ -180,7 +183,8 @@ xs_str *user_index_fn(snac *user, const char *idx_name); xs_list *timeline_simple_list(snac *user, const char *idx_name, int skip, int show, int *more); xs_list *timeline_list(snac *snac, const char *idx_name, int skip, int show, int *more); int timeline_add(snac *snac, const char *id, const xs_dict *o_msg); -int timeline_admire(snac *snac, const char *id, const char *admirer, int like); +int timeline_admire(snac *snac, const char *id, const char *admirer, int like, xs_dict *msg); +int timeline_emoji_react(const char *atto, const char *id, xs_dict *o_msg); xs_list *timeline_top_level(snac *snac, const xs_list *list); void timeline_add_mark(snac *user); @@ -201,6 +205,8 @@ void unmute(snac *snac, const char *actor); int is_muted(snac *snac, const char *actor); xs_list *muted_list(snac *user); +const xs_str *emoji_reacted(snac *user, const char *id); + int is_bookmarked(snac *user, const char *id); int bookmark(snac *user, const char *id); int unbookmark(snac *user, const char *id); @@ -358,6 +364,8 @@ xs_list *get_attachments(const xs_dict *msg); xs_dict *msg_admiration(snac *snac, const char *object, const char *type); xs_dict *msg_repulsion(snac *user, const char *id, const char *type); +xs_dict *msg_emoji_init(snac *user, const char *mid, const char *eid); +xs_dict *msg_emoji_unreact(snac *user, const char *id, const char *type); xs_dict *msg_create(snac *snac, const xs_dict *object); xs_dict *msg_follow(snac *snac, const char *actor); -- cgit v1.2.3 From fd45b94c09233221d7b98a7270c768272bd25ac9 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 18 Dec 2025 08:41:28 +0100 Subject: Fixed leak in timeline_admire(). --- snac.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 3d98aac..23f363c 100644 --- a/snac.h +++ b/snac.h @@ -183,8 +183,8 @@ xs_str *user_index_fn(snac *user, const char *idx_name); xs_list *timeline_simple_list(snac *user, const char *idx_name, int skip, int show, int *more); xs_list *timeline_list(snac *snac, const char *idx_name, int skip, int show, int *more); int timeline_add(snac *snac, const char *id, const xs_dict *o_msg); -int timeline_admire(snac *snac, const char *id, const char *admirer, int like, xs_dict *msg); -int timeline_emoji_react(const char *atto, const char *id, xs_dict *o_msg); +int timeline_admire(snac *snac, const char *id, const char *admirer, int like, const xs_dict *msg); +int timeline_emoji_react(const char *atto, const char *id, const xs_dict *o_msg); xs_list *timeline_top_level(snac *snac, const xs_list *list); void timeline_add_mark(snac *user); -- cgit v1.2.3 From 219f3e6808bdcf8a03cce404caa5cb6a008d00c5 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 18 Dec 2025 08:54:21 +0100 Subject: Fixed leak in emoji_reacted(). --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 23f363c..bcff7f8 100644 --- a/snac.h +++ b/snac.h @@ -205,7 +205,7 @@ void unmute(snac *snac, const char *actor); int is_muted(snac *snac, const char *actor); xs_list *muted_list(snac *user); -const xs_str *emoji_reacted(snac *user, const char *id); +xs_str *emoji_reacted(snac *user, const char *id); int is_bookmarked(snac *user, const char *id); int bookmark(snac *user, const char *id); -- cgit v1.2.3 From 11af00194e3e0ec15e17a23556dc2929f92e0210 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 1 Jan 2026 17:01:03 +0100 Subject: Bumped copyright year. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index bcff7f8..430b551 100644 --- a/snac.h +++ b/snac.h @@ -1,5 +1,5 @@ /* snac - A simple, minimalistic ActivityPub instance */ -/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ +/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ #define VERSION "2.86-dev" -- cgit v1.2.3 From b84b92df74ed0e8f92617e37fdcb2f0aba2138cf Mon Sep 17 00:00:00 2001 From: grunfink Date: Mon, 5 Jan 2026 09:31:33 +0100 Subject: Version 2.86 RELEASED. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 430b551..8a7dad6 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ -#define VERSION "2.86-dev" +#define VERSION "2.86" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3 From 688c54c87355b5424f33f7b089814460a74af594 Mon Sep 17 00:00:00 2001 From: Stefano Marinelli Date: Tue, 6 Jan 2026 11:02:36 +0100 Subject: Implement configurable EXIF stripping for uploaded media - Add `strip_exif` configuration option to enable metadata removal. - Add `mogrify_path` configuration to specify external tool location. - Implement strip_media using `mogrify -strip`. - Support multiple image formats: jpg, png, webp, heic, heif, avif, tiff, gif, bmp. - Add strict startup check: fail to start if `strip_exif` is enabled but `mogrify` is missing/broken. - Update documentation in `doc/snac.8`. --- snac.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 8a7dad6..c307dbd 100644 --- a/snac.h +++ b/snac.h @@ -105,6 +105,9 @@ int validate_uid(const char *uid); xs_str *hash_password(const char *uid, const char *passwd, const char *nonce); int check_password(const char *uid, const char *passwd, const char *hash); +int strip_media(const char *fn); +int check_strip_tool(void); + void srv_archive(const char *direction, const char *url, xs_dict *req, const char *payload, int p_size, int status, xs_dict *headers, -- cgit v1.2.3 From c2b050cf5389e25bb3d149452ee432116b9cc1cd Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 6 Jan 2026 15:04:34 +0100 Subject: Version 2.87 RELEASED. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 8a7dad6..2364f72 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ -#define VERSION "2.86" +#define VERSION "2.87" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3 From 99375a7b664750c1288558f1d5c02b833a2e083c Mon Sep 17 00:00:00 2001 From: grunfink Date: Sat, 10 Jan 2026 21:29:32 +0100 Subject: New command-line option top_ten. --- snac.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 2364f72..e5efc0b 100644 --- a/snac.h +++ b/snac.h @@ -494,3 +494,5 @@ void rss_to_timeline(snac *user, const char *url); void rss_poll_hashtags(void); void data_fsck(void); + +xs_list *user_top_ten(snac *user, int count); -- cgit v1.2.3 From de9d546d70cfcbf3b2450b70039470c9a68ecdc6 Mon Sep 17 00:00:00 2001 From: violette Date: Mon, 12 Jan 2026 06:03:04 +0100 Subject: Added emoji categories. --- snac.h | 1 + 1 file changed, 1 insertion(+) (limited to 'snac.h') diff --git a/snac.h b/snac.h index e5efc0b..d57391f 100644 --- a/snac.h +++ b/snac.h @@ -412,6 +412,7 @@ int activitypub_post_handler(const xs_dict *req, const char *q_path, char **body, int *b_size, char **ctype); xs_dict *emojis(void); +xs_dict *emojis_rm_categories(void); xs_str *format_text_with_emoji(snac *user, const char *text, int ems, const char *proxy); xs_str *not_really_markdown(const char *content, xs_list **attach, xs_list **tag); xs_str *sanitize(const char *content); -- cgit v1.2.3 From 5a437c0f1d1e2f590a177e0eb7e13c05958ede4d Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 13 Jan 2026 09:44:45 +0100 Subject: Version 2.88 RELEASED. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index 469982d..b6e1da1 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ -#define VERSION "2.87" +#define VERSION "2.88" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3 From 189ab6394eba999d4f174d629cdebfc5fdfd4bd3 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 22 Jan 2026 07:04:33 +0100 Subject: Version 2.89 RELEASED. --- snac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'snac.h') diff --git a/snac.h b/snac.h index b6e1da1..ef79594 100644 --- a/snac.h +++ b/snac.h @@ -1,7 +1,7 @@ /* snac - A simple, minimalistic ActivityPub instance */ /* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ -#define VERSION "2.88" +#define VERSION "2.89" #define USER_AGENT "snac/" VERSION -- cgit v1.2.3