From cf3a5d8c979b114fceef43b35541b941bcbd62a1 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Mon, 17 Apr 2023 15:00:14 +0300 Subject: Private posts --- src/main/assets/scripts.js | 17 +++++++++------ src/main/java/com/juick/CommandsManager.java | 3 +++ .../java/com/juick/service/MessagesService.java | 3 +++ .../com/juick/service/MessagesServiceImpl.java | 6 ++++++ src/main/java/com/juick/service/UserService.java | 1 + src/main/java/com/juick/www/api/Messages.java | 9 ++++++++ src/main/resources/messages.properties | 2 ++ src/main/resources/messages_ru.properties | 2 ++ src/main/resources/templates/views/thread.html | 12 ++++++----- .../java/com/juick/server/tests/ServerTests.java | 24 ++++++++++++++++++++++ 10 files changed, 68 insertions(+), 11 deletions(-) diff --git a/src/main/assets/scripts.js b/src/main/assets/scripts.js index 20d32fd9..6c5e987b 100644 --- a/src/main/assets/scripts.js +++ b/src/main/assets/scripts.js @@ -478,12 +478,18 @@ function subscribeMessage(e, mid) { function setPrivacy(e, mid) { fetch('/api/messages/set_privacy?mid=' + mid + '&hash=' + document.getElementById('body').getAttribute('data-hash'), { - credentials: 'same-origin' + credentials: 'same-origin', + method: 'POST' }) .then(handleErrors) - .then(function() { - e.closest('article').append(resultMessage('OK!')); - }); + .then(function(response) { + if (response.ok) { + window.location.reload(); + } else { + alert('Something went wrong :('); + } + }) + .catch(console.err); return false; } @@ -702,10 +708,9 @@ ready(() => { Array.from(document.querySelectorAll('.l .a-privacy')).forEach(function(e) { e.addEventListener('click', function(e) { - const article = /** @type {HTMLElement} */((e.target).closest('article')); setPrivacy( e.target, - article.getAttribute('data-mid')); + document.getElementById('content').getAttribute('data-mid')); e.preventDefault(); }); }); diff --git a/src/main/java/com/juick/CommandsManager.java b/src/main/java/com/juick/CommandsManager.java index a643225f..a7a880c5 100644 --- a/src/main/java/com/juick/CommandsManager.java +++ b/src/main/java/com/juick/CommandsManager.java @@ -554,6 +554,9 @@ public class CommandsManager { return CommandResult.fromString("Tags are NOT updated (5 tags maximum?)"); } } else { + if (!messagesService.canViewThread(mid, user.getUid())) { + return CommandResult.fromString("Message unavailable"); + } if (txt.length() > 4096) { return CommandResult.fromString("Sorry, 4096 characters maximum."); } diff --git a/src/main/java/com/juick/service/MessagesService.java b/src/main/java/com/juick/service/MessagesService.java index a6b6e2e2..91788a3c 100644 --- a/src/main/java/com/juick/service/MessagesService.java +++ b/src/main/java/com/juick/service/MessagesService.java @@ -162,4 +162,7 @@ public interface MessagesService { void setMessageProperty(Integer mid, Integer rid, String key, String value); Optional> findMessageByProperty(String key, String value); + + @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true) + void setFriendsOnly(Integer mid, Boolean friendsOnly); } diff --git a/src/main/java/com/juick/service/MessagesServiceImpl.java b/src/main/java/com/juick/service/MessagesServiceImpl.java index 53f2407c..85dadd77 100644 --- a/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -1175,4 +1175,10 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ } return Optional.empty(); } + @Transactional + @Override + public void setFriendsOnly(Integer mid, Boolean friendsOnly) { + int privacy = friendsOnly ? -1 : 1; + jdbcTemplate.update("UPDATE messages SET privacy=? WHERE message_id=?", privacy, mid); + } } diff --git a/src/main/java/com/juick/service/UserService.java b/src/main/java/com/juick/service/UserService.java index ec5beb13..53acdfab 100644 --- a/src/main/java/com/juick/service/UserService.java +++ b/src/main/java/com/juick/service/UserService.java @@ -201,5 +201,6 @@ public interface UserService { boolean deleteToken(String serviceType, String token); + @CacheEvict(value = "users_by_name", allEntries = true) void setPremium(Integer uid, boolean isPremium); } diff --git a/src/main/java/com/juick/www/api/Messages.java b/src/main/java/com/juick/www/api/Messages.java index e3426454..f059aa88 100644 --- a/src/main/java/com/juick/www/api/Messages.java +++ b/src/main/java/com/juick/www/api/Messages.java @@ -203,4 +203,13 @@ public class Messages { } throw new HttpBadRequestException(); } + @PostMapping("/api/messages/set_privacy") + public void togglePrivacy(@Parameter(hidden = true) User visitor, @RequestParam Integer mid) { + if (visitor.isPremium() || userService.isAdminUser(visitor)) { + var msg = messagesService.getMessage(mid).orElseThrow(HttpNotFoundException::new); + messagesService.setFriendsOnly(mid, !msg.FriendsOnly); + } else { + throw new HttpBadRequestException(); + } + } } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index e6612732..1c136f77 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -66,6 +66,8 @@ message.subscribed=Subscribed message.delete=Delete message.loginForSending=Login to post messages and comments message.sendLoginToXmpp=Send LOGIN to juick@juick.com +message.lock=Make private +message.unlock=Make public messages.next=Next diff --git a/src/main/resources/messages_ru.properties b/src/main/resources/messages_ru.properties index f07c8136..cce622d5 100644 --- a/src/main/resources/messages_ru.properties +++ b/src/main/resources/messages_ru.properties @@ -65,6 +65,8 @@ message.subscribed=Подписан message.delete=Удалить message.loginForSending=Чтобы добавлять сообщения и комментарии, представьтесь message.sendLoginToXmpp=Отправьте LOGIN на juick@juick.com +message.lock=Скрыть +message.unlock=Открыть доступ messages.next=Читать дальше diff --git a/src/main/resources/templates/views/thread.html b/src/main/resources/templates/views/thread.html index 84c52282..819a627e 100644 --- a/src/main/resources/templates/views/thread.html +++ b/src/main/resources/templates/views/thread.html @@ -40,13 +40,15 @@ {% endif %}