summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'data.c')
-rw-r--r--data.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/data.c b/data.c
index 9972865..117e16f 100644
--- a/data.c
+++ b/data.c
@@ -1751,6 +1751,72 @@ xs_list *inbox_list(void)
1751} 1751}
1752 1752
1753 1753
1754/** instance-wide operations **/
1755
1756xs_str *_instance_block_fn(const char *instance)
1757{
1758 xs *s1 = xs_replace(instance, "https:/" "/", "");
1759 xs *l = xs_split(s1, "/");
1760 char *p = xs_list_get(l, 0);
1761 xs *md5 = xs_md5_hex(p, strlen(p));
1762
1763 return xs_fmt("%s/block/%s", srv_basedir, md5);
1764}
1765
1766
1767int is_instance_blocked(const char *instance)
1768{
1769 xs *fn = _instance_block_fn(instance);
1770
1771 return !!(mtime(fn) != 0.0);
1772}
1773
1774
1775int instance_block(const char *instance)
1776/* blocks a full instance */
1777{
1778 int ret;
1779
1780 /* create the subdir */
1781 xs *dir = xs_fmt("%s/block/", srv_basedir);
1782 mkdirx(dir);
1783
1784 if (!is_instance_blocked(instance)) {
1785 xs *fn = _instance_block_fn(instance);
1786 FILE *f;
1787
1788 if ((f = fopen(fn, "w")) != NULL) {
1789 fprintf(f, "%s\n", instance);
1790 fclose(f);
1791
1792 ret = 0;
1793 }
1794 else
1795 ret = -1;
1796 }
1797 else
1798 ret = -2;
1799
1800 return ret;
1801}
1802
1803
1804int instance_unblock(const char *instance)
1805/* unblocks a full instance */
1806{
1807 int ret;
1808
1809 if (is_instance_blocked(instance)) {
1810 xs *fn = _instance_block_fn(instance);
1811 ret = unlink(fn);
1812 }
1813 else
1814 ret = -2;
1815
1816 return ret;
1817}
1818
1819
1754/** notifications **/ 1820/** notifications **/
1755 1821
1756xs_str *notify_check_time(snac *snac, int reset) 1822xs_str *notify_check_time(snac *snac, int reset)