aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-05-18 15:33:38 +0300
committerGravatar Vitaly Takmazov2018-07-24 14:35:02 +0300
commit8a0fbbd35c13054a947ea0d27ca117542bc452b9 (patch)
tree4266fbfaac3f1e268e780bc1cfa3cdc23ccd955c
parent3fa18888d5ca53b59c778de3f829870614d05c27 (diff)
JPA WIPjpa
-rw-r--r--juick-common/src/main/java/com/juick/server/CommandsManager.java11
-rw-r--r--juick-common/src/main/java/com/juick/service/CrosspostService.java33
-rw-r--r--juick-common/src/main/java/com/juick/service/EmailService.java16
-rw-r--r--juick-common/src/main/java/com/juick/service/MessagesService.java3
-rw-r--r--juick-common/src/main/java/com/juick/service/PMQueriesService.java18
-rw-r--r--juick-common/src/main/java/com/juick/service/TelegramService.java2
-rw-r--r--juick-common/src/main/java/com/juick/service/UserService.java18
-rw-r--r--juick-common/src/main/java/com/juick/service/security/HashParamAuthenticationFilter.java2
-rw-r--r--juick-common/src/main/java/com/juick/service/security/JuickUserDetailsService.java2
-rw-r--r--juick-common/src/main/java/com/juick/service/security/deprecated/CookieSimpleHashRememberMeServices.java12
-rw-r--r--juick-server/build.gradle2
-rw-r--r--juick-server/src/main/java/com/juick/server/EmailManager.java10
-rw-r--r--juick-server/src/main/java/com/juick/server/TelegramBotManager.java20
-rw-r--r--juick-server/src/main/java/com/juick/server/TwitterManager.java4
-rw-r--r--juick-server/src/main/java/com/juick/server/XMPPConnection.java21
-rw-r--r--juick-server/src/main/java/com/juick/server/api/PM.java12
-rw-r--r--juick-server/src/main/java/com/juick/server/api/SocialLogin.java33
-rw-r--r--juick-server/src/main/java/com/juick/server/api/Users.java2
-rw-r--r--juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java84
-rw-r--r--juick-server/src/main/java/com/juick/service/EmailServiceImpl.java35
-rw-r--r--juick-server/src/main/java/com/juick/service/EntityUtils.java22
-rw-r--r--juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java39
-rw-r--r--juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java48
-rw-r--r--juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java14
-rw-r--r--juick-server/src/main/java/com/juick/service/UserServiceImpl.java245
-rw-r--r--juick-server/src/main/java/com/juick/service/data/MessagesRepository.java7
-rw-r--r--juick-server/src/main/java/com/juick/service/data/TextRepository.java7
-rw-r--r--juick-server/src/main/java/com/juick/service/data/UsersRepository.java23
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java20
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java20
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java20
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java20
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java19
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java81
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java31
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java15
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java30
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java20
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java42
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java109
-rw-r--r--juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java20
-rw-r--r--juick-server/src/main/resources/schema.sql15
-rw-r--r--juick-server/src/test/java/com/juick/server/tests/ServerTests.java322
-rw-r--r--juick-server/src/test/resources/data.sql1
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/Login.java2
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/MessagesWWW.java6
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/NewMessage.java6
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/Settings.java28
-rw-r--r--juick-www/src/main/java/com/juick/www/controllers/SignUp.java35
-rw-r--r--juick-www/src/test/java/com/juick/WebAppTests.java38
50 files changed, 1000 insertions, 645 deletions
diff --git a/juick-common/src/main/java/com/juick/server/CommandsManager.java b/juick-common/src/main/java/com/juick/server/CommandsManager.java
index 7dd372b1..a5484f75 100644
--- a/juick-common/src/main/java/com/juick/server/CommandsManager.java
+++ b/juick-common/src/main/java/com/juick/server/CommandsManager.java
@@ -114,13 +114,12 @@ public class CommandsManager {
: HttpUtils.downloadImage(attachment.toURL(), tmpDir).getHost();
attachmentType = attachmentFName.substring(attachmentFName.length() - 3);
}
- int mid = messagesService.createMessage(user.getUid(), body, attachmentType, tags);
- subscriptionService.subscribeMessage(messagesService.getMessage(mid), user);
+ com.juick.Message msg = messagesService.createMessage(user, body, attachmentType, tags);
+ subscriptionService.subscribeMessage(msg, user);
if (haveAttachment) {
- String fname = String.format("%d.%s", mid, attachmentType);
+ String fname = String.format("%d.%s", msg.getMid(), attachmentType);
imagesService.saveImageWithPreviews(attachmentFName, fname);
}
- com.juick.Message msg = messagesService.getMessage(mid);
applicationEventPublisher.publishEvent(new MessageReadEvent(this, user, msg));
applicationEventPublisher.publishEvent(new MessageEvent(this, msg, subscriptionService.getSubscribedUsers(msg.getUser().getUid(), msg.getMid())));
return CommandResult.build(msg, "New message posted.\n#" + msg.getMid() + " https://juick.com/m/" + msg.getMid(), String.format("[New message](%s) posted", PlainTextFormatter.formatUrl(msg)));
@@ -145,7 +144,7 @@ public class CommandsManager {
@UserCommand(pattern = "^login$", patternFlags = Pattern.CASE_INSENSITIVE,
help = "LOGIN - log in to Juick website")
public CommandResult commandLogin(User user_from, URI attachment, String[] input) {
- return CommandResult.fromString("http://juick.com/login?hash=" + userService.getHashByUID(user_from.getUid()));
+ return CommandResult.fromString("http://juick.com/login?hash=" + userService.getHashForUser(user_from));
}
@UserCommand(pattern = "^\\@(\\S+)\\s+([\\s\\S]+)$", help = "@username message - send PM to username")
public CommandResult commandPM(User user_from, URI attachment, String... arguments) {
@@ -155,7 +154,7 @@ public class CommandsManager {
if (!user_to.isAnonymous()) {
if (!userService.isInBLAny(user_to.getUid(), user_from.getUid())) {
- if (pmQueriesService.createPM(user_from.getUid(), user_to.getUid(), body)) {
+ if (pmQueriesService.createPM(user_from, user_to, body)) {
com.juick.Message jmsg = new com.juick.Message();
jmsg.setUser(user_from);
jmsg.setTo(user_to);
diff --git a/juick-common/src/main/java/com/juick/service/CrosspostService.java b/juick-common/src/main/java/com/juick/service/CrosspostService.java
index 38481d72..20f12681 100644
--- a/juick-common/src/main/java/com/juick/service/CrosspostService.java
+++ b/juick-common/src/main/java/com/juick/service/CrosspostService.java
@@ -18,6 +18,7 @@
package com.juick.service;
import com.juick.ExternalToken;
+import com.juick.User;
import com.juick.server.helpers.ApplicationStatus;
import org.apache.commons.lang3.tuple.Pair;
@@ -29,9 +30,9 @@ import java.util.Optional;
*/
public interface CrosspostService {
- Optional<ExternalToken> getTwitterToken(int uid);
+ Optional<ExternalToken> getTwitterToken(User user);
- boolean deleteTwitterToken(Integer uid);
+ boolean deleteTwitterToken(User user);
void addFacebookState(String state, String redirectUri);
@@ -41,30 +42,30 @@ public interface CrosspostService {
String verifyVKState(String state);
- Optional<Pair<String, String>> getFacebookTokens(int uid);
+ Optional<Pair<String, String>> getFacebookTokens(User user);
- ApplicationStatus getFbCrossPostStatus(int uid);
+ ApplicationStatus getFbCrossPostStatus(User user);
- boolean enableFBCrosspost(Integer uid);
+ boolean enableFBCrosspost(User user);
- void disableFBCrosspost(Integer uid);
+ void disableFBCrosspost(User user);
@Nonnull
- String getTwitterName(int uid);
+ String getTwitterName(User user);
- String getTelegramName(int uid);
+ String getTelegramName(User user);
- Optional<Pair<String, String>> getVkTokens(int uid);
+ Optional<Pair<String, String>> getVkTokens(User user);
- void deleteVKUser(Integer uid);
+ void deleteVKUser(User user);
- int getUIDbyFBID(long fbID);
+ Optional<User> getUserByFBID(long fbID);
boolean createFacebookUser(long fbID, String loginhash, String token, String fbName, String fbLink);
boolean updateFacebookUser(long fbID, String token, String fbName, String fbLink);
- int getUIDbyVKID(long vkID);
+ Optional<User> getUserByVKID(long vkID);
boolean createVKUser(long vkID, String loginhash, String token, String vkName, String vkLink);
@@ -72,15 +73,15 @@ public interface CrosspostService {
String getTelegramNameByHash(String hash);
- boolean setFacebookUser(String hash, int uid);
+ boolean setFacebookUser(String hash, User user);
String getVKNameByHash(String hash);
- boolean setVKUser(String hash, int uid);
+ boolean setVKUser(String hash, User user);
- boolean setTelegramUser(String hash, int uid);
+ boolean setTelegramUser(String hash, User user);
String getJIDByHash(String hash);
- boolean setJIDUser(String hash, int uid);
+ boolean setJIDUser(String hash, User user);
}
diff --git a/juick-common/src/main/java/com/juick/service/EmailService.java b/juick-common/src/main/java/com/juick/service/EmailService.java
index 2440bcb4..74ca7c71 100644
--- a/juick-common/src/main/java/com/juick/service/EmailService.java
+++ b/juick-common/src/main/java/com/juick/service/EmailService.java
@@ -17,17 +17,19 @@
package com.juick.service;
+import com.juick.User;
+
import java.util.List;
/**
* Created by vitalyster on 09.12.2016.
*/
public interface EmailService {
- boolean verifyAddressByCode(Integer userId, String code);
- boolean addVerificationCode(Integer userId, String account, String code);
- boolean addEmail(Integer userId, String email);
- boolean deleteEmail(Integer userId, String account);
- String getNotificationsEmail(Integer userId);
- boolean setNotificationsEmail(Integer userId, String account);
- List<String> getEmails(Integer userId, boolean active);
+ boolean verifyAddressByCode(User user, String code);
+ boolean addVerificationCode(User user, String account, String code);
+ boolean addEmail(User user, String email);
+ boolean deleteEmail(User user, String account);
+ String getNotificationsEmail(User user);
+ boolean setNotificationsEmail(User user, String account);
+ List<String> getEmails(User user, boolean active);
}
diff --git a/juick-common/src/main/java/com/juick/service/MessagesService.java b/juick-common/src/main/java/com/juick/service/MessagesService.java
index 30719cc6..4e6477d3 100644
--- a/juick-common/src/main/java/com/juick/service/MessagesService.java
+++ b/juick-common/src/main/java/com/juick/service/MessagesService.java
@@ -17,6 +17,7 @@
package com.juick.service;
+import com.juick.Message;
import com.juick.Reaction;
import com.juick.User;
import com.juick.server.helpers.ResponseReply;
@@ -30,7 +31,7 @@ import java.util.Set;
* Created by aalexeev on 11/13/16.
*/
public interface MessagesService {
- int createMessage(int uid, String txt, String attachment, Collection<com.juick.Tag> tags);
+ Message createMessage(User user, String txt, String attachment, Collection<com.juick.Tag> tags);
int createReply(int mid, int rid, User user, String txt, String attachment);
diff --git a/juick-common/src/main/java/com/juick/service/PMQueriesService.java b/juick-common/src/main/java/com/juick/service/PMQueriesService.java
index 4c70eece..45d6754e 100644
--- a/juick-common/src/main/java/com/juick/service/PMQueriesService.java
+++ b/juick-common/src/main/java/com/juick/service/PMQueriesService.java
@@ -25,21 +25,19 @@ import java.util.List;
* Created by aalexeev on 11/13/16.
*/
public interface PMQueriesService {
- boolean createPM(int uidFrom, int uid_to, String body);
+ boolean createPM(User me, User to, String body);
- boolean addPMinRoster(int uid, String jid);
+ boolean addPMinRoster(User me, String jid);
- boolean removePMinRoster(int uid, String jid);
+ boolean removePMinRoster(User me, String jid);
- boolean havePMinRoster(int uid, String jid);
+ boolean havePMinRoster(User me, String jid);
- String getLastView(int uidFrom, int uidTo);
+ List<User> getPMLastConversationsUsers(User me, int cnt);
- List<User> getPMLastConversationsUsers(int uid, int cnt);
+ List<com.juick.Message> getPMMessages(User me, User to);
- List<com.juick.Message> getPMMessages(int uid, int uidTo);
+ List<com.juick.Message> getLastPMInbox(User me);
- List<com.juick.Message> getLastPMInbox(int uid);
-
- List<com.juick.Message> getLastPMSent(int uid);
+ List<com.juick.Message> getLastPMSent(User me);
}
diff --git a/juick-common/src/main/java/com/juick/service/TelegramService.java b/juick-common/src/main/java/com/juick/service/TelegramService.java
index 7786ca9f..4323df35 100644
--- a/juick-common/src/main/java/com/juick/service/TelegramService.java
+++ b/juick-common/src/main/java/com/juick/service/TelegramService.java
@@ -31,7 +31,7 @@ public interface TelegramService {
List<Long> getChats();
- int getUser(long tgId);
+ User getUser(long tgId);
boolean createTelegramUser(long tgID, String tgName);
diff --git a/juick-common/src/main/java/com/juick/service/UserService.java b/juick-common/src/main/java/com/juick/service/UserService.java
index df62f0ef..de856adf 100644
--- a/juick-common/src/main/java/com/juick/service/UserService.java
+++ b/juick-common/src/main/java/com/juick/service/UserService.java
@@ -39,7 +39,7 @@ public interface UserService {
String getSignUpHashByTelegramID(Long telegramId, String username);
- int createUser(String username, String password);
+ User createUser(String username, String password);
Optional<User> getUserByUID(int uid);
@@ -49,8 +49,6 @@ public interface UserService {
User getUserByEmail(String email);
- List<User> getFullyUsersByNames(Collection<String> usernames);
-
User getUserByJID(String jid);
List<User> getUsersByName(Collection<String> unames);
@@ -59,17 +57,11 @@ public interface UserService {
List<String> getJIDsbyUID(int uid);
- int getUIDbyJID(String jid);
-
- int getUIDbyName(String uname);
-
- int getUIDbyHash(String hash);
-
com.juick.User getUserByHash(String hash);
- String getHashByUID(int uid);
+ String getHashForUser(User user);
- int checkPassword(String username, String password);
+ User checkPassword(String username, String password);
boolean updatePassword(User user, String newPassword);
@@ -81,8 +73,6 @@ public interface UserService {
boolean updateUserInfo(User user, UserInfo info);
- boolean getCanMedia(int uid);
-
boolean isInWL(int uid, int check);
boolean isInBL(int uid, int check);
@@ -117,7 +107,7 @@ public interface UserService {
List<Auth> getAuthCodes(User user);
- List<String> getEmails(User user);
+ Collection<String> getEmails(User user);
String getEmailHash(User user);
diff --git a/juick-common/src/main/java/com/juick/service/security/HashParamAuthenticationFilter.java b/juick-common/src/main/java/com/juick/service/security/HashParamAuthenticationFilter.java
index b56b98c8..9bf83f86 100644
--- a/juick-common/src/main/java/com/juick/service/security/HashParamAuthenticationFilter.java
+++ b/juick-common/src/main/java/com/juick/service/security/HashParamAuthenticationFilter.java
@@ -70,7 +70,7 @@ public class HashParamAuthenticationFilter extends OncePerRequestFilter {
if (!user.isAnonymous()) {
User userWithPassword = userService.getFullyUserByName(user.getName());
- userWithPassword.setAuthHash(userService.getHashByUID(userWithPassword.getUid()));
+ userWithPassword.setAuthHash(userService.getHashForUser(userWithPassword));
Authentication authentication = new RememberMeAuthenticationToken(
((AbstractRememberMeServices)rememberMeServices).getKey(), new JuickUser(userWithPassword), JuickUser.USER_AUTHORITY);
diff --git a/juick-common/src/main/java/com/juick/service/security/JuickUserDetailsService.java b/juick-common/src/main/java/com/juick/service/security/JuickUserDetailsService.java
index f6ae8909..78293f38 100644
--- a/juick-common/src/main/java/com/juick/service/security/JuickUserDetailsService.java
+++ b/juick-common/src/main/java/com/juick/service/security/JuickUserDetailsService.java
@@ -44,7 +44,7 @@ public class JuickUserDetailsService implements UserDetailsService {
com.juick.User user = userService.getFullyUserByName(username);
if (user != null) {
- user.setAuthHash(userService.getHashByUID(user.getUid()));
+ user.setAuthHash(userService.getHashForUser(user));
return new JuickUser(user);
}
diff --git a/juick-common/src/main/java/com/juick/service/security/deprecated/CookieSimpleHashRememberMeServices.java b/juick-common/src/main/java/com/juick/service/security/deprecated/CookieSimpleHashRememberMeServices.java
index b658e16f..019ee502 100644
--- a/juick-common/src/main/java/com/juick/service/security/deprecated/CookieSimpleHashRememberMeServices.java
+++ b/juick-common/src/main/java/com/juick/service/security/deprecated/CookieSimpleHashRememberMeServices.java
@@ -80,13 +80,13 @@ public class CookieSimpleHashRememberMeServices extends AbstractRememberMeServic
logger.debug("Creating new persistent login for user {}", username);
try {
- int uid = userService.getUIDbyName(username);
+ User user = userService.getUserByName(username);
- Assert.isTrue(uid > 0);
+ Assert.isTrue(user.getUid() > 0);
String hash = RandomStringUtils.randomAlphanumeric(16).toUpperCase();
- userService.setLoginForUser(uid, hash);
+ userService.setLoginForUser(user.getUid(), hash);
setCookie(new String[]{hash}, getTokenValiditySeconds(), request, response);
} catch (Exception e) {
@@ -107,11 +107,11 @@ public class CookieSimpleHashRememberMeServices extends AbstractRememberMeServic
throw new InvalidCookieException("Cookie is invalid and hash parameter not found");
}
- int uid = userService.getUIDbyHash(hash);
- if (uid <= 0)
+ User user = userService.getUserByHash(hash);
+ if (user.getUid() <= 0)
throw new UsernameNotFoundException("User not found by hash, cookies" + cookieTokens);
- Optional<User> userOptional = userService.getUserByUID(uid);
+ Optional<User> userOptional = userService.getUserByUID(user.getUid());
Assert.isTrue(userOptional.isPresent());
diff --git a/juick-server/build.gradle b/juick-server/build.gradle
index a28f6efa..7258b3c1 100644
--- a/juick-server/build.gradle
+++ b/juick-server/build.gradle
@@ -4,7 +4,7 @@ apply plugin: 'org.springframework.boot'
dependencies {
compile project(':juick-common')
compile ('org.springframework.boot:spring-boot-starter-security')
- compile ('org.springframework.boot:spring-boot-starter-jdbc')
+ compile ('org.springframework.boot:spring-boot-starter-data-jpa')
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
providedRuntime 'com.h2database:h2:1.4.196'
diff --git a/juick-server/src/main/java/com/juick/server/EmailManager.java b/juick-server/src/main/java/com/juick/server/EmailManager.java
index 66e84358..8e07f7d3 100644
--- a/juick-server/src/main/java/com/juick/server/EmailManager.java
+++ b/juick-server/src/main/java/com/juick/server/EmailManager.java
@@ -50,19 +50,19 @@ public class EmailManager implements ApplicationListener<MessageEvent> {
}
if (MessageUtils.isPM(msg)) {
String subject = String.format("Private message from %s", msg.getUser().getName());
- emailService.getEmails(msg.getTo().getUid(), true).forEach(email -> {
+ emailService.getEmails(msg.getTo(), true).forEach(email -> {
emailNotify(email, subject, msg);
});
} else if (MessageUtils.isReply(msg)) {
Message originalMessage = messagesService.getMessage(msg.getMid());
String subject = String.format("New reply to %s", originalMessage.getUser().getName());
subscribedUsers.stream()
- .flatMap(user -> emailService.getEmails(user.getUid(), true).stream())
+ .flatMap(user -> emailService.getEmails(user, true).stream())
.forEach(email -> emailNotify(email, subject, msg));
} else {
String subject = String.format("New message from %s", msg.getUser().getName());
subscribedUsers
- .forEach(user -> emailService.getEmails(user.getUid(), true)
+ .forEach(user -> emailService.getEmails(user, true)
.forEach(email -> emailNotify(email, subject, msg)));
}
}
@@ -96,7 +96,7 @@ public class EmailManager implements ApplicationListener<MessageEvent> {
", discussion or tag. Reply to this email directly or view it on Juick: %s.",
formatPost(msg), formatUrl(msg));
MimeBodyPart textBodyPart = new MimeBodyPart();
- String hash = userService.getHashByUID(userService.getUserByEmail(email).getUid());
+ String hash = userService.getHashForUser(userService.getUserByEmail(email));
textBodyPart.setContent(plainText, "text/plain; charset=UTF-8");
String htmlText = String.format("%s<br /><br />--<br />You are receiving this because you are subscribed to this user" +
", discussion or tag. Reply to this email directly or <a href=\"%s\"><img src=\"https://api.juick.com/thread/mark_read/%d-%d.gif?hash=%s\" />view it</a> on Juick." +
@@ -110,7 +110,7 @@ public class EmailManager implements ApplicationListener<MessageEvent> {
multipart.addBodyPart(htmlBodyPart);
message.setContent(multipart);
message.setHeader("List-Unsubscribe", String.format("https://juick.com/settings?hash=%s",
- userService.getHashByUID(userService.getUserByEmail(email).getUid())));
+ userService.getHashForUser(userService.getUserByEmail(email))));
message.saveChanges();
transport.connect();
transport.sendMessage(message, message.getAllRecipients());
diff --git a/juick-server/src/main/java/com/juick/server/TelegramBotManager.java b/juick-server/src/main/java/com/juick/server/TelegramBotManager.java
index 3c3fbc9f..c47493b4 100644
--- a/juick-server/src/main/java/com/juick/server/TelegramBotManager.java
+++ b/juick-server/src/main/java/com/juick/server/TelegramBotManager.java
@@ -112,7 +112,7 @@ public class TelegramBotManager implements NotificationListener {
return;
}
}
- User user_from = userService.getUserByUID(telegramService.getUser(message.chat().id())).orElse(AnonymousUser.INSTANCE);
+ User user_from = telegramService.getUser(message.chat().id());
logger.info("Found juick user {}", user_from.getUid());
List<Long> chats = telegramService.getChats();
@@ -161,7 +161,7 @@ public class TelegramBotManager implements NotificationListener {
|| text.equalsIgnoreCase("/logout")
|| text.equalsIgnoreCase("/start")
|| text.equalsIgnoreCase("/help")) {
- String msgUrl = "http://juick.com/login?hash=" + userService.getHashByUID(user_from.getUid());
+ String msgUrl = "http://juick.com/login?hash=" + userService.getHashForUser(user_from);
String msg = String.format("Hi, %s!\nYou can post messages and images to Juick there.\n" +
"Tap to [log into website](%s) to get more info", user_from.getName(), msgUrl);
telegramNotify(message.from().id().longValue(), msg, new com.juick.Message());
@@ -275,7 +275,7 @@ public class TelegramBotManager implements NotificationListener {
}
private void processTelegramResponse(Long chatId, SendResponse response, com.juick.Message source) {
- int userId = telegramService.getUser(chatId);
+ User user = telegramService.getUser(chatId);
if (!response.isOk()) {
if (response.errorCode() == 403) {
// remove from anonymous chat
@@ -285,11 +285,9 @@ public class TelegramBotManager implements NotificationListener {
logger.info("deleted {} chat", d);
}
);
- if (userId > 0) {
- User userToDelete = userService.getUserByUID(userId)
- .orElseThrow(IllegalStateException::new);
- boolean status = telegramService.deleteTelegramUser(userToDelete.getUid());
- logger.info("deleting telegram id of @{} : {}", userToDelete.getName(), status);
+ if (!user.isAnonymous()) {
+ boolean status = telegramService.deleteTelegramUser(user.getUid());
+ logger.info("deleting telegram id of @{} : {}", user.getName(), status);
boolean chatStatus = telegramService.deleteChat(chatId);
logger.info("deleting telegram chat {} : {}", chatId, chatStatus);
}
@@ -299,9 +297,7 @@ public class TelegramBotManager implements NotificationListener {
}
} else {
if (MessageUtils.isReply(source)) {
- messagesService.setLastReadComment(userService.getUserByUID(userId)
- .orElseThrow(IllegalStateException::new), source.getMid(), source.getRid());
- User user = userService.getUserByUID(userId).orElseThrow(IllegalStateException::new);
+ messagesService.setLastReadComment(user, source.getMid(), source.getRid());
applicationEventPublisher.publishEvent(new MessageReadEvent(this, user, source));
}
}
@@ -350,7 +346,7 @@ public class TelegramBotManager implements NotificationListener {
users.forEach(c -> telegramNotify(c, msg, jmsg));
// anonymous
- chats.stream().filter(u -> telegramService.getUser(u) == 0).forEach(c -> telegramNotify(c, msg, jmsg));
+ chats.stream().filter(u -> telegramService.getUser(u).isAnonymous()).forEach(c -> telegramNotify(c, msg, jmsg));
}
}
@Override
diff --git a/juick-server/src/main/java/com/juick/server/TwitterManager.java b/juick-server/src/main/java/com/juick/server/TwitterManager.java
index 9b83b197..1f958313 100644
--- a/juick-server/src/main/java/com/juick/server/TwitterManager.java
+++ b/juick-server/src/main/java/com/juick/server/TwitterManager.java
@@ -50,7 +50,7 @@ public class TwitterManager implements NotificationListener {
private String twitter_consumer_secret;
void twitterPost(final com.juick.Message jmsg) {
- crosspostService.getTwitterToken(jmsg.getUser().getUid()).ifPresent(t -> {
+ crosspostService.getTwitterToken(jmsg.getUser()).ifPresent(t -> {
String status = MessageUtils.getMessageHashTags(jmsg) + StringUtils.defaultString(jmsg.getText());
if (status.length() > 253) {
status = status.substring(0, 252) + "…";
@@ -77,7 +77,7 @@ public class TwitterManager implements NotificationListener {
if (MessageUtils.isPM(msg) || MessageUtils.isReply(msg) || msg.isService()) {
return;
}
- if (StringUtils.isNotEmpty(crosspostService.getTwitterName(msg.getUser().getUid()))) {
+ if (StringUtils.isNotEmpty(crosspostService.getTwitterName(msg.getUser()))) {
if (msg.getTags().stream().noneMatch(t -> t.getName().equals("notwitter"))) {
twitterPost(msg);
}
diff --git a/juick-server/src/main/java/com/juick/server/XMPPConnection.java b/juick-server/src/main/java/com/juick/server/XMPPConnection.java
index 12e66d40..32b5a552 100644
--- a/juick-server/src/main/java/com/juick/server/XMPPConnection.java
+++ b/juick-server/src/main/java/com/juick/server/XMPPConnection.java
@@ -363,7 +363,7 @@ public class XMPPConnection implements StanzaListener, NotificationListener {
Message mm = new Message();
mm.setTo(Jid.of(userJid));
mm.setType(Message.Type.CHAT);
- boolean inroster = pmQueriesService.havePMinRoster(msg.getUser().getUid(), userJid);
+ boolean inroster = pmQueriesService.havePMinRoster(msg.getUser(), userJid);
if (inroster) {
mm.setFrom(Jid.of(msg.getUser().getName(), "juick.com", "Juick"));
mm.setBody(msg.getText());
@@ -463,7 +463,7 @@ public class XMPPConnection implements StanzaListener, NotificationListener {
private void incomingPresence(Presence p) {
final String username = p.getTo().getLocal();
final boolean toJuick = username.equals(jid.getLocal());
-
+ User toUser = userService.getUserByName(username);
if (p.getType() == null) {
Presence reply = new Presence();
reply.setFrom(p.getTo().asBareJid());
@@ -471,12 +471,7 @@ public class XMPPConnection implements StanzaListener, NotificationListener {
reply.setType(Presence.Type.UNSUBSCRIBE);
router.send(ClientPresence.from(reply));
} else if (p.getType().equals(Presence.Type.PROBE)) {
- int uid_to = 0;
- if (!toJuick) {
- uid_to = userService.getUIDbyName(username);
- }
-
- if (toJuick || uid_to > 0) {
+ if (toJuick || !toUser.isAnonymous()) {
Presence reply = new Presence();
reply.setFrom(p.getTo().withResource(jid.getResource()));
reply.setTo(p.getFrom());
@@ -499,9 +494,8 @@ public class XMPPConnection implements StanzaListener, NotificationListener {
if (toJuick) {
canSubscribe = true;
} else {
- int uid_to = userService.getUIDbyName(username);
- if (uid_to > 0) {
- pmQueriesService.addPMinRoster(uid_to, p.getFrom().asBareJid().toEscapedString());
+ if (!toUser.isAnonymous()) {
+ pmQueriesService.addPMinRoster(toUser, p.getFrom().asBareJid().toEscapedString());
canSubscribe = true;
}
}
@@ -527,9 +521,8 @@ public class XMPPConnection implements StanzaListener, NotificationListener {
}
} else if (p.getType().equals(Presence.Type.UNSUBSCRIBE)) {
if (!toJuick) {
- int uid_to = userService.getUIDbyName(username);
- if (uid_to > 0) {
- pmQueriesService.removePMinRoster(uid_to, p.getFrom().asBareJid().toEscapedString());
+ if (!toUser.isAnonymous()) {
+ pmQueriesService.removePMinRoster(toUser, p.getFrom().asBareJid().toEscapedString());
}
}
diff --git a/juick-server/src/main/java/com/juick/server/api/PM.java b/juick-server/src/main/java/com/juick/server/api/PM.java
index cbd70bed..0985e7c4 100644
--- a/juick-server/src/main/java/com/juick/server/api/PM.java
+++ b/juick-server/src/main/java/com/juick/server/api/PM.java
@@ -54,16 +54,16 @@ public class PM {
if (visitor.isAnonymous()) {
throw new HttpForbiddenException();
}
- int uid = 0;
+ User user = AnonymousUser.INSTANCE;
if (uname != null && uname.matches("^[a-zA-Z0-9\\-]{2,16}$")) {
- uid = userService.getUIDbyName(uname);
+ user = userService.getUserByName(uname);
}
- if (uid == 0) {
+ if (user.getUid() == 0) {
throw new HttpBadRequestException();
}
- return pmQueriesService.getPMMessages(visitor.getUid(), uid);
+ return pmQueriesService.getPMMessages(visitor, user);
}
@RequestMapping(value = "/pm", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@@ -87,7 +87,7 @@ public class PM {
throw new HttpForbiddenException();
}
- if (pmQueriesService.createPM(visitor.getUid(), userTo.getUid(), body)) {
+ if (pmQueriesService.createPM(visitor, userTo, body)) {
com.juick.Message jmsg = new com.juick.Message();
jmsg.setUser(visitor);
jmsg.setText(body);
@@ -112,7 +112,7 @@ public class PM {
cnt = 10;
}
- List<User> lastconv = pmQueriesService.getPMLastConversationsUsers(visitor.getUid(), cnt);
+ List<User> lastconv = pmQueriesService.getPMLastConversationsUsers(visitor, cnt);
PrivateChats pms = new PrivateChats();
pms.setUsers(lastconv);
return pms;
diff --git a/juick-server/src/main/java/com/juick/server/api/SocialLogin.java b/juick-server/src/main/java/com/juick/server/api/SocialLogin.java
index dc7425e1..195d1217 100644
--- a/juick-server/src/main/java/com/juick/server/api/SocialLogin.java
+++ b/juick-server/src/main/java/com/juick/server/api/SocialLogin.java
@@ -25,6 +25,7 @@ import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Verb;
import com.github.scribejava.core.oauth.OAuth20Service;
import com.juick.facebook.User;
+import com.juick.server.helpers.AnonymousUser;
import com.juick.server.util.HttpBadRequestException;
import com.juick.service.CrosspostService;
import com.juick.service.EmailService;
@@ -44,6 +45,8 @@ import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.io.IOException;
+import java.util.Map;
+import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
@@ -137,22 +140,22 @@ public class SocialLogin {
throw new HttpBadRequestException();
}
- int uid = crosspostService.getUIDbyFBID(fbID);
- if (uid > 0) {
+ com.juick.User user = crosspostService.getUserByFBID(fbID).orElse(AnonymousUser.INSTANCE);
+ if (!user.isAnonymous()) {
if (!crosspostService.updateFacebookUser(fbID, token.getAccessToken(), fb.getName(), fb.getLink())) {
logger.error("error updating facebook user, id: {}, token: {}", fbID, token.getAccessToken());
throw new HttpBadRequestException();
}
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(redirectUrl);
- uriComponentsBuilder.queryParam("hash", userService.getHashByUID(uid));
+ uriComponentsBuilder.queryParam("hash", userService.getHashForUser(user));
return "redirect:" + uriComponentsBuilder.build().toUriString();
} else if (fb.getVerified()) {
if (!crosspostService.createFacebookUser(fbID, state, token.getAccessToken(), fb.getName(), fb.getLink())) {
if (StringUtils.isNotEmpty(fb.getEmail())) {
logger.info("found {} for facebook user {}", fb.getEmail(), fb.getLink());
- Integer userId = crosspostService.getUIDbyFBID(fbID);
- if (!emailService.getEmails(userId, false).contains(fb.getEmail())) {
- emailService.addEmail(userId, fb.getEmail());
+ user = crosspostService.getUserByFBID(fbID).orElse(AnonymousUser.INSTANCE);
+ if (!emailService.getEmails(user, false).contains(fb.getEmail())) {
+ emailService.addEmail(user, fb.getEmail());
}
}
logger.info("email not found for facebook user {}", fb.getLink());
@@ -254,10 +257,10 @@ public class SocialLogin {
}
Long vkID = NumberUtils.toLong(jsonUser.getId(), 0);
- int uid = crosspostService.getUIDbyVKID(vkID);
- if (uid > 0) {
+ com.juick.User vkUser = crosspostService.getUserByVKID(vkID).orElse(AnonymousUser.INSTANCE);
+ if (!vkUser.isAnonymous()) {
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(redirectUrl);
- uriComponentsBuilder.queryParam("hash", userService.getHashByUID(uid));
+ uriComponentsBuilder.queryParam("hash", userService.getHashForUser(vkUser));
return "redirect:" + uriComponentsBuilder.build().toUriString();
} else {
String loginhash = UUID.randomUUID().toString();
@@ -282,17 +285,17 @@ public class SocialLogin {
byte[] secretKey = DigestUtils.sha256(telegramToken);
String resultString = new HmacUtils(HmacAlgorithms.HMAC_SHA_256, secretKey).hmacHex(dataCheckString);
if (hash.equals(resultString)) {
- Long tgUser = Long.valueOf(params.get("id"));
- int uid = telegramService.getUser(tgUser);
- if (uid > 0) {
- Cookie c = new Cookie("hash", userService.getHashByUID(uid));
+ Long tgUserId = Long.valueOf(params.get("id"));
+ com.juick.User tgUser = telegramService.getUser(tgUserId);
+ if (!tgUser.isAnonymous()) {
+ Cookie c = new Cookie("hash", userService.getHashForUser(tgUser));
c.setMaxAge(50 * 24 * 60 * 60);
response.addCookie(c);
return Utils.getPreviousPageByRequest(request).orElse("redirect:/");
} else {
String username = StringUtils.defaultString(params.get("username"), params.get("first_name"));
- telegramService.createTelegramUser(tgUser, username);
- return "redirect:/signup?type=durov&hash=" + userService.getSignUpHashByTelegramID(tgUser, username);
+ telegramService.createTelegramUser(tgUserId, username);
+ return "redirect:/signup?type=durov&hash=" + userService.getSignUpHashByTelegramID(tgUserId, username);
}
} else {
logger.warn("invalid tg hash {} for {}", resultString, hash);
diff --git a/juick-server/src/main/java/com/juick/server/api/Users.java b/juick-server/src/main/java/com/juick/server/api/Users.java
index 41deddb8..53d49e5b 100644
--- a/juick-server/src/main/java/com/juick/server/api/Users.java
+++ b/juick-server/src/main/java/com/juick/server/api/Users.java
@@ -46,7 +46,7 @@ public class Users {
@ApiOperation(value = "This returns user token", notes = "Pass login and password using HTTP Basic")
@RequestMapping(value = "/auth", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String getAuthToken() {
- return userService.getHashByUID(UserUtils.getCurrentUser().getUid());
+ return userService.getHashForUser(UserUtils.getCurrentUser());
}
@RequestMapping(value = "/users", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
diff --git a/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java b/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java
index 14bdc7e2..e4dd50f9 100644
--- a/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/CrosspostServiceImpl.java
@@ -18,6 +18,8 @@
package com.juick.service;
import com.juick.ExternalToken;
+import com.juick.User;
+import com.juick.service.data.UsersRepository;
import com.juick.server.helpers.ApplicationStatus;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -25,6 +27,7 @@ import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
+import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
@@ -33,15 +36,17 @@ import java.util.Optional;
*/
@Repository
public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostService {
+ @Inject
+ UsersRepository usersRepository;
@Transactional(readOnly = true)
@Override
- public Optional<ExternalToken> getTwitterToken(final int uid) {
+ public Optional<ExternalToken> getTwitterToken(final User user) {
List<ExternalToken> list = getJdbcTemplate().query(
"SELECT uname, access_token, access_token_secret FROM twitter WHERE user_id = ? AND crosspost = 1",
(rs, num) -> new ExternalToken(rs.getString(1), "twitter",
rs.getString(2), rs.getString(3)),
- uid);
+ user.getUid());
return list.isEmpty() ?
Optional.empty() : Optional.of(list.get(0));
@@ -49,9 +54,9 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public boolean deleteTwitterToken(Integer uid) {
- return getJdbcTemplate().update("DELETE FROM twitter WHERE user_id=?", uid) > 0
- && getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=1741", uid) > 0;
+ public boolean deleteTwitterToken(User user) {
+ return getJdbcTemplate().update("DELETE FROM twitter WHERE user_id=?", user.getUid()) > 0
+ && getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=1741", user.getUid()) > 0;
}
@Override
@@ -86,18 +91,18 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional(readOnly = true)
@Override
- public Optional<Pair<String, String>> getFacebookTokens(final int uid) {
+ public Optional<Pair<String, String>> getFacebookTokens(final User user) {
List<Optional<Pair<String, String>>> list = getJdbcTemplate().query(
"SELECT fb_id, access_token FROM facebook WHERE user_id = ? AND access_token IS NOT NULL AND crosspost = 1",
(rs, num) -> Optional.of(Pair.of(rs.getString(1), rs.getString(2))),
- uid);
+ user.getUid());
return list.isEmpty() ?
Optional.empty() : list.get(0);
}
@Transactional(readOnly = true)
@Override
- public ApplicationStatus getFbCrossPostStatus(final int uid) {
+ public ApplicationStatus getFbCrossPostStatus(final User user) {
List<ApplicationStatus> list = getJdbcTemplate().query(
"SELECT 1, crosspost FROM facebook WHERE user_id = ? LIMIT 1",
(rs, num) -> {
@@ -108,7 +113,7 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
return status;
},
- uid);
+ user.getUid());
return list.isEmpty() ?
new ApplicationStatus() : list.get(0);
@@ -116,28 +121,28 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public boolean enableFBCrosspost(Integer uid) {
- return getJdbcTemplate().update("UPDATE facebook SET crosspost=1 WHERE user_id=?", uid) > 0
+ public boolean enableFBCrosspost(User user) {
+ return getJdbcTemplate().update("UPDATE facebook SET crosspost=1 WHERE user_id=?", user.getUid()) > 0
&& getJdbcTemplate().update(
"INSERT INTO subscr_users(user_id,suser_id,jid,active) VALUES (?,5863,'juick@facebook.juick.com',1)",
- uid) > 0;
+ user.getUid()) > 0;
}
@Transactional
@Override
- public void disableFBCrosspost(Integer uid) {
- getJdbcTemplate().update("UPDATE facebook SET crosspost=0 WHERE user_id=?", uid);
+ public void disableFBCrosspost(User user) {
+ getJdbcTemplate().update("UPDATE facebook SET crosspost=0 WHERE user_id=?", user.getUid());
// TODO: stop using magic numbers for system users
- getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=5863", uid);
+ getJdbcTemplate().update("DELETE FROM subscr_users WHERE user_id=? AND suser_id=5863", user.getUid());
}
@Transactional(readOnly = true)
@Override
- public String getTwitterName(final int uid) {
+ public String getTwitterName(final User user) {
List<String> list = getJdbcTemplate().queryForList(
"SELECT uname FROM twitter WHERE user_id = ?",
String.class,
- uid);
+ user.getUid());
return list.isEmpty() ?
StringUtils.EMPTY : list.get(0);
@@ -145,11 +150,11 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional(readOnly = true)
@Override
- public String getTelegramName(final int uid) {
+ public String getTelegramName(final User user) {
List<String> list = getJdbcTemplate().queryForList(
"SELECT tg_name FROM telegram WHERE user_id = ?",
String.class,
- uid);
+ user.getUid());
return list.isEmpty() ?
StringUtils.EMPTY : list.get(0);
@@ -157,11 +162,11 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional(readOnly = true)
@Override
- public Optional<Pair<String, String>> getVkTokens(final int uid) {
+ public Optional<Pair<String, String>> getVkTokens(final User user) {
List<Optional<Pair<String, String>>> list = getJdbcTemplate().query(
"SELECT vk_id, access_token FROM vk WHERE user_id = ? AND crosspost = 1",
(rs, num) -> Optional.of(Pair.of(rs.getString(1), rs.getString(2))),
- uid);
+ user.getUid());
return list.isEmpty() ?
Optional.empty() : list.get(0);
@@ -169,19 +174,14 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public void deleteVKUser(Integer uid) {
- getJdbcTemplate().update("DELETE FROM vk WHERE user_id=?", uid);
+ public void deleteVKUser(User user) {
+ getJdbcTemplate().update("DELETE FROM vk WHERE user_id=?", user.getUid());
}
@Transactional(readOnly = true)
@Override
- public int getUIDbyFBID(long fbID) {
- try {
- return getJdbcTemplate().queryForObject("SELECT user_id FROM facebook WHERE fb_id=? AND user_id IS NOT NULL",
- Integer.class, fbID);
- } catch (EmptyResultDataAccessException e) {
- return 0;
- }
+ public Optional<User> getUserByFBID(long fbID) {
+ return usersRepository.findByFacebookIds_FacebookId(fbID).map(EntityUtils::entityToUser);
}
@Transactional
@@ -200,12 +200,8 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional(readOnly = true)
@Override
- public int getUIDbyVKID(long vkID) {
- try {
- return getJdbcTemplate().queryForObject("SELECT user_id FROM vk WHERE vk_id=? AND user_id IS NOT NULL", Integer.class, vkID);
- } catch (EmptyResultDataAccessException e) {
- return 0;
- }
+ public Optional<User> getUserByVKID(long vkID) {
+ return usersRepository.findByVkIds_VkId(vkID).map(EntityUtils::entityToUser);
}
@Transactional
@@ -243,8 +239,8 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public boolean setFacebookUser(String hash, int uid) {
- return getJdbcTemplate().update("UPDATE facebook SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0;
+ public boolean setFacebookUser(String hash, User user) {
+ return getJdbcTemplate().update("UPDATE facebook SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0;
}
@Transactional
@@ -260,14 +256,14 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public boolean setVKUser(String hash, int uid) {
- return getJdbcTemplate().update("UPDATE vk SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0;
+ public boolean setVKUser(String hash, User user) {
+ return getJdbcTemplate().update("UPDATE vk SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0;
}
@Transactional
@Override
- public boolean setTelegramUser(String hash, int uid) {
- return getJdbcTemplate().update("UPDATE telegram SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0;
+ public boolean setTelegramUser(String hash, User user) {
+ return getJdbcTemplate().update("UPDATE telegram SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0;
}
@Transactional(readOnly = true)
@@ -282,7 +278,7 @@ public class CrosspostServiceImpl extends BaseJdbcService implements CrosspostSe
@Transactional
@Override
- public boolean setJIDUser(String hash, int uid) {
- return getJdbcTemplate().update("UPDATE jids SET user_id=?,loginhash=NULL WHERE loginhash=?", uid, hash) > 0;
+ public boolean setJIDUser(String hash, User user) {
+ return getJdbcTemplate().update("UPDATE jids SET user_id=?,loginhash=NULL WHERE loginhash=?", user.getUid(), hash) > 0;
}
}
diff --git a/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java b/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java
index 0cccc915..47d1efe5 100644
--- a/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/EmailServiceImpl.java
@@ -17,6 +17,7 @@
package com.juick.service;
+import com.juick.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -35,12 +36,12 @@ import java.util.List;
public class EmailServiceImpl extends BaseJdbcService implements EmailService {
@Override
- public boolean verifyAddressByCode(Integer userId, String code) {
+ public boolean verifyAddressByCode(User user, String code) {
try {
String address = getJdbcTemplate().queryForObject("SELECT account FROM auth WHERE user_id=? AND protocol='email' AND authcode=?",
- String.class, userId, code);
- addEmail(userId, address);
- getJdbcTemplate().update("DELETE FROM auth WHERE user_id=? AND authcode=?", userId, code);
+ String.class, user.getUid(), code);
+ addEmail(user, address);
+ getJdbcTemplate().update("DELETE FROM auth WHERE user_id=? AND authcode=?", user.getUid(), code);
} catch (EmptyResultDataAccessException e) {
return false;
}
@@ -48,45 +49,45 @@ public class EmailServiceImpl extends BaseJdbcService implements EmailService {
}
@Override
- public boolean addVerificationCode(Integer userId, String account, String code) {
+ public boolean addVerificationCode(User user, String account, String code) {
return getJdbcTemplate().update("INSERT INTO auth(user_id,protocol,account,authcode) VALUES (?,'email',?,?)",
- userId, account, code) > 0;
+ user.getUid(), account, code) > 0;
}
@Override
- public boolean addEmail(Integer userId, String email) {
- return getJdbcTemplate().update("INSERT INTO emails(user_id,email) VALUES (?,?)", userId, email) > 0;
+ public boolean addEmail(User user, String email) {
+ return getJdbcTemplate().update("INSERT INTO emails(user_id,email) VALUES (?,?)", user.getUid(), email) > 0;
}
@Override
- public boolean deleteEmail(Integer userId, String account) {
+ public boolean deleteEmail(User user, String account) {
return getNamedParameterJdbcTemplate().update("DELETE FROM emails " +
"WHERE (SELECT COUNT(*) cnt FROM (select user_id, email FROM emails e) c WHERE user_id=:uid) > 1 " +
"AND user_id=:uid AND email=:email",
new MapSqlParameterSource()
- .addValue("uid", userId)
+ .addValue("uid", user.getUid())
.addValue("email", account)) > 0;
}
@Transactional(readOnly = true)
@Override
- public String getNotificationsEmail(Integer userId) {
+ public String getNotificationsEmail(User user) {
List<String> list = getJdbcTemplate().queryForList(
- "SELECT email FROM emails WHERE user_id=? AND subscr_hour IS NOT NULL", String.class, userId);
+ "SELECT email FROM emails WHERE user_id=? AND subscr_hour IS NOT NULL", String.class, user.getUid());
return list.isEmpty() ? StringUtils.EMPTY : list.get(0);
}
@Override
- public boolean setNotificationsEmail(Integer userId, String account) {
- getJdbcTemplate().update("UPDATE emails SET subscr_hour=NULL WHERE user_id=?", userId);
+ public boolean setNotificationsEmail(User user, String account) {
+ getJdbcTemplate().update("UPDATE emails SET subscr_hour=NULL WHERE user_id=?", user.getUid());
return StringUtils.isNotEmpty(account) && getJdbcTemplate().update(
- "UPDATE emails SET subscr_hour=1 WHERE user_id=? AND email=?", userId, account) > 0;
+ "UPDATE emails SET subscr_hour=1 WHERE user_id=? AND email=?", user.getUid(), account) > 0;
}
@Transactional(readOnly = true)
@Override
- public List<String> getEmails(Integer userId, boolean active) {
+ public List<String> getEmails(User user, boolean active) {
return getJdbcTemplate().queryForList("SELECT email FROM emails WHERE user_id=? " +
- (active ? "AND subscr_hour IS NOT NULL" : ""), String.class, userId);
+ (active ? "AND subscr_hour IS NOT NULL" : ""), String.class, user.getUid());
}
}
diff --git a/juick-server/src/main/java/com/juick/service/EntityUtils.java b/juick-server/src/main/java/com/juick/service/EntityUtils.java
new file mode 100644
index 00000000..7f296e77
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/EntityUtils.java
@@ -0,0 +1,22 @@
+package com.juick.service;
+
+import com.juick.User;
+import com.juick.service.data.entities.UserEntity;
+
+class EntityUtils {
+ static User entityToUser(UserEntity entity) {
+ User user = new User();
+ user.setUid(entity.getId());
+ user.setName(entity.getName());
+ user.setBanned(entity.isBanned());
+ return user;
+ }
+ static User entityToSecurityUser(UserEntity entity) {
+ User user = new User();
+ user.setUid(entity.getId());
+ user.setName(entity.getName());
+ user.setBanned(entity.isBanned());
+ user.setCredentials(entity.getPassword());
+ return user;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
index a78c9203..b981b37f 100644
--- a/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/MessagesServiceImpl.java
@@ -20,6 +20,9 @@ package com.juick.service;
import com.juick.*;
import com.juick.server.helpers.PrivacyOpts;
import com.juick.server.helpers.ResponseReply;
+import com.juick.service.data.MessagesRepository;
+import com.juick.service.data.UsersRepository;
+import com.juick.service.data.entities.MessageEntity;
import com.juick.util.MessageUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -51,6 +54,10 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
@Inject
private UserService userService;
@Inject
+ private UsersRepository usersRepository;
+ @Inject
+ private MessagesRepository messagesRepository;
+ @Inject
private TagService tagService;
@Inject
private SearchService searchService;
@@ -110,19 +117,15 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
*/
@Transactional
@Override
- public int createMessage(final int uid, final String txt, final String attachment, final Collection<com.juick.Tag> tags) {
- SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()).withTableName("messages")
- .usingColumns("user_id", "attach", "ts")
- .usingGeneratedKeyColumns("message_id");
- Map<String, Object> insertMap = new HashMap<>();
- insertMap.put("user_id", uid);
+ public Message createMessage(final User user, final String txt, final String attachment, final Collection<com.juick.Tag> tags) {
+ MessageEntity newMsg = new MessageEntity();
+ newMsg.setText(txt);
+ newMsg.setUser(usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new));
Instant now = Instant.now();
- insertMap.put("ts", Timestamp.from(now));
- if (attachment != null) {
- insertMap.put("attach", attachment);
- }
- int mid = simpleJdbcInsert.executeAndReturnKey(insertMap).intValue();
- if (mid > 0) {
+ newMsg.setTimestamp(now);
+
+ newMsg = messagesRepository.save(newMsg);
+ if (newMsg.getId() > 0) {
String tagsNames = StringUtils.EMPTY;
if (CollectionUtils.isNotEmpty(tags)) {
@@ -138,7 +141,7 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
next = true;
tasNamesBuilder.append(tag.getName());
- params.add(new Object[]{mid, tag.TID});
+ params.add(new Object[]{newMsg.getId(), tag.TID});
}
tagsNames = tasNamesBuilder.toString();
@@ -148,13 +151,13 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ
}
getJdbcTemplate().update(
- "INSERT INTO messages_txt(message_id, tags, txt) VALUES (?, ?, ?)",
- new Object[]{mid, tagsNames, txt},
- new int[]{Types.INTEGER, Types.VARCHAR, Types.VARCHAR});
- getJdbcTemplate().update("UPDATE users SET lastmessage=? where id=?", Timestamp.from(now), uid);
+ "UPDATE messages_txt SET tags=? WHERE message_id=?",
+ new Object[]{tagsNames, newMsg.getId()},
+ new int[]{Types.VARCHAR, Types.INTEGER});
+ getJdbcTemplate().update("UPDATE users SET lastmessage=? where id=?", Timestamp.from(now), user.getUid());
}
- return mid;
+ return getMessage(newMsg.getId());
}
/**
diff --git a/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java b/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java
index b68e0236..01b825e4 100644
--- a/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/PMQueriesServiceImpl.java
@@ -34,16 +34,16 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
@Transactional
@Override
- public boolean createPM(final int uidFrom, final int uid_to, final String body) {
+ public boolean createPM(final User me, final User to, final String body) {
boolean ret = getJdbcTemplate().update(
"INSERT INTO pm(user_id, user_id_to, txt) VALUES (?, ?, ?)",
- uidFrom, uid_to, body) > 0;
+ me.getUid(), to.getUid(), body) > 0;
if (ret) {
try {
getJdbcTemplate().update(
"INSERT INTO pm_streams(user_id, user_id_to, lastmessage, unread) VALUES (?, ?, NOW(), 1)",
- uidFrom, uid_to);
+ me.getUid(), to.getUid());
} catch (DuplicateKeyException e) {
// ignore
}
@@ -53,43 +53,31 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
@Transactional
@Override
- public boolean addPMinRoster(final int uid, final String jid) {
+ public boolean addPMinRoster(final User me, final String jid) {
return getJdbcTemplate().update(
- "INSERT INTO pm_inroster(user_id, jid) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_id=user_id", uid, jid) > 0;
+ "INSERT INTO pm_inroster(user_id, jid) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_id=user_id", me.getUid(), jid) > 0;
}
@Transactional
@Override
- public boolean removePMinRoster(final int uid, final String jid) {
+ public boolean removePMinRoster(final User me, final String jid) {
return getJdbcTemplate().update(
- "DELETE FROM pm_inroster WHERE user_id = ? AND jid = ?", uid, jid) > 0;
+ "DELETE FROM pm_inroster WHERE user_id = ? AND jid = ?", me.getUid(), jid) > 0;
}
@Transactional
@Override
- public boolean havePMinRoster(final int uid, final String jid) {
+ public boolean havePMinRoster(final User me, final String jid) {
List<Integer> res = getJdbcTemplate().queryForList(
"SELECT 1 FROM pm_inroster WHERE user_id = ? AND jid = ?",
Integer.class,
- uid, jid);
+ me.getUid(), jid);
return res.size() > 0;
}
@Transactional(readOnly = true)
@Override
- public String getLastView(final int uidFrom, final int uidTo) {
- List<String> list = getJdbcTemplate().queryForList(
- "SELECT lastview FROM pm_streams WHERE user_id = ? AND user_id_to = ?",
- String.class,
- uidFrom, uidTo);
-
- return list.isEmpty() ?
- null : list.get(0);
- }
-
- @Transactional(readOnly = true)
- @Override
- public List<User> getPMLastConversationsUsers(final int uid, final int cnt) {
+ public List<User> getPMLastConversationsUsers(final User me, final int cnt) {
return getJdbcTemplate().query(
"SELECT pm_streams.user_id, users.nick, pm_streams.unread FROM pm_streams "
+ "INNER JOIN users ON users.id = pm_streams.user_id "
@@ -102,15 +90,15 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
u.setUnreadCount(rs.getInt(3));
return u;
},
- uid, cnt);
+ me.getUid(), cnt);
}
@Transactional
@Override
- public List<com.juick.Message> getPMMessages(final int uid, final int uidTo) {
+ public List<com.juick.Message> getPMMessages(final User me, final User to) {
SqlParameterSource sqlParameterSource = new MapSqlParameterSource()
- .addValue("uid", uid)
- .addValue("uidTo", uidTo);
+ .addValue("uid", me.getUid())
+ .addValue("uidTo", to.getUid());
List<com.juick.Message> msgs = getNamedParameterJdbcTemplate().query(
"SELECT pm.user_id, pm.txt, pm.ts, users.nick FROM pm INNER JOIN users ON users.id=pm.user_id WHERE (user_id = :uid AND user_id_to = :uidTo) "
@@ -137,7 +125,7 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
@Transactional(readOnly = true)
@Override
- public List<com.juick.Message> getLastPMInbox(final int uid) {
+ public List<com.juick.Message> getLastPMInbox(final User me) {
return getJdbcTemplate().query(
"SELECT pm.user_id, users.nick, pm.txt, pm.ts " +
"FROM pm INNER JOIN users ON pm.user_id=users.id WHERE pm.user_id_to=? ORDER BY pm.ts DESC LIMIT 20",
@@ -150,12 +138,12 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
msg.setTimestamp(rs.getTimestamp(4).toInstant());
return msg;
},
- uid);
+ me.getUid());
}
@Transactional(readOnly = true)
@Override
- public List<com.juick.Message> getLastPMSent(final int uid) {
+ public List<com.juick.Message> getLastPMSent(final User me) {
return getJdbcTemplate().query(
"SELECT pm.user_id_to, users.nick, pm.txt, " +
"pm.ts FROM pm INNER JOIN users ON pm.user_id_to=users.id " +
@@ -169,6 +157,6 @@ public class PMQueriesServiceImpl extends BaseJdbcService implements PMQueriesSe
msg.setTimestamp(rs.getTimestamp(4).toInstant());
return msg;
},
- uid);
+ me.getUid());
}
}
diff --git a/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java b/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java
index 4e37bfac..dd6ab8cf 100644
--- a/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/TelegramServiceImpl.java
@@ -18,13 +18,17 @@
package com.juick.service;
import com.juick.User;
+import com.juick.server.helpers.AnonymousUser;
+import com.juick.service.data.UsersRepository;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
+import javax.inject.Inject;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -33,6 +37,8 @@ import java.util.stream.Collectors;
*/
@Repository
public class TelegramServiceImpl extends BaseJdbcService implements TelegramService {
+ @Inject
+ UsersRepository usersRepository;
@Transactional
@Override
@@ -58,12 +64,8 @@ public class TelegramServiceImpl extends BaseJdbcService implements TelegramServ
@Transactional(readOnly = true)
@Override
- public int getUser(final long tgId) {
- List<Integer> list = getJdbcTemplate().queryForList(
- "SELECT id FROM users INNER JOIN telegram " +
- "ON telegram.user_id = users.id WHERE telegram.tg_id=?", Integer.class, tgId);
-
- return list.isEmpty() ? 0 : list.get(0);
+ public User getUser(final long tgId) {
+ return usersRepository.findByTgIds_Identifier(tgId).map(EntityUtils::entityToUser).orElse(AnonymousUser.INSTANCE);
}
@Transactional
diff --git a/juick-server/src/main/java/com/juick/service/UserServiceImpl.java b/juick-server/src/main/java/com/juick/service/UserServiceImpl.java
index 2de3dfc6..ad6be9aa 100644
--- a/juick-server/src/main/java/com/juick/service/UserServiceImpl.java
+++ b/juick-server/src/main/java/com/juick/service/UserServiceImpl.java
@@ -19,31 +19,35 @@ package com.juick.service;
import com.juick.Message;
import com.juick.User;
+import com.juick.service.data.UsersRepository;
+import com.juick.service.data.entities.EmailEntity;
+import com.juick.service.data.entities.LoginEntity;
+import com.juick.service.data.entities.UserEntity;
import com.juick.server.helpers.AnonymousUser;
import com.juick.server.helpers.Auth;
import com.juick.server.helpers.UserInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.dao.DuplicateKeyException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
-import org.springframework.jdbc.support.GeneratedKeyHolder;
-import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
-import java.sql.PreparedStatement;
+import javax.inject.Inject;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.sql.Statement;
import java.util.*;
+import java.util.stream.Collectors;
/**
* Created by aalexeev on 11/13/16.
*/
@Repository
public class UserServiceImpl extends BaseJdbcService implements UserService {
+ @Inject
+ private UsersRepository usersRepository;
private class UserMapper implements RowMapper<User> {
@Override
@@ -90,106 +94,57 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
return list.get(0);
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
- public int createUser(final String username, final String password) {
- KeyHolder holder = new GeneratedKeyHolder();
+ public User createUser(final String username, final String password) {
+ UserEntity newUser = new UserEntity();
+ newUser.setName(username);
+ newUser.setPassword(password);
try {
- getJdbcTemplate().update(
- con -> {
- PreparedStatement stmt = con.prepareStatement(
- "INSERT INTO users(nick,passw) VALUES (?,?)",
- Statement.RETURN_GENERATED_KEYS);
- stmt.setString(1, username);
- stmt.setString(2, password);
- return stmt;
- },
- holder);
- } catch (DuplicateKeyException e) {
- return -1;
+ UserEntity created = usersRepository.save(newUser);
+ getJdbcTemplate().update("INSERT INTO useroptions(user_id) VALUES (?)", created.getId());
+ getJdbcTemplate().update("INSERT INTO subscr_users(user_id, suser_id) VALUES (2, ?)", created.getId());
+ return EntityUtils.entityToUser(created);
+ } catch (Exception e) {
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+ return AnonymousUser.INSTANCE;
}
-
- int uid = holder.getKey().intValue();
-
- getJdbcTemplate().update("INSERT INTO useroptions(user_id) VALUES (?)", uid);
- getJdbcTemplate().update("INSERT INTO subscr_users(user_id, suser_id) VALUES (2, ?)", uid);
-
- return uid;
}
@Transactional(readOnly = true)
@Override
public Optional<User> getUserByUID(final int uid) {
- List<User> list = getJdbcTemplate().query(
- "SELECT id, nick, banned, lang FROM users WHERE id = ?", new UserMapper(), uid);
-
- return list.isEmpty() ? Optional.empty() : Optional.of(list.get(0));
+ return usersRepository.findById(uid).map(EntityUtils::entityToUser);
}
@Transactional(readOnly = true)
@Override
public User getUserByName(final String username) {
- if (StringUtils.isNotBlank(username)) {
- List<User> list = getJdbcTemplate().query(
- "SELECT id, nick, banned, lang FROM users WHERE nick = ?", new UserMapper(), username);
-
- if (!list.isEmpty())
- return list.get(0);
+ Optional<UserEntity> e = usersRepository.findByName(username);
+ if (e.isPresent()) {
+ return EntityUtils.entityToUser(e.get());
}
- // TODO: @NonNullable ?
return AnonymousUser.INSTANCE;
}
@Override
- // No need marks with @Transactional annotation
+ @Transactional(readOnly = true)
public User getFullyUserByName(final String username) {
- if (StringUtils.isNotBlank(username)) {
- List<User> list = getFullyUsersByNames(Collections.singletonList(username));
- if (!list.isEmpty())
- return list.get(0);
- }
- return null;
+ return usersRepository.findByName(username).map(EntityUtils::entityToSecurityUser).orElse(AnonymousUser.INSTANCE);
}
@Override
@Transactional(readOnly = true)
public User getUserByEmail(String email) {
- if (StringUtils.isNotBlank(email)) {
- List<User> list = getJdbcTemplate().query(
- "SELECT id, nick, banned, lang FROM users WHERE id = (SELECT DISTINCT user_id FROM emails WHERE email = ?)",
- new UserMapper(),
- email);
-
- if (!list.isEmpty())
- return list.get(0);
+ Optional<UserEntity> e = usersRepository.findByEmailsEmail(email);
+ if (e.isPresent()) {
+ return EntityUtils.entityToUser(e.get());
}
return AnonymousUser.INSTANCE;
}
@Transactional(readOnly = true)
@Override
- public List<User> getFullyUsersByNames(final Collection<String> usernames) {
- if (CollectionUtils.isEmpty(usernames))
- return Collections.emptyList();
-
- return getNamedParameterJdbcTemplate().query(
- "SELECT id, nick, passw, lang, banned FROM users WHERE nick in (:names)",
- new MapSqlParameterSource("names", usernames),
- (rs, rowNum) -> {
- User user = new User();
-
- user.setUid(rs.getInt(1));
- user.setName(rs.getString(2));
- user.setCredentials(rs.getString(3));
- user.setLang(rs.getString(4));
- user.setBanned(rs.getBoolean(5));
-
- return user;
- });
- }
-
- @Transactional(readOnly = true)
- @Override
public User getUserByJID(final String jid) {
User result = null;
@@ -208,25 +163,13 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
@Transactional(readOnly = true)
@Override
public List<User> getUsersByName(final Collection<String> unames) {
- if (CollectionUtils.isEmpty(unames))
- return Collections.emptyList();
-
- return getNamedParameterJdbcTemplate().query(
- "SELECT id, nick, banned, lang FROM users WHERE nick IN (:unames)",
- new MapSqlParameterSource("unames", unames),
- new UserMapper());
+ return usersRepository.findAllByNameIn(unames).map(EntityUtils::entityToUser).collect(Collectors.toList());
}
@Transactional(readOnly = true)
@Override
public List<User> getUsersByID(final Collection<Integer> uids) {
- if (CollectionUtils.isEmpty(uids))
- return Collections.emptyList();
-
- return getNamedParameterJdbcTemplate().query(
- "SELECT id, nick, banned, lang FROM users WHERE id IN (:ids)",
- new MapSqlParameterSource("ids", uids),
- new UserMapper());
+ return usersRepository.findAllByIdIn(uids).map(EntityUtils::entityToUser).collect(Collectors.toList());
}
@Transactional(readOnly = true)
@@ -237,57 +180,11 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
@Transactional(readOnly = true)
@Override
- public int getUIDbyJID(final String jid) {
- if (StringUtils.isNotBlank(jid)) {
- List<Integer> list = getJdbcTemplate().queryForList(
- "SELECT user_id FROM jids WHERE jid = ?", Integer.class, jid);
-
- if (!list.isEmpty())
- return list.get(0);
- }
- return 0;
- }
-
- @Transactional(readOnly = true)
- @Override
- public int getUIDbyName(final String uname) {
- if (StringUtils.isNotBlank(uname)) {
- List<Integer> list = getJdbcTemplate().queryForList(
- "SELECT id FROM users WHERE nick = ?", Integer.class, uname);
-
- if (!list.isEmpty())
- return list.get(0);
- }
- return 0;
- }
-
- @Transactional(readOnly = true)
- @Override
- public int getUIDbyHash(final String hash) {
- if (StringUtils.isNotBlank(hash)) {
- List<Integer> list = getJdbcTemplate().queryForList(
- "SELECT user_id FROM logins WHERE hash = ?", Integer.class, hash);
-
- if (!list.isEmpty())
- return list.get(0);
- }
- return 0;
- }
-
- @Transactional(readOnly = true)
- @Override
public com.juick.User getUserByHash(final String hash) {
if (StringUtils.isNotBlank(hash)) {
- List<User> list = getJdbcTemplate().query(
- "SELECT logins.user_id, users.nick, users.banned, users.lang FROM logins " +
- "INNER JOIN users ON logins.user_id = users.id WHERE logins.hash = ?",
- new UserMapper(),
- hash);
-
- if (!list.isEmpty()) {
- User user = list.get(0);
- user.setAuthHash(hash);
- return user;
+ Optional<UserEntity> entityUser = usersRepository.findByLogins_Hash(hash);
+ if (entityUser.isPresent()) {
+ return EntityUtils.entityToUser(entityUser.get());
}
}
return AnonymousUser.INSTANCE;
@@ -295,49 +192,36 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
@Transactional
@Override
- public String getHashByUID(final int uid) {
- List<String> list = getJdbcTemplate().queryForList(
- "SELECT hash FROM logins WHERE user_id = ?", String.class, uid);
-
- if (list.isEmpty()) {
- String hash = RandomStringUtils.randomAlphanumeric(16).toUpperCase();
- getJdbcTemplate().update("INSERT INTO logins(user_id, hash) VALUES (?, ?)", uid, hash);
- return hash;
+ public String getHashForUser(final User user) {
+ UserEntity entityUser = usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new);
+ if (entityUser.getLogins().size() > 0) {
+ return entityUser.getLogins().stream().findFirst().orElseThrow(IllegalStateException::new).getHash();
}
- return list.get(0);
+
+ LoginEntity newHash = new LoginEntity();
+ newHash.setUser(entityUser);
+ newHash.setHash(RandomStringUtils.randomAlphanumeric(16).toUpperCase());
+ entityUser.getLogins().add(newHash);
+ return getHashForUser(EntityUtils.entityToUser(usersRepository.save(entityUser)));
}
@Transactional(readOnly = true)
@Override
- public int checkPassword(final String username, final String password) {
- if (StringUtils.isNotBlank(username)) {
- List<User> list = getJdbcTemplate().query(
- "SELECT id, nick, banned, passw FROM users WHERE nick = ?",
- (rs, rowNum) -> {
- User user = new User();
- user.setUid(rs.getInt(1));
- user.setName(rs.getString(2));
- user.setBanned(rs.getBoolean(3));
- user.setCredentials(rs.getString(4));
- return user;
- },
- username);
-
- if (!list.isEmpty()) {
- User user = list.get(0);
- if (Objects.equals(password, user.getCredentials()))
- return user.getUid();
- }
- }
- return -1;
+ public User checkPassword(final String username, final String password) {
+ Optional<UserEntity> userEntity = usersRepository.findByNameAndPassword(username, password);
+ if (userEntity.isPresent()) {
+ return EntityUtils.entityToUser(userEntity.get());
+ };
+ return AnonymousUser.INSTANCE;
}
@Transactional
@Override
public boolean updatePassword(final User user, final String newPassword) {
- return user != null &&
- user.getUid() > 0 &&
- getJdbcTemplate().update("UPDATE users SET passw = ? WHERE id = ?", newPassword, user.getUid()) > 0;
+ UserEntity entityUser = usersRepository.findById(user.getUid()).orElseThrow(IllegalStateException::new);
+ entityUser.setPassword(newPassword);
+ usersRepository.save(entityUser);
+ return true;
}
@Transactional(readOnly = true)
@@ -398,17 +282,6 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
@Transactional(readOnly = true)
@Override
- public boolean getCanMedia(final int uid) {
- List<Integer> list = getJdbcTemplate().queryForList(
- "SELECT users.lastphoto - UNIX_TIMESTAMP() FROM users WHERE id = ?",
- Integer.class,
- uid);
-
- return !list.isEmpty() && list.get(0) < 3600;
- }
-
- @Transactional(readOnly = true)
- @Override
public boolean isInWL(final int uid, final int check) {
List<Integer> list = getJdbcTemplate().queryForList(
"SELECT 1 FROM wl_users WHERE user_id = ? AND wl_user_id = ?",
@@ -617,8 +490,12 @@ public class UserServiceImpl extends BaseJdbcService implements UserService {
@Transactional(readOnly = true)
@Override
- public List<String> getEmails(final User user) {
- return getJdbcTemplate().queryForList("SELECT email FROM emails WHERE user_id=?", String.class, user.getUid());
+ public Collection<String> getEmails(final User user) {
+ Optional<UserEntity> entityUser = usersRepository.findById(user.getUid());
+ if (entityUser.isPresent()) {
+ return entityUser.get().getEmails().stream().map(EmailEntity::getEmail).collect(Collectors.toList());
+ }
+ return Collections.emptyList();
}
@Transactional(readOnly = true)
diff --git a/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java b/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java
new file mode 100644
index 00000000..df8e8274
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/MessagesRepository.java
@@ -0,0 +1,7 @@
+package com.juick.service.data;
+
+import com.juick.service.data.entities.MessageEntity;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+public interface MessagesRepository extends PagingAndSortingRepository<MessageEntity, Integer> {
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/TextRepository.java b/juick-server/src/main/java/com/juick/service/data/TextRepository.java
new file mode 100644
index 00000000..f02a4c0d
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/TextRepository.java
@@ -0,0 +1,7 @@
+package com.juick.service.data;
+
+import com.juick.service.data.entities.TextEntity;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface TextRepository extends JpaRepository<TextEntity, Integer> {
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/UsersRepository.java b/juick-server/src/main/java/com/juick/service/data/UsersRepository.java
new file mode 100644
index 00000000..b0a106e3
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/UsersRepository.java
@@ -0,0 +1,23 @@
+package com.juick.service.data;
+
+import com.juick.service.data.entities.UserEntity;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+@Repository
+public interface UsersRepository extends CrudRepository<UserEntity, String> {
+ Optional<UserEntity> findById(Integer uid);
+ Optional<UserEntity> findByName(String name);
+ Optional<UserEntity> findByNameAndPassword(String name, String password);
+ Optional<UserEntity> findByEmailsEmail(String email);
+ Stream<UserEntity> findAllByNameIn(Collection<String> names);
+ Stream<UserEntity> findAllByIdIn(Collection<Integer> uids);
+ Optional<UserEntity> findByFacebookIds_FacebookId(Long facebookId);
+ Optional<UserEntity> findByVkIds_VkId(Long vkId);
+ Optional<UserEntity> findByLogins_Hash(String hash);
+ Optional<UserEntity> findByTgIds_Identifier(Long telegramId);
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java
new file mode 100644
index 00000000..d9407f84
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/BaseMessagePropertyEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+@MappedSuperclass
+public class BaseMessagePropertyEntity {
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "message_id")
+ private MessageEntity message;
+ public MessageEntity getMessage() {
+ return message;
+ }
+
+ public void setMessage(MessageEntity message) {
+ this.message = message;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java
new file mode 100644
index 00000000..a5b1909d
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/BaseUserPropertyEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.MappedSuperclass;
+
+@MappedSuperclass
+public class BaseUserPropertyEntity {
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id")
+ private UserEntity user;
+ public UserEntity getUser() {
+ return user;
+ }
+
+ public void setUser(UserEntity user) {
+ this.user = user;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java
new file mode 100644
index 00000000..d65b5da6
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/EmailEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "emails")
+public class EmailEntity extends BaseUserPropertyEntity {
+ @Id
+ @Column(name = "email", columnDefinition = "char(64)")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private String email;
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java
new file mode 100644
index 00000000..587651d9
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/FacebookEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "facebook")
+public class FacebookEntity extends BaseUserPropertyEntity {
+ @Id
+ @Column(name = "fb_id", columnDefinition = "bigint(20)")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long facebookId;
+
+ public Long getFacebookId() {
+ return facebookId;
+ }
+
+ public void setFacebookId(Long facebookId) {
+ this.facebookId = facebookId;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java
new file mode 100644
index 00000000..6799073f
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/LoginEntity.java
@@ -0,0 +1,19 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "logins")
+public class LoginEntity extends BaseUserPropertyEntity {
+ @Id
+ @Column(name = "hash", columnDefinition = "char(16)")
+ private String hash;
+
+ public String getHash() {
+ return hash;
+ }
+
+ public void setHash(String hash) {
+ this.hash = hash;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java
new file mode 100644
index 00000000..fdbdbdc0
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/MessageEntity.java
@@ -0,0 +1,81 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.time.Instant;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "messages")
+public class MessageEntity implements Serializable {
+ @Id
+ @Column(name = "message_id", columnDefinition = "int(10) unsigned auto_increment", nullable = false, unique = true)
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Integer id;
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "message")
+ private Set<TagEntity> tags = new HashSet<>();
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "message")
+ private Set<ReplyEntity> replies = new HashSet<>();
+
+ @OneToOne(cascade = CascadeType.ALL, mappedBy = "message")
+ private TextEntity textEntity;
+
+ @ManyToOne(cascade = CascadeType.ALL)
+ private UserEntity user;
+
+ @Column(name = "ts")
+ private Instant ts;
+
+ public MessageEntity() {
+ this.textEntity = new TextEntity(this);
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Set<TagEntity> getTags() {
+ return tags;
+ }
+
+ public void setTags(Set<TagEntity> tags) {
+ this.tags = tags;
+ }
+
+ public Set<ReplyEntity> getReplies() {
+ return replies;
+ }
+
+ public void setReplies(Set<ReplyEntity> replies) {
+ this.replies = replies;
+ }
+
+ public String getText() {
+ return textEntity.getText();
+ }
+
+ public void setText(String text) {
+ this.textEntity.setText(text);
+ }
+
+ public UserEntity getUser() {
+ return user;
+ }
+
+ public void setUser(UserEntity user) {
+ this.user = user;
+ }
+
+ public Instant getTimestamp() {
+ return ts;
+ }
+
+ public void setTimestamp(Instant ts) {
+ this.ts = ts;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java
new file mode 100644
index 00000000..65a38576
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/ReplyEntity.java
@@ -0,0 +1,31 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "replies")
+public class ReplyEntity extends BaseMessagePropertyEntity {
+ @Id
+ @Column(name = "reply_id", columnDefinition = "smallint")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long replyId;
+ @Column(name = "txt", columnDefinition = "clob")
+ private
+ String text;
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public Long getReplyId() {
+ return replyId;
+ }
+
+ public void setReplyId(Long replyId) {
+ this.replyId = replyId;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java
new file mode 100644
index 00000000..22196562
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/TagEntity.java
@@ -0,0 +1,15 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "messages_tags")
+public class TagEntity extends BaseMessagePropertyEntity {
+ @Id
+ @Column(name = "tag_id", columnDefinition = "int(10)")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private int id;
+ @OneToOne(cascade = CascadeType.ALL)
+ @PrimaryKeyJoinColumn
+ private TagNameEntity tagName;
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java
new file mode 100644
index 00000000..4540a45e
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/TagNameEntity.java
@@ -0,0 +1,30 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "tags")
+public class TagNameEntity {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "tag_id")
+ private int id;
+ @Column(name = "name", columnDefinition = "varchar(70)")
+ private String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java
new file mode 100644
index 00000000..e851b00e
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/TelegramEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "telegram")
+public class TelegramEntity extends BaseUserPropertyEntity {
+ @Id
+ @Column(name = "tg_id", columnDefinition = "bigint(20)")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long identifier;
+
+ public Long getIdentifier() {
+ return identifier;
+ }
+
+ public void setIdentifier(Long identifier) {
+ this.identifier = identifier;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java
new file mode 100644
index 00000000..ba4b9146
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/TextEntity.java
@@ -0,0 +1,42 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "messages_txt")
+public class TextEntity implements Serializable {
+
+ @Id
+ @Column(name = "message_id", columnDefinition = "int(10)")
+ private Integer id;
+
+ @Column(name = "txt", columnDefinition = "clob")
+ private String text;
+
+ @OneToOne(fetch = FetchType.LAZY)
+ @MapsId
+ @JoinColumn(name = "message_id", foreignKey = @ForeignKey(name = "message_id"))
+ private MessageEntity message;
+
+ public TextEntity() {
+ super();
+ }
+
+ public TextEntity(MessageEntity message) {
+ this();
+ this.message = message;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public MessageEntity getMessage() {
+ return message;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java
new file mode 100644
index 00000000..50a72bdb
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/UserEntity.java
@@ -0,0 +1,109 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "users")
+public class UserEntity {
+ @Id
+ @Column(name = "id", columnDefinition = "int(10) unsigned", nullable = false, unique = true)
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Integer id;
+
+ @Column(name = "nick", columnDefinition = "char(64)")
+ private String name;
+
+ @Column(name = "passw", columnDefinition = "char(32)")
+ private String password;
+
+ @Column(name = "banned", columnDefinition = "tinyint(1)")
+ private boolean banned;
+
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
+ private Set<EmailEntity> emails = new HashSet<>();
+
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
+ private Set<FacebookEntity> facebookIds = new HashSet<>();
+
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
+ private Set<VKEntity> vkIds = new HashSet<>();
+
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
+ private Set<LoginEntity> logins = new HashSet<>();
+ @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
+ private Set<TelegramEntity> tgIds = new HashSet<>();
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer uid) {
+ this.id = uid;
+ }
+
+ public boolean isBanned() {
+ return banned;
+ }
+
+ public void setBanned(boolean banned) {
+ this.banned = banned;
+ }
+
+ public Set<EmailEntity> getEmails() {
+ return emails;
+ }
+
+ public void setEmails(Set<EmailEntity> emails) {
+ this.emails = emails;
+ }
+
+ public Set<FacebookEntity> getFacebookIds() {
+ return facebookIds;
+ }
+
+ public void setFacebookIds(Set<FacebookEntity> facebookIds) {
+ this.facebookIds = facebookIds;
+ }
+
+ public Set<VKEntity> getVkIds() {
+ return vkIds;
+ }
+
+ public void setVkIds(Set<VKEntity> vkIds) {
+ this.vkIds = vkIds;
+ }
+
+ public Set<LoginEntity> getLogins() {
+ return logins;
+ }
+
+ public void setLogins(Set<LoginEntity> logins) {
+ this.logins = logins;
+ }
+
+ public Set<TelegramEntity> getTgIds() {
+ return tgIds;
+ }
+
+ public void setTgIds(Set<TelegramEntity> tgIds) {
+ this.tgIds = tgIds;
+ }
+}
diff --git a/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java b/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java
new file mode 100644
index 00000000..47b5c969
--- /dev/null
+++ b/juick-server/src/main/java/com/juick/service/data/entities/VKEntity.java
@@ -0,0 +1,20 @@
+package com.juick.service.data.entities;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "vk")
+public class VKEntity extends BaseUserPropertyEntity {
+ @Id
+ @Column(name = "vk_id", columnDefinition = "bigint(20)")
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long vkId;
+
+ public Long getVkId() {
+ return vkId;
+ }
+
+ public void setVkId(Long vkId) {
+ this.vkId = vkId;
+ }
+}
diff --git a/juick-server/src/main/resources/schema.sql b/juick-server/src/main/resources/schema.sql
index 296fd486..990be36b 100644
--- a/juick-server/src/main/resources/schema.sql
+++ b/juick-server/src/main/resources/schema.sql
@@ -90,14 +90,6 @@ CREATE TABLE IF NOT EXISTS `messages_tags` (
UNIQUE KEY `message_id_2` (`message_id`,`tag_id`)
);
-CREATE TABLE IF NOT EXISTS `messages_txt` (
- `message_id` int(10) unsigned NOT NULL,
- `tags` varchar(255) DEFAULT NULL,
- `repliesby` varchar(96) DEFAULT NULL,
- `txt` mediumtext NOT NULL,
- PRIMARY KEY (`message_id`)
-);
-
CREATE TABLE IF NOT EXISTS `messages_votes` (
`message_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
@@ -341,6 +333,13 @@ CREATE TABLE IF NOT EXISTS `messages` (
`updated` timestamp(9) NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) references users(id)
);
+CREATE TABLE IF NOT EXISTS `messages_txt` (
+ `message_id` int(10) unsigned NOT NULL,
+ `tags` varchar(255) DEFAULT NULL,
+ `repliesby` varchar(96) DEFAULT NULL,
+ `txt` mediumtext NOT NULL,
+ FOREIGN KEY (message_id) references messages(message_id)
+);
CREATE TABLE IF NOT EXISTS `pm_inroster` (
`user_id` int(10) unsigned NOT NULL,
`jid` char(64) NOT NULL,
diff --git a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
index e4e5f298..b463765a 100644
--- a/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
+++ b/juick-server/src/test/java/com/juick/server/tests/ServerTests.java
@@ -112,7 +112,7 @@ public class ServerTests {
@Inject
private MockMvc mockMvc;
@Inject
- private TestRestTemplate restTemplate;
+ private TestRestTemplate rest;
@Inject
private MessagesService messagesService;
@Inject
@@ -175,12 +175,12 @@ public class ServerTests {
freefdPassword = "MyPassw0rd!";
juickName = "juick";
juickPassword = "demo";
- int ugnichId = userService.createUser(ugnichName, ugnichPassword);
- ugnich = userService.getUserByUID(ugnichId).orElseThrow(IllegalStateException::new);
- int freefdId = userService.createUser(freefdName, freefdPassword);
- freefd = userService.getUserByUID(freefdId).orElseThrow(IllegalStateException::new);
- int juickId = userService.createUser(juickName, juickPassword);
- juick = userService.getUserByUID(juickId).orElseThrow(IllegalStateException::new);
+ ugnich = userService.createUser(ugnichName, ugnichPassword);
+ assertThat(ugnich, not(AnonymousUser.INSTANCE));
+ freefd = userService.createUser(freefdName, freefdPassword);
+ assertThat(freefd, not(AnonymousUser.INSTANCE));
+ juick = userService.createUser(juickName, juickPassword);
+ assertThat(juick, not(AnonymousUser.INSTANCE));
isSetUp = true;
}
}
@@ -193,130 +193,123 @@ public class ServerTests {
}
@Test
public void getMyFeed() {
- int mid0 = messagesService.createMessage(ugnich.getUid(), "test", null, null);
- int mid2 = messagesService.createMessage(ugnich.getUid(), "test2", null, null);
+ Message msg0 = messagesService.createMessage(ugnich, "test", null, null);
+ Message msg2 = messagesService.createMessage(ugnich, "test2", null, null);
subscriptionService.subscribeUser(userService.getUserByUID(freefd.getUid()).orElse(AnonymousUser.INSTANCE),
userService.getUserByUID(ugnich.getUid()).orElse(AnonymousUser.INSTANCE));
List<Integer> freefdFeed = messagesService.getMyFeed(freefd.getUid(), 0, false);
- assertThat(freefdFeed.get(0), equalTo(mid2));
- int tonyaid = userService.createUser("Tonya", "secret");
- int mid3 = messagesService.createMessage(tonyaid, "test3", null, null);
- messagesService.recommendMessage(mid3, ugnich.getUid());
- assertThat(messagesService.getMyFeed(freefd.getUid(), 0, false).get(0), equalTo(mid2));
- assertThat(messagesService.getMyFeed(freefd.getUid(), 0, true).get(0), equalTo(mid3));
- assertThat(messagesService.getMyFeed(freefd.getUid(), mid2, true).get(0), equalTo(mid0));
- assertThat(messagesService.recommendMessage(mid0, ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Added));
- assertThat(messagesService.getMessage(mid0).getLikes(), equalTo(1));
- assertThat(messagesService.recommendMessage(mid0, ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Deleted));
- assertThat(messagesService.getMessage(mid0).getLikes(), equalTo(0));
- assertThat(messagesService.getAll(ugnich.getUid(), 0).get(0), equalTo(mid3));
+ assertThat(freefdFeed.get(0), equalTo(msg2.getMid()));
+ User tonya = userService.createUser("Tonya", "secret");
+ assertThat(tonya, not(AnonymousUser.INSTANCE));
+ Message msg3 = messagesService.createMessage(tonya, "test3", null, null);
+ messagesService.recommendMessage(msg3.getMid(), ugnich.getUid());
+ assertThat(messagesService.getMyFeed(freefd.getUid(), 0, false).get(0), equalTo(msg2.getMid()));
+ assertThat(messagesService.getMyFeed(freefd.getUid(), 0, true).get(0), equalTo(msg3.getMid()));
+ assertThat(messagesService.getMyFeed(freefd.getUid(), msg2.getMid(), true).get(0), equalTo(msg0.getMid()));
+ assertThat(messagesService.recommendMessage(msg0.getMid(), ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Added));
+ assertThat(msg0.getLikes(), equalTo(1));
+ assertThat(messagesService.recommendMessage(msg0.getMid(), ugnich.getUid()), equalTo(MessagesService.RecommendStatus.Deleted));
+ assertThat(msg0.getLikes(), equalTo(0));
+ assertThat(messagesService.getAll(ugnich.getUid(), 0).get(0), equalTo(msg3.getMid()));
Tag yoTag = tagService.getTag("yoyo", true);
assertThat(tagService.getTag("YOYO", false), equalTo(yoTag));
- int mid = messagesService.createMessage(ugnich.getUid(), "yo", null, Collections.singletonList(yoTag));
- List<User> subscribers = subscriptionService.getSubscribedUsers(ugnich.getUid(), mid);
+ Message msg = messagesService.createMessage(ugnich, "yo", null, Collections.singletonList(yoTag));
+ List<User> subscribers = subscriptionService.getSubscribedUsers(ugnich.getUid(), msg.getMid());
telegramService.createTelegramUser(12345, "freefd");
String loginhash = jdbcTemplate.queryForObject("SELECT loginhash FROM telegram where tg_id=?",
String.class, 12345);
- crosspostService.setTelegramUser(loginhash, freefd.getUid());
+ crosspostService.setTelegramUser(loginhash, freefd);
List<Long> telegramSubscribers = telegramService.getTelegramIdentifiers(subscribers);
assertThat(subscribers.size(), equalTo(1));
assertThat(subscribers.size(), equalTo(telegramSubscribers.size()));
assertThat(subscribers.get(0).getUid(), equalTo(freefd.getUid()));
tagService.blacklistTag(freefd, yoTag);
- List<User> subscribers2 = subscriptionService.getSubscribedUsers(ugnich.getUid(), mid);
+ List<User> subscribers2 = subscriptionService.getSubscribedUsers(ugnich.getUid(), msg.getMid());
assertThat(subscribers2.size(), equalTo(0));
assertThat(telegramService.getTelegramIdentifiers(subscribers2).size(), equalTo(0));
tagService.blacklistTag(freefd, yoTag);
- assertThat(subscriptionService.getSubscribedUsers(ugnich.getUid(), mid).size(), equalTo(1));
+ assertThat(subscriptionService.getSubscribedUsers(ugnich.getUid(), msg.getMid()).size(), equalTo(1));
subscriptionService.unSubscribeUser(freefd, ugnich);
- assertThat(subscriptionService.getSubscribedUsers(ugnich.getUid(), mid).size(), equalTo(0));
+ assertThat(subscriptionService.getSubscribedUsers(ugnich.getUid(), msg.getMid()).size(), equalTo(0));
}
@Test
public void pmTests() {
- pmQueriesService.createPM(freefd.getUid(), ugnich.getUid(), "hello");
- Message pm = pmQueriesService.getPMMessages(ugnich.getUid(), freefd.getUid()).get(0);
+ pmQueriesService.createPM(freefd, ugnich, "hello");
+ Message pm = pmQueriesService.getPMMessages(ugnich, freefd).get(0);
assertThat(pm.getText(), equalTo("hello"));
assertThat(pm.getUser().getUid(), equalTo(freefd.getUid()));
}
@Test
public void messageTests() {
- int user_id = userService.createUser("mmmme", "secret");
- User user = userService.getUserByUID(user_id).orElse(AnonymousUser.INSTANCE);
- assertEquals("it should be me", "mmmme", user.getName());
- int mid = messagesService.createMessage(user_id, "yo", null, new ArrayList<>());
- Message msg = messagesService.getMessage(mid);
+ User mmmme = userService.createUser("mmmme", "secret");
+ assertEquals("it should be me", "mmmme", mmmme.getName());
+ Message msg = messagesService.createMessage(mmmme, "yo", null, new ArrayList<>());
assertEquals("yo", msg.getText());
User me = msg.getUser();
assertEquals("mmmme", me.getName());
- assertEquals("mmmme", messagesService.getMessageAuthor(mid).getName());
+ assertEquals("mmmme", messagesService.getMessageAuthor(msg.getMid()).getName());
int tagID = tagService.createTag("weather");
Tag tag = tagService.getTag(tagID);
List<Tag> tagList = new ArrayList<>();
tagList.add(tag);
- int mid2 = messagesService.createMessage(user_id, "yo2", null, tagList);
- Message msg2 = messagesService.getMessage(mid2);
+ Message msg2 = messagesService.createMessage(mmmme, "yo2", null, tagList);
assertEquals(1, msg2.getTags().size());
- assertEquals("we already have ugnich", -1, userService.createUser("ugnich", "x"));
- int ugnich_id = userService.createUser("hugnich", "x");
- User ugnich = userService.getUserByUID(ugnich_id).orElse(AnonymousUser.INSTANCE);
- int rid = messagesService.createReply(msg2.getMid(), 0, ugnich, "bla-bla", null);
+ assertEquals("we already have ugnich", AnonymousUser.INSTANCE, userService.createUser("ugnich", "x"));
+ User hugnich = userService.createUser("hugnich", "x");
+ int rid = messagesService.createReply(msg2.getMid(), 0, hugnich, "bla-bla", null);
assertEquals(1, rid);
assertThat(msg2.getTo(), equalTo(null));
Message reply = messagesService.getReply(msg2.getMid(), rid);
- assertThat(reply.getTo().getName(), equalTo(user.getName()));
- List<Message> replies = messagesService.getReplies(user, msg2.getMid());
+ assertThat(reply.getTo().getName(), equalTo(mmmme.getName()));
+ List<Message> replies = messagesService.getReplies(mmmme, msg2.getMid());
assertThat(replies.size(), equalTo(1));
assertThat(replies.get(0), equalTo(reply));
int ridToReply = messagesService.createReply(msg2.getMid(), 1, ugnich, "blax2", null);
Message reply2 = messagesService.getReply(msg2.getMid(), ridToReply);
- assertThat(reply.getTo().getName(), equalTo(user.getName()));
- List<Message> replies2 = messagesService.getReplies(user, msg2.getMid());
+ assertThat(reply.getTo().getName(), equalTo(mmmme.getName()));
+ List<Message> replies2 = messagesService.getReplies(mmmme, msg2.getMid());
assertThat(replies2.size(), equalTo(2));
assertThat(replies2.get(1), equalTo(reply2));
- Message msg3 = messagesService.getMessage(mid2);
-
- assertEquals(2, msg3.getReplies());
- assertEquals("weather", msg3.getTags().get(0).getName());
- assertEquals(ugnich.getUid(), userService.checkPassword(ugnich.getName(), "x"));
- assertEquals(-1, userService.checkPassword(ugnich.getName(), "xy"));
+ assertEquals(2, msg2.getReplies());
+ assertEquals("weather", msg2.getTags().get(0).getName());
+ assertEquals(hugnich, userService.checkPassword(hugnich.getName(), "x"));
+ assertEquals(AnonymousUser.INSTANCE, userService.checkPassword(hugnich.getName(), "xy"));
- subscriptionService.subscribeMessage(msg, user);
+ subscriptionService.subscribeMessage(msg, mmmme);
subscriptionService.subscribeMessage(msg, ugnich);
int reply_id = messagesService.createReply(msg.getMid(), 0, ugnich, "comment", null);
assertEquals(1, subscriptionService.getUsersSubscribedToComments(msg,
messagesService.getReply(msg.getMid(), reply_id)).size());
assertThat(messagesService.getDiscussions(ugnich.getUid(), 0L).get(0),
equalTo(msg.getMid()));
- messagesService.deleteMessage(user_id, mid);
- messagesService.deleteMessage(user_id, mid2);
+ messagesService.deleteMessage(mmmme.getUid(), msg.getMid());
+ messagesService.deleteMessage(mmmme.getUid(), msg2.getMid());
String htmlTagName = ">_<";
Tag htmlTag = tagService.getTag(htmlTagName, true);
TagStats htmlTagStats = new TagStats();
htmlTagStats.setTag(htmlTag);
String dbTagName = jdbcTemplate.queryForObject("select name from tags where name=?", String.class, htmlTagName);
assertEquals("db tags should not be escaped", dbTagName, htmlTag.getName());
- int mid4 = messagesService.createMessage(user_id, "yoyoyo", null, null);
- Message msg4 = messagesService.getMessage(mid4);
+ Message msg4 = messagesService.createMessage(mmmme, "yoyoyo", null, null);
assertEquals("tags string should be empty", StringUtils.EMPTY, MessageUtils.getTagsString(msg4));
- messagesService.deleteMessage(user_id, mid4);
+ messagesService.deleteMessage(mmmme.getUid(), msg4.getMid());
}
public ExpectedException exception = ExpectedException.none();
@Test
public void likeTypeStatsTests(){
- int user_id = userService.createUser("dsdss", "secret");
+ User dsdss = userService.createUser("dsdss", "secret");
final int freefdId = freefd.getUid();
- int mid = messagesService.createMessage(user_id, "yo", null, new ArrayList<>());
- messagesService.likeMessage(mid, freefdId , 2);
- messagesService.likeMessage(mid, freefdId,2);
- messagesService.likeMessage(mid, freefdId,3);
- messagesService.likeMessage(mid, freefdId,1);
+ Message msg4 = messagesService.createMessage(dsdss, "yo", null, new ArrayList<>());
+ messagesService.likeMessage(msg4.getMid(), freefdId , 2);
+ messagesService.likeMessage(msg4.getMid(), freefdId,2);
+ messagesService.likeMessage(msg4.getMid(), freefdId,3);
+ messagesService.likeMessage(msg4.getMid(), freefdId,1);
- Message msg4 = messagesService.getMessage(mid);
assertThat(msg4.getLikes(), equalTo(1));
Assert.assertEquals(2, msg4.getReactions().stream().filter(r -> r.getId() == 2)
@@ -326,34 +319,34 @@ public class ServerTests {
}
@Test
public void lastJidShouldNotBeDeleted() {
- int ugnich_id = userService.createUser("hugnich2", "x");
- jdbcTemplate.update("INSERT INTO jids(user_id,jid,active) VALUES(?,?,?)", ugnich_id, "firstjid@localhost", 1);
- jdbcTemplate.update("INSERT INTO jids(user_id,jid,active) VALUES(?,?,?)", ugnich_id, "secondjid@localhost", 1);
- assertThat(userService.deleteJID(ugnich_id, "secondjid@localhost"), equalTo(true));
- assertThat(userService.deleteJID(ugnich_id, "firstjid@localhost"), equalTo(false));
+ User hugnich2 = userService.createUser("hugnich2", "x");
+ jdbcTemplate.update("INSERT INTO jids(user_id,jid,active) VALUES(?,?,?)", hugnich2.getUid(), "firstjid@localhost", 1);
+ jdbcTemplate.update("INSERT INTO jids(user_id,jid,active) VALUES(?,?,?)", hugnich2.getUid(), "secondjid@localhost", 1);
+ assertThat(userService.deleteJID(hugnich2.getUid(), "secondjid@localhost"), equalTo(true));
+ assertThat(userService.deleteJID(hugnich2.getUid(), "firstjid@localhost"), equalTo(false));
}
@Test
public void lastEmailShouldNotBeDeleted() {
- int ugnich_id = userService.createUser("hugnich3", "x");
- jdbcTemplate.update("INSERT INTO emails(user_id,email) VALUES(?,?)", ugnich_id, "first@localhost");
- jdbcTemplate.update("INSERT INTO emails(user_id,email) VALUES(?,?)", ugnich_id, "second@localhost");
- assertThat(emailService.deleteEmail(ugnich_id, "second@localhost"), equalTo(true));
- assertThat(emailService.deleteEmail(ugnich_id, "first@localhost"), equalTo(false));
+ User hugnich3 = userService.createUser("hugnich3", "x");
+ jdbcTemplate.update("INSERT INTO emails(user_id,email) VALUES(?,?)", hugnich3.getUid(), "first@localhost");
+ jdbcTemplate.update("INSERT INTO emails(user_id,email) VALUES(?,?)", hugnich3.getUid(), "second@localhost");
+ assertThat(emailService.deleteEmail(hugnich3, "second@localhost"), equalTo(true));
+ assertThat(emailService.deleteEmail(hugnich3, "first@localhost"), equalTo(false));
}
@Test
public void messageUpdatedTimeShouldMatchLastReplyTime() throws InterruptedException {
- int ugnich_id = userService.createUser("hugnich4", "x");
- int mid = messagesService.createMessage(ugnich_id, "yo", null, null);
+ User hugnich4 = userService.createUser("hugnich4", "x");
+ Message msg = messagesService.createMessage(hugnich4, "yo", null, null);
Instant ts = jdbcTemplate.queryForObject("SELECT updated FROM messages WHERE message_id=?",
- Timestamp.class, mid).toInstant();
+ Timestamp.class, msg.getMid()).toInstant();
Thread.sleep(1000);
- int rid = messagesService.createReply(mid, 0, ugnich, "people", null);
+ int rid = messagesService.createReply(msg.getMid(), 0, ugnich, "people", null);
Instant rts = jdbcTemplate.queryForObject("SELECT updated FROM messages WHERE message_id=?",
- Timestamp.class, mid).toInstant();
+ Timestamp.class, msg.getMid()).toInstant();
assertThat(rts, greaterThan(ts));
- Message msg = messagesService.getReply(mid, rid);
- assertThat(rts, equalTo(msg.getTimestamp()));
- messagesService.deleteMessage(ugnich_id, mid);
+ Message reply = messagesService.getReply(msg.getMid(), rid);
+ assertThat(rts, equalTo(reply.getTimestamp()));
+ messagesService.deleteMessage(hugnich4.getUid(), msg.getMid());
}
@Test
@@ -399,7 +392,7 @@ public class ServerTests {
@Test
public void homeTestWithMessagesAndRememberMe() throws Exception {
- String ugnichHash = userService.getHashByUID(ugnich.getUid());
+ String ugnichHash = userService.getHashForUser(ugnich);
mockMvc.perform(
get("/home")
.with(httpBasic(ugnichName, ugnichPassword)))
@@ -452,16 +445,16 @@ public class ServerTests {
@Test
public void messagesUrlTest() throws Exception {
- int user_id = userService.createUser("dsds4345", "secret");
+ User dsds4345 = userService.createUser("dsds4345", "secret");
- String freefdHash = userService.getHashByUID(freefd.getUid());
- System.out.println("user_id"+ user_id);
- String userIdHash = userService.getHashByUID(user_id);
+ String freefdHash = userService.getHashForUser(freefd);
+ System.out.println("user_id"+ dsds4345.getUid());
+ String userIdHash = userService.getHashForUser(dsds4345);
final int freefdId = freefd.getUid();
- int mid = messagesService.createMessage(user_id, "yo", null, new ArrayList<>());
- messagesService.likeMessage(mid, freefdId, 2 );
- messagesService.likeMessage(mid, freefdId, 2 );
- messagesService.likeMessage(mid, freefdId, 3 );
+ Message msg = messagesService.createMessage(dsds4345, "yo", null, new ArrayList<>());
+ messagesService.likeMessage(msg.getMid(), freefdId, 2 );
+ messagesService.likeMessage(msg.getMid(), freefdId, 2 );
+ messagesService.likeMessage(msg.getMid(), freefdId, 3 );
mockMvc.perform(get("/messages?"+ "hash=" + userIdHash))
.andDo(print())
@@ -482,8 +475,8 @@ public class ServerTests {
public void tags() throws Exception {
Tag weather = tagService.getTag("weather", true);
Tag yo = tagService.getTag("yo", true);
- messagesService.createMessage(ugnich.getUid(), "text", null, Arrays.asList(yo, weather));
- messagesService.createMessage(freefd.getUid(), "text2", null, Collections.singletonList(yo));
+ messagesService.createMessage(ugnich, "text", null, Arrays.asList(yo, weather));
+ messagesService.createMessage(freefd, "text2", null, Collections.singletonList(yo));
MvcResult result = mockMvc.perform(get("/tags"))
.andExpect(status().isOk())
.andReturn();
@@ -515,7 +508,7 @@ public class ServerTests {
}
@Test
public void performRequestsWithIssuedToken() throws Exception {
- String ugnichHash = userService.getHashByUID(ugnich.getUid());
+ String ugnichHash = userService.getHashForUser(ugnich);
mockMvc.perform(get("/home")).andExpect(status().isUnauthorized());
mockMvc.perform(get("/auth"))
.andExpect(status().isUnauthorized());
@@ -573,26 +566,26 @@ public class ServerTests {
}
@Test
public void topTest() {
- int topmid = messagesService.createMessage(ugnich.getUid(), "top message", null, null);
+ Message topmsg = messagesService.createMessage(ugnich, "top message", null, null);
IntStream.rangeClosed(6, 12).forEach(i -> {
User next = new User();
next.setUid(i);
- messagesService.createReply(topmid, 0, next, "yo", null);
+ messagesService.createReply(topmsg.getMid(), 0, next, "yo", null);
});
List<Integer> topCandidates = messagesService.getPopularCandidates();
assertThat(topCandidates.size(), is(1));
- assertThat(topCandidates.get(0), is(topmid));
+ assertThat(topCandidates.get(0), is(topmsg.getMid()));
Tag juickTag = tagService.getTag("juick", false);
assertThat(juickTag.TID, is(2));
- tagService.updateTags(topmid, Collections.singletonList(juickTag));
+ tagService.updateTags(topmsg.getMid(), Collections.singletonList(juickTag));
assertThat(messagesService.getPopularCandidates().isEmpty(), is(true));
- tagService.updateTags(topmid, Collections.singletonList(juickTag));
+ tagService.updateTags(topmsg.getMid(), Collections.singletonList(juickTag));
assertThat(messagesService.getPopularCandidates().isEmpty(), is(false));
jdbcTemplate.update("INSERT INTO tags(tag_id, name) VALUES(805, 'NSFW')");
Tag nsfw = tagService.getTag("NSFW", false);
assertThat(nsfw.TID, equalTo(805));
- tagService.updateTags(topmid, Collections.singletonList(nsfw));
+ tagService.updateTags(topmsg.getMid(), Collections.singletonList(nsfw));
assertThat(messagesService.getPopularCandidates().isEmpty(), is(true));
}
@Test
@@ -619,10 +612,10 @@ public class ServerTests {
}
@Test
public void botIsUpAndProcessingResourceConstraints() throws Exception {
- int renhaId = userService.createUser("renha", "umnnbt");
+ User renha = userService.createUser("renha", "umnnbt");
Jid from = Jid.of("renha@serverstorageisfull.tld");
jdbcTemplate.update("INSERT INTO jids(user_id,jid,active) VALUES(?,?,?)",
- renhaId, from.toEscapedString(), 1);
+ renha.getUid(), from.toEscapedString(), 1);
rocks.xmpp.core.stanza.model.Message xmppMessage = new rocks.xmpp.core.stanza.model.Message();
xmppMessage.setType(rocks.xmpp.core.stanza.model.Message.Type.ERROR);
xmppMessage.setFrom(from);
@@ -630,16 +623,16 @@ public class ServerTests {
StanzaError err = new StanzaError(StanzaError.Type.CANCEL, Condition.RESOURCE_CONSTRAINT);
xmppMessage.setError(err);
Function<Integer, Boolean> isActive = f -> jdbcTemplate.queryForObject("SELECT active FROM jids WHERE user_id=?", Integer.class, f) == 1;
- assertThat(isActive.apply(renhaId), equalTo(true));
+ assertThat(isActive.apply(renha.getUid()), equalTo(true));
ClientMessage result = router.incomingMessage(xmppMessage);
assertNull(result);
- assertThat(isActive.apply(renhaId), equalTo(false));
+ assertThat(isActive.apply(renha.getUid()), equalTo(false));
xmppMessage.setError(null);
xmppMessage.setType(rocks.xmpp.core.stanza.model.Message.Type.CHAT);
xmppMessage.setBody("On");
result = router.incomingMessage(xmppMessage);
assertThat(result.getBody(), equalTo("XMPP notifications are activated"));
- assertTrue(isActive.apply(renhaId));
+ assertTrue(isActive.apply(renha.getUid()));
xmppMessage.setBody("*test test");
result = router.incomingMessage(xmppMessage);
assertThat(result.getBody(), startsWith("New message posted"));
@@ -647,7 +640,7 @@ public class ServerTests {
xmppMessage.setBody("PING");
result = router.incomingMessage(xmppMessage);
assertThat(result.getBody(), equalTo("PONG"));
- int secretlySadId = userService.createUser("secretlysad", "bbk");
+ User secretlySad = userService.createUser("secretlysad", "bbk");
xmppMessage.setTo(botJid.withLocal("secretlysad"));
xmppMessage.setBody("What's up?");
result = router.incomingMessage(xmppMessage);
@@ -672,8 +665,7 @@ public class ServerTests {
@Test
public void protocolTests() throws Exception {
- int uid = userService.createUser("me", "secret");
- User user = userService.getUserByUID(uid).orElse(AnonymousUser.INSTANCE);
+ User user = userService.createUser("me", "secret");
Tag yo = tagService.getTag("yo", true);
Message msg = commandsManager.processCommand(user, "*yo yoyo", URI.create("http://static.juick.com/settings/facebook.png")).getNewMessage().get();
assertThat(msg.getAttachmentType(), is("png"));
@@ -691,8 +683,7 @@ public class ServerTests {
assertThat(last.toInstant(), equalTo(yoyoMsg.getNewMessage().get().getTimestamp()));
assertEquals("should be message", true,
commandsManager.processCommand(user, String.format("#%d", mid), emptyUri).getText().startsWith("@me"));
- int readerUid = userService.createUser("dummyReader", "dummySecret");
- User readerUser = userService.getUserByUID(readerUid).orElse(AnonymousUser.INSTANCE);
+ User readerUser = userService.createUser("dummyReader", "dummySecret");
assertThat(commandsManager.processCommand(readerUser, "s", emptyUri).getText().startsWith("You are subscribed to"), is(true));
assertThat(commandsManager.processCommand(readerUser, "S", emptyUri).getText().startsWith("You are subscribed to"), is(true));
assertEquals("should be subscribed", "Subscribed",
@@ -716,11 +707,11 @@ public class ServerTests {
assertEquals("should be subscribed", "Subscribed to @" + user.getName(),
commandsManager.processCommand(readerUser, "S @" + user.getName(), emptyUri)
.getText());
- List<User> friends = userService.getUserFriends(readerUid);
+ List<User> friends = userService.getUserFriends(readerUser.getUid());
assertEquals("number of friend users should match", 2,
friends.size());
assertEquals("number of reader users should match", 1,
- userService.getUserReaders(uid).size());
+ userService.getUserReaders(user.getUid()).size());
String expectedSecondReply = "Reply posted.\n#" + mid + "/2 "
+ "https://juick.com/m/" + mid + "#2";
String expectedThirdReply = "Reply posted.\n#" + mid + "/3 "
@@ -746,32 +737,31 @@ public class ServerTests {
assertEquals("should be blacklisted", "Tag added to your blacklist",
commandsManager.processCommand(readerUser, "BL *there", emptyUri).getText());
assertEquals("number of subscribed users should match", 0,
- subscriptionService.getSubscribedUsers(uid, mid).size());
+ subscriptionService.getSubscribedUsers(user.getUid(), mid).size());
assertEquals("tags should be updated", "Tags are updated",
commandsManager.processCommand(user, "#" + mid + " *there", emptyUri).getText());
assertEquals("number of tags should match", 1,
tagService.getMessageTags(mid).size());
- int taggerUid = userService.createUser("dummyTagger", "dummySecret");
- User taggerUser = userService.getUserByUID(taggerUid).orElse(AnonymousUser.INSTANCE);
+ User taggerUser = userService.createUser("dummyTagger", "dummySecret");
assertEquals("should be subscribed", "Subscribed",
commandsManager.processCommand(taggerUser, "S *yo", emptyUri).getText());
assertEquals("number of subscribed users should match", 2,
- subscriptionService.getSubscribedUsers(uid, mid).size());
+ subscriptionService.getSubscribedUsers(user.getUid(), mid).size());
assertEquals("should be unsubscribed", "Unsubscribed from yo",
commandsManager.processCommand(taggerUser, "U *yo", emptyUri).getText());
assertEquals("number of subscribed users should match", 1,
- subscriptionService.getSubscribedUsers(uid, mid).size());
+ subscriptionService.getSubscribedUsers(user.getUid(), mid).size());
assertEquals("number of readers should match", 1,
- userService.getUserReaders(uid).size());
+ userService.getUserReaders(user.getUid()).size());
String readerFeed = commandsManager.processCommand(readerUser, "#", emptyUri).getText();
assertTrue("description should match", readerFeed.startsWith("Your feed"));
assertEquals("should be unsubscribed", "Unsubscribed from @" + user.getName(),
commandsManager.processCommand(readerUser, "U @" + user.getName(), emptyUri)
.getText());
assertEquals("number of readers should match", 0,
- userService.getUserReaders(uid).size());
+ userService.getUserReaders(user.getUid()).size());
assertEquals("number of friends should match", 1,
- userService.getUserFriends(uid).size());
+ userService.getUserFriends(user.getUid()).size());
assertEquals("should be unsubscribed", "Unsubscribed from #" + mid,
commandsManager.processCommand(readerUser, "u #" + mid, emptyUri).getText());
assertEquals("number of subscribed users should match", 0,
@@ -867,83 +857,82 @@ public class ServerTests {
@Test
public void recommendTests() throws Exception {
- int mid = messagesService.createMessage(ugnich.getUid(), "to be liked", null, null);
- String freefdHash = userService.getHashByUID(freefd.getUid());
- int freefdMid = messagesService.createMessage(freefd.getUid(), "to be not liked", null, null);
+ Message msg = messagesService.createMessage(ugnich, "to be liked", null, null);
+ String freefdHash = userService.getHashForUser(freefd);
+ Message freefdMsg = messagesService.createMessage(freefd, "to be not liked", null, null);
- mockMvc.perform(post("/like?mid=" + mid + "&hash=" + freefdHash))
+ mockMvc.perform(post("/like?mid=" + msg.getMid() + "&hash=" + freefdHash))
.andExpect(status().isOk())
.andExpect(jsonPath("$.status", is("Message is added to your recommendations")));
- mockMvc.perform(get("/thread?mid=" + mid + "&hash=" + freefdHash))
+ mockMvc.perform(get("/thread?mid=" + msg.getMid() + "&hash=" + freefdHash))
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].recommendations.length()", is(1)))
.andExpect(jsonPath("$[0].recommendations[0]", is(freefdName)));
- mockMvc.perform(post("/like?mid=" + freefdMid + "&hash=" + freefdHash))
+ mockMvc.perform(post("/like?mid=" + freefdMsg.getMid() + "&hash=" + freefdHash))
.andExpect(status().isForbidden());
}
@Test
public void likesTests() throws Exception{
- int user_id = userService.createUser("dsds", "secret");
- String freefdHash = userService.getHashByUID(freefd.getUid());
- int mid1 = messagesService.createMessage(user_id, "yo", null, new ArrayList<>());
+ User dsds = userService.createUser("dsds", "secret");
+ String freefdHash = userService.getHashForUser(freefd);
+ Message msg1 = messagesService.createMessage(dsds, "yo", null, new ArrayList<>());
- mockMvc.perform(post("/react?mid=" + mid1 + "&hash=" + freefdHash+ "&reactionId=2"))
+ mockMvc.perform(post("/react?mid=" + msg1.getMid() + "&hash=" + freefdHash+ "&reactionId=2"))
.andExpect(status().isOk());
- Message msg4 = messagesService.getMessage(mid1);
- assertThat(msg4.getLikes(), is(0));
- assertThat(messagesService.getMessages(Collections.singletonList(mid1)).get(0).getLikes(), is(0));
- Assert.assertEquals(1, msg4.getReactions().stream().filter(r -> r.getId() == 2)
+ assertThat(msg1.getLikes(), is(0));
+ assertThat(messagesService.getMessages(Collections.singletonList(msg1.getMid())).get(0).getLikes(), is(0));
+ Assert.assertEquals(1, msg1.getReactions().stream().filter(r -> r.getId() == 2)
.findFirst().orElseThrow(IllegalStateException::new).getCount());
- mockMvc.perform(post("/react?mid=" + mid1 + "&hash=" + freefdHash+ "&reactionId=1"))
+ mockMvc.perform(post("/react?mid=" + msg1.getMid() + "&hash=" + freefdHash+ "&reactionId=1"))
.andExpect(status().isOk());
- mockMvc.perform(post("/react?mid=" + mid1 + "&hash=" + freefdHash+ "&reactionId=1"))
+ mockMvc.perform(post("/react?mid=" + msg1.getMid() + "&hash=" + freefdHash+ "&reactionId=1"))
.andExpect(status().isOk());
- assertThat(messagesService.getMessage(mid1).getLikes(), is(1));
+ assertThat(msg1.getLikes(), is(1));
}
@Test
public void lastReadTests() throws Exception {
assertThat(userService.isInBLAny(ugnich.getUid(), freefd.getUid()), is(false));
- int mid = messagesService.createMessage(ugnich.getUid(), "to be watched", null, null);
- subscriptionService.subscribeMessage(messagesService.getMessage(mid), ugnich);
- messagesService.createReply(mid, 0, freefd, "new reply", null);
+ Message msg = messagesService.createMessage(ugnich, "to be watched", null, null);
+ subscriptionService.subscribeMessage(msg, ugnich);
+ messagesService.createReply(msg.getMid(), 0, freefd, "new reply", null);
BiFunction<User, Integer, Integer> lastRead = (user, m) -> jdbcTemplate.queryForObject(
"SELECT last_read_rid FROM subscr_messages WHERE suser_id=? AND message_id=?",
Integer.class, user.getUid(), m);
- assertThat(lastRead.apply(ugnich, mid), is(0));
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(0));
assertThat(messagesService.getUnread(ugnich).size(), is(1));
- assertThat(messagesService.getUnread(ugnich).get(0), is(mid));
- messagesService.getReplies(ugnich, mid);
- assertThat(lastRead.apply(ugnich, mid), is(1));
+ assertThat(messagesService.getUnread(ugnich).get(0), is(msg.getMid()));
+ messagesService.getReplies(ugnich, msg.getMid());
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(1));
assertThat(messagesService.getUnread(ugnich).size(), is(0));
- messagesService.setLastReadComment(ugnich, mid, 0);
- assertThat(lastRead.apply(ugnich, mid), is(1));
- String ugnichHash = userService.getHashByUID(ugnich.getUid());
- int freefdrid = messagesService.createReply(mid, 0, freefd, "again", null);
- mockMvc.perform(get(String.format("/thread/mark_read/%d-%d.gif?hash=%s", mid, freefdrid, ugnichHash)))
+ messagesService.setLastReadComment(ugnich, msg.getMid(), 0);
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(1));
+ String ugnichHash = userService.getHashForUser(ugnich);
+ int freefdrid = messagesService.createReply(msg.getMid(), 0, freefd, "again", null);
+ mockMvc.perform(get(String.format("/thread/mark_read/%d-%d.gif?hash=%s", msg.getMid(), freefdrid, ugnichHash)))
.andExpect(status().isOk())
.andExpect(content().bytes(IOUtils.toByteArray(
Objects.requireNonNull(getClass().getClassLoader().getResource("Transparent.gif")))));
- assertThat(lastRead.apply(ugnich, mid), is(freefdrid));
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(freefdrid));
privacyQueriesService.blacklistUser(ugnich, freefd);
- int newfreefdrid = messagesService.createReply(mid, 0, freefd, "from ban", null);
- serverManager.processMessageEvent(new MessageEvent(this, messagesService.getReply(mid, newfreefdrid),
+ int newfreefdrid = messagesService.createReply(msg.getMid(), 0, freefd, "from ban", null);
+ serverManager.processMessageEvent(new MessageEvent(this, messagesService.getReply(msg.getMid(), newfreefdrid),
Collections.emptyList()));
- assertThat(userService.isReplyToBL(ugnich, messagesService.getReply(mid, newfreefdrid)), is(true));
- assertThat(lastRead.apply(ugnich, mid), is(newfreefdrid));
+ assertThat(userService.isReplyToBL(ugnich, messagesService.getReply(msg.getMid(), newfreefdrid)), is(true));
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(newfreefdrid));
privacyQueriesService.blacklistUser(ugnich, freefd);
- newfreefdrid = messagesService.createReply(mid, 0, freefd, "after ban", null);
- assertThat(lastRead.apply(ugnich, mid), lessThan(newfreefdrid));
- mockMvc.perform(get(String.format("/thread?mid=%d&hash=%s", mid, ugnichHash)))
+ newfreefdrid = messagesService.createReply(msg.getMid(), 0, freefd, "after ban", null);
+ assertThat(lastRead.apply(ugnich, msg.getMid()), lessThan(newfreefdrid));
+ mockMvc.perform(get(String.format("/thread?mid=%d&hash=%s", msg.getMid(), ugnichHash)))
.andExpect(status().isOk());
- assertThat(lastRead.apply(ugnich, mid), is(newfreefdrid));
+ assertThat(lastRead.apply(ugnich, msg.getMid()), is(newfreefdrid));
}
@Test
public void feedsShouldNotContainMessagesWithBannedTags() {
Tag banned = tagService.getTag("banned", true);
- int mid = messagesService.createMessage(ugnich.getUid(), "yo", "jpg",
+ Message msg = messagesService.createMessage(ugnich, "yo", "jpg",
Collections.singletonList(banned));
privacyQueriesService.blacklistTag(freefd, banned);
assertTrue(messagesService.getMessages(messagesService.getAll(freefd.getUid(), 0))
@@ -954,7 +943,7 @@ public class ServerTests {
.stream().noneMatch(m -> m.getTags().contains(banned)));
assertFalse(messagesService.getMessages(messagesService.getPhotos(ugnich.getUid(), 0))
.stream().noneMatch(m -> m.getTags().contains(banned)));
- jdbcTemplate.update("UPDATE messages SET popular=1 WHERE message_id=?", mid);
+ jdbcTemplate.update("UPDATE messages SET popular=1 WHERE message_id=?", msg.getMid());
assertTrue(messagesService.getMessages(messagesService.getPopular(freefd.getUid(), 0))
.stream().noneMatch(m -> m.getTags().contains(banned)));
assertFalse(messagesService.getMessages(messagesService.getPopular(ugnich.getUid(), 0))
@@ -1024,8 +1013,8 @@ public class ServerTests {
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
map.add("body", "yo");
- map.add("hash", userService.getHashByUID(ugnich.getUid()));
- ResponseEntity<CommandResult> result = restTemplate.postForEntity(
+ map.add("hash", userService.getHashForUser(ugnich));
+ ResponseEntity<CommandResult> result = rest.postForEntity(
"/post",
request, CommandResult.class);
assertThat(result.getStatusCode(), is(HttpStatus.OK));
@@ -1051,7 +1040,7 @@ public class ServerTests {
commandsManager.processCommand(freefd, "S @ugnich", emptyUri);
commandsManager.processCommand(ugnich, "S @freefd", emptyUri);
assertThat(userService.getUserReaders(ugnich.getUid()).size(), is(1));
- String hash = userService.getHashByUID(ugnich.getUid());
+ String hash = userService.getHashForUser(ugnich);
mockMvc.perform(get("/me")
.with(httpBasic(ugnichName, ugnichPassword)))
.andExpect(jsonPath("$.hash", is(hash)))
@@ -1111,4 +1100,11 @@ public class ServerTests {
assertThat(replyJpgCmyk.getNewMessage().isPresent(), is(true));
assertThat(replyJpgCmyk.getNewMessage().get().getAttachmentType(), is("jpg"));
}
+ @Test
+ public void emailTest() {
+ User tezzt = userService.createUser("tezzt", "12346");
+ jdbcTemplate.update("INSERT INTO emails(user_id, email) VALUES(?, 'yo@example.com')", tezzt.getUid());
+ User user = userService.getUserByEmail("yo@example.com");
+ assertThat(user, is(tezzt));
+ }
}
diff --git a/juick-server/src/test/resources/data.sql b/juick-server/src/test/resources/data.sql
index 102b11f4..9690d6a8 100644
--- a/juick-server/src/test/resources/data.sql
+++ b/juick-server/src/test/resources/data.sql
@@ -1,3 +1,4 @@
+INSERT INTO tags(tag_id, name) VALUES(1, 'тест');
INSERT INTO tags(tag_id, name) VALUES(2, 'juick');
INSERT INTO reactions (like_id, description) VALUES (1, 'like');
INSERT INTO reactions (like_id, description) VALUES (2, 'love');
diff --git a/juick-www/src/main/java/com/juick/www/controllers/Login.java b/juick-www/src/main/java/com/juick/www/controllers/Login.java
index cb7df833..783430b2 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/Login.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/Login.java
@@ -44,7 +44,7 @@ public class Login {
}
@GetMapping("/login/success")
public String getSuccessLogin(ModelMap model) {
- model.addAttribute("hash", userService.getHashByUID(UserUtils.getCurrentUser().getUid()));
+ model.addAttribute("hash", userService.getHashForUser(UserUtils.getCurrentUser()));
return "views/login_success";
}
}
diff --git a/juick-www/src/main/java/com/juick/www/controllers/MessagesWWW.java b/juick-www/src/main/java/com/juick/www/controllers/MessagesWWW.java
index f416cb86..dc0729e0 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/MessagesWWW.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/MessagesWWW.java
@@ -456,7 +456,7 @@ public class MessagesWWW {
return "redirect:/login";
}
String title = "PM: Inbox";
- List<com.juick.Message> msgs = pmQueriesService.getLastPMInbox(visitor.getUid());
+ List<com.juick.Message> msgs = pmQueriesService.getLastPMInbox(visitor);
fillUserModel(model, visitor, visitor);
model.addAttribute("title", title);
model.addAttribute("visitor", visitor);
@@ -473,7 +473,7 @@ public class MessagesWWW {
return "redirect:/login";
}
String title = "PM: Sent";
- List<com.juick.Message> msgs = pmQueriesService.getLastPMSent(visitor.getUid());
+ List<com.juick.Message> msgs = pmQueriesService.getLastPMSent(visitor);
if (WebUtils.isNotUserName(uname)) {
uname = StringUtils.EMPTY;
@@ -549,7 +549,7 @@ public class MessagesWWW {
"<meta property=\"og:title\" content=\"" + msg.getUser().getName() + " at Juick\" />\n" +
"<meta property=\"og:description\" content=\"" + cardDescription + "\" />\n" +
"<meta name=\"Description\" content=\"" + cardDescription + "\" />\n";
- String twitterName = crosspostService.getTwitterName(msg.getUser().getUid());
+ String twitterName = crosspostService.getTwitterName(msg.getUser());
if (StringUtils.isNotEmpty(twitterName)) {
headers += "<meta name=\"twitter:creator\" content=\"@" + twitterName + "\" />\n";
}
diff --git a/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java b/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
index a464add2..a88698af 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/NewMessage.java
@@ -161,7 +161,7 @@ public class NewMessage {
params.add("body", rid == 0 ? String.format("#%d %s", mid, body) : String.format("#%d/%d %s", mid, rid, body));
- params.add("hash", userService.getHashByUID(visitor.getUid()));
+ params.add("hash", userService.getHashForUser(visitor));
if (StringUtils.isNotEmpty(attachmentFName.toString())) {
params.add("img", attachmentFName.toASCIIString());
}
@@ -203,7 +203,7 @@ public class NewMessage {
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
params.add("body", String.format("@%s %s", userTo.getName(), body));
- params.add("hash", userService.getHashByUID(visitor.getUid()));
+ params.add("hash", userService.getHashForUser(visitor));
URI postUri = UriComponentsBuilder.fromUriString(apiUrl).path("/post").build().toUri();
ResponseEntity<CommandResult> result = rest.postForEntity(
postUri,
@@ -240,7 +240,7 @@ public class NewMessage {
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
params.add("body", body);
- params.add("hash", userService.getHashByUID(visitor.getUid()));
+ params.add("hash", userService.getHashForUser(visitor));
if (StringUtils.isNotEmpty(attachmentFName.toString())) {
params.add("img", attachmentFName.toASCIIString());
}
diff --git a/juick-www/src/main/java/com/juick/www/controllers/Settings.java b/juick-www/src/main/java/com/juick/www/controllers/Settings.java
index f9527423..702f52af 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/Settings.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/Settings.java
@@ -96,20 +96,20 @@ public class Settings {
model.addAttribute("visitor", visitor);
model.addAttribute("tags", tagService.getPopularTags());
model.addAttribute("auths", userService.getAuthCodes(visitor));
- model.addAttribute("email_active", emailService.getNotificationsEmail(visitor.getUid()));
+ model.addAttribute("email_active", emailService.getNotificationsEmail(visitor));
model.addAttribute("ehash", userService.getEmailHash(visitor));
model.addAttribute("emails", userService.getEmails(visitor));
model.addAttribute("jids", userService.getAllJIDs(visitor));
List<String> hours = IntStream.rangeClosed(0, 23).boxed()
.map(i -> StringUtils.leftPad(String.format("%d", i), 2, "0")).collect(Collectors.toList());
model.addAttribute("hours", hours);
- model.addAttribute("fbstatus", crosspostService.getFbCrossPostStatus(visitor.getUid()));
- model.addAttribute("twitter_name", crosspostService.getTwitterName(visitor.getUid()));
- model.addAttribute("telegram_name", crosspostService.getTelegramName(visitor.getUid()));
+ model.addAttribute("fbstatus", crosspostService.getFbCrossPostStatus(visitor));
+ model.addAttribute("twitter_name", crosspostService.getTwitterName(visitor));
+ model.addAttribute("telegram_name", crosspostService.getTelegramName(visitor));
model.addAttribute("notify_options", subscriptionService.getNotifyOptions(visitor));
model.addAttribute("userinfo", userService.getUserInfo(visitor));
if (page.equals("auth-email")) {
- if (emailService.verifyAddressByCode(visitor.getUid(), request.getParameter("code"))) {
+ if (emailService.verifyAddressByCode(visitor, request.getParameter("code"))) {
;
model.addAttribute("result", "OK!");
} else {
@@ -140,7 +140,7 @@ public class Settings {
case "password":
if (userService.updatePassword(visitor, request.getParameter("password"))) {
result = "<p>Password has been changed.</p>";
- String hash = userService.getHashByUID(visitor.getUid());
+ String hash = userService.getHashForUser(visitor);
Cookie c = new Cookie("hash", hash);
c.setMaxAge(365 * 24 * 60 * 60);
response.addCookie(c);
@@ -186,9 +186,9 @@ public class Settings {
}
break;
case "email-add":
- if (!emailService.verifyAddressByCode(visitor.getUid(), request.getParameter("account"))) {
+ if (!emailService.verifyAddressByCode(visitor, request.getParameter("account"))) {
String authCode = RandomStringUtils.randomAlphanumeric(8).toUpperCase();
- if (emailService.addVerificationCode(visitor.getUid(), request.getParameter("account"), authCode)) {
+ if (emailService.addVerificationCode(visitor, request.getParameter("account"), authCode)) {
Session session = Session.getDefaultInstance(System.getProperties());
try {
MimeMessage message = new MimeMessage(session);
@@ -210,14 +210,14 @@ public class Settings {
}
break;
case "email-del":
- if (emailService.deleteEmail(visitor.getUid(), request.getParameter("account"))) {
+ if (emailService.deleteEmail(visitor, request.getParameter("account"))) {
result = "<p>Deleted. <a href=\"/settings\">Back</a>.</p>";
} else {
result = "<p>An error occured while deleting.</p>";
}
break;
case "email-subscr":
- if (emailService.setNotificationsEmail(visitor.getUid(), request.getParameter("account"))) {
+ if (emailService.setNotificationsEmail(visitor, request.getParameter("account"))) {
result = String.format("<p>Saved! Will send notifications to <strong>%s</strong>." +
"</p><p><a href=\"/settings\">Back</a></p>", request.getParameter("account"));
} else {
@@ -225,7 +225,7 @@ public class Settings {
}
break;
case "twitter-del":
- crosspostService.deleteTwitterToken(visitor.getUid());
+ crosspostService.deleteTwitterToken(visitor);
for (Cookie cookie : request.getCookies()) {
if (cookie.getName().equals("request_token")) {
cookie.setMaxAge(0);
@@ -246,15 +246,15 @@ public class Settings {
result = "<p><a href=\"/settings\">Back</a></p>";
break;
case "facebook-disable":
- crosspostService.disableFBCrosspost(visitor.getUid());
+ crosspostService.disableFBCrosspost(visitor);
result = "<p><a href=\"/settings\">Back</a></p>";
break;
case "facebook-enable":
- crosspostService.enableFBCrosspost(visitor.getUid());
+ crosspostService.enableFBCrosspost(visitor);
result = "<p><a href=\"/settings\">Back</a></p>";
break;
case "vk-del":
- crosspostService.deleteVKUser(visitor.getUid());
+ crosspostService.deleteVKUser(visitor);
result = "<p><a href=\"/settings\">Back</a></p>";
break;
default:
diff --git a/juick-www/src/main/java/com/juick/www/controllers/SignUp.java b/juick-www/src/main/java/com/juick/www/controllers/SignUp.java
index 02a8006b..11f02169 100644
--- a/juick-www/src/main/java/com/juick/www/controllers/SignUp.java
+++ b/juick-www/src/main/java/com/juick/www/controllers/SignUp.java
@@ -16,6 +16,7 @@
*/
package com.juick.www.controllers;
+import com.juick.User;
import com.juick.server.util.HttpBadRequestException;
import com.juick.server.util.HttpForbiddenException;
import com.juick.server.util.UserUtils;
@@ -95,7 +96,7 @@ public class SignUp {
@RequestParam(required = false) String username,
@RequestParam(required = false) String password) {
com.juick.User visitor = UserUtils.getCurrentUser();
- int uid = 0;
+ User signedUser = visitor;
if (hash.length() > 36 || !type.matches("^[a-zA-Z0-9\\-]+$") || !hash.matches("^[a-zA-Z0-9\\-]+$")) {
throw new HttpBadRequestException();
@@ -107,20 +108,20 @@ public class SignUp {
if (username.length() > 32) {
throw new HttpBadRequestException();
}
- uid = userService.checkPassword(username, password);
+ signedUser = userService.checkPassword(username, password);
} else {
- uid = visitor.getUid();
+ signedUser = visitor;
}
- if (uid <= 0) {
+ if (signedUser.isAnonymous()) {
throw new HttpForbiddenException();
}
- if (!(type.charAt(0) == 'f' && crosspostService.setFacebookUser(hash, uid))
- && !(type.charAt(0) == 'v' && crosspostService.setVKUser(hash, uid))
- && !(type.charAt(0) == 'd' && crosspostService.setTelegramUser(hash, uid))
- && !(type.charAt(0) == 'x' && crosspostService.setJIDUser(hash, uid))
- && !(type.charAt(0) == 'm' && messengerService.linkMessengerUser(hash, uid))) {
+ if (!(type.charAt(0) == 'f' && crosspostService.setFacebookUser(hash, signedUser))
+ && !(type.charAt(0) == 'v' && crosspostService.setVKUser(hash, signedUser))
+ && !(type.charAt(0) == 'd' && crosspostService.setTelegramUser(hash, signedUser))
+ && !(type.charAt(0) == 'x' && crosspostService.setJIDUser(hash, signedUser))
+ && !(type.charAt(0) == 'm' && messengerService.linkMessengerUser(hash, signedUser.getUid()))) {
throw new HttpBadRequestException();
}
@@ -131,22 +132,22 @@ public class SignUp {
// CHECK USERNAME
- uid = userService.createUser(username, password);
- if (uid <= 0) {
+ signedUser = userService.createUser(username, password);
+ if (signedUser.isAnonymous()) {
throw new HttpBadRequestException();
}
- if (!(type.charAt(0) == 'f' && crosspostService.setFacebookUser(hash, uid))
- && !(type.charAt(0) == 'v' && crosspostService.setVKUser(hash, uid))
- && !(type.charAt(0) == 'd' && crosspostService.setTelegramUser(hash, uid))
- && !(type.charAt(0) == 'x' && crosspostService.setJIDUser(hash, uid))
- && !(type.charAt(0) == 'm' && messengerService.linkMessengerUser(hash, uid))) {
+ if (!(type.charAt(0) == 'f' && crosspostService.setFacebookUser(hash, signedUser))
+ && !(type.charAt(0) == 'v' && crosspostService.setVKUser(hash, signedUser))
+ && !(type.charAt(0) == 'd' && crosspostService.setTelegramUser(hash, signedUser))
+ && !(type.charAt(0) == 'x' && crosspostService.setJIDUser(hash, signedUser))
+ && !(type.charAt(0) == 'm' && messengerService.linkMessengerUser(hash, signedUser.getUid()))) {
throw new HttpBadRequestException();
}
}
if (visitor.isAnonymous()) {
- hash = userService.getHashByUID(uid);
+ hash = userService.getHashForUser(signedUser);
Cookie c = new Cookie("hash", hash);
c.setMaxAge(365 * 24 * 60 * 60);
response.addCookie(c);
diff --git a/juick-www/src/test/java/com/juick/WebAppTests.java b/juick-www/src/test/java/com/juick/WebAppTests.java
index 74be2c92..3b85b585 100644
--- a/juick-www/src/test/java/com/juick/WebAppTests.java
+++ b/juick-www/src/test/java/com/juick/WebAppTests.java
@@ -23,6 +23,7 @@ import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.css.StyleElement;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.juick.server.helpers.AnonymousUser;
import com.juick.service.*;
import com.juick.util.MessageUtils;
import com.juick.www.Utils;
@@ -126,8 +127,7 @@ public class WebAppTests {
userService.createUser(ugnichName, ugnichPassword);
ugnich = userService.getUserByName(ugnichName);
- int freefdId = userService.createUser(freefdName, freefdPassword);
- freefd = userService.getUserByUID(freefdId).orElseThrow(IllegalStateException::new);
+ freefd = userService.createUser(freefdName, freefdPassword);
isSetUp = true;
}
@@ -148,7 +148,7 @@ public class WebAppTests {
@Test
public void postWithoutTagsShouldNotHaveAsteriskInTitle() throws Exception {
String msgText = "Привет, я - Угнич";
- int mid = messagesService.createMessage(ugnich.getUid(), msgText, null, null);
+ int mid = messagesService.createMessage(ugnich, msgText, null, null);
HtmlPage threadPage = webClient.getPage(String.format("http://localhost:8080/ugnich/%d", mid));
assertThat(threadPage.getTitleText(), equalTo("ugnich:"));
}
@@ -159,8 +159,9 @@ public class WebAppTests {
String msgText = "автор этого поста был забанен";
String hash = "12345678";
- User isilmine = userService.getUserByUID(userService.createUser(userName, userPassword)).orElseThrow(IllegalStateException::new);
- int mid = messagesService.createMessage(isilmine.getUid(), msgText, null, null);
+ User isilmine = userService.createUser(userName, userPassword);
+ assertThat(isilmine, not(AnonymousUser.INSTANCE));
+ int mid = messagesService.createMessage(isilmine, msgText, null, null);
jdbcTemplate.update("UPDATE users SET banned=1 WHERE id=?", isilmine.getUid());
Page blogPage = webClient.getPage("http://localhost:8080/isilmine");
Page threadPage = webClient.getPage(String.format("http://localhost:8080/isilmine/%d", mid));
@@ -169,7 +170,7 @@ public class WebAppTests {
}
@Test
public void repliesList() throws IOException {
- int mid = messagesService.createMessage(ugnich.getUid(), "hello", null, null);
+ int mid = messagesService.createMessage(ugnich, "hello", null, null);
IntStream.range(1, 15).forEach(i ->
messagesService.createReply(mid, i-1, freefd, String.valueOf(i-1), null ));
@@ -184,7 +185,7 @@ public class WebAppTests {
}
@Test
public void userShouldNotSeeReplyButtonToBannedUser() throws Exception {
- int mid = messagesService.createMessage(ugnich.getUid(), "freefd bl me", null, null);
+ int mid = messagesService.createMessage(ugnich, "freefd bl me", null, null);
messagesService.createReply(mid, 0, ugnich, "yo", null);
MvcResult loginResult = mockMvc.perform(post("/login")
.param("username", freefdName)
@@ -201,8 +202,9 @@ public class WebAppTests {
assertThat(threadPage.querySelectorAll(".a-thread-comment").isEmpty(), equalTo(false));
privacyQueriesService.blacklistUser(freefd, ugnich);
assertThat(userService.isInBLAny(freefd.getUid(), ugnich.getUid()), equalTo(true));
- int renhaId = userService.createUser("renha", "secret");
- messagesService.createReply(mid, 0, userService.getUserByUID(renhaId).orElseThrow(IllegalStateException::new),
+ User renha = userService.createUser("renha", "secret");
+ assertThat(renha, not(AnonymousUser.INSTANCE));
+ messagesService.createReply(mid, 0, renha,
"people", null);
threadPage = webClient.getPage(String.format("http://localhost:8080/ugnich/%d", mid));
assertThat(threadPage.getWebResponse().getStatusCode(), equalTo(200));
@@ -229,11 +231,11 @@ public class WebAppTests {
@Test
public void testTwitterCards() throws Exception {
- int mid = messagesService.createMessage(ugnich.getUid(), "without image", null, null);
+ int mid = messagesService.createMessage(ugnich, "without image", null, null);
assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid), "twitter:card")
.getAttribute("content"), equalTo("summary"));
- int mid2 = messagesService.createMessage(ugnich.getUid(), "with image", "png", null);
+ int mid2 = messagesService.createMessage(ugnich, "with image", "png", null);
Message message = messagesService.getMessage(mid2);
assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid2), "twitter:card")
.getAttribute("content"), equalTo("summary_large_image"));
@@ -266,7 +268,7 @@ public class WebAppTests {
mockMvc.perform(multipart("/post2")
.file(file)
.cookie(loginResult.getResponse().getCookies())).andExpect(status().isFound());
- int mid = messagesService.createMessage(ugnich.getUid(), "dummy message", null, null);
+ int mid = messagesService.createMessage(ugnich, "dummy message", null, null);
mockMvc.perform(post("/comment")
.param("mid", String.valueOf(mid))
.param("body", "yo")).andExpect(redirectedUrl("http://localhost/login"));
@@ -297,7 +299,7 @@ public class WebAppTests {
}
@Test
public void hashLoginShouldNotUseSession() throws Exception {
- String hash = userService.getHashByUID(ugnich.getUid());
+ String hash = userService.getHashForUser(ugnich);
MvcResult hashLoginResult = mockMvc.perform(get("/?show=my&hash=" + hash))
.andExpect(status().isOk())
.andExpect(model().attribute("visitor", hasProperty("authHash", equalTo(hash))))
@@ -322,8 +324,8 @@ public class WebAppTests {
@Test
public void discussionsShouldBePageableByTimestamp() throws Exception {
String msgText = "Привет, я снова Угнич";
- int mid = messagesService.createMessage(ugnich.getUid(), msgText, null, null);
- int midNew = messagesService.createMessage(ugnich.getUid(), "Я более новый Угнич", null, null);
+ int mid = messagesService.createMessage(ugnich, msgText, null, null);
+ int midNew = messagesService.createMessage(ugnich, "Я более новый Угнич", null, null);
MvcResult loginResult = mockMvc.perform(post("/login")
.param("username", freefdName)
.param("password", freefdPassword)).andReturn();
@@ -351,7 +353,7 @@ public class WebAppTests {
HtmlPage discussionsOld = webClient.getPage(discussionsUrl + "&to=" + msg.getUpdated().toEpochMilli());
assertThat(discussionsOld.querySelectorAll("article").size(), is(1));
assertThat(discussionsOld.querySelectorAll("article").get(0).getAttributes().getNamedItem("data-mid").getNodeValue(), is(String.valueOf(midNew)));
- List<Integer> newMids = IntStream.rangeClosed(1, 19).map(i -> messagesService.createMessage(ugnich.getUid(), String.valueOf(i), null, null)).boxed().collect(Collectors.toList());
+ List<Integer> newMids = IntStream.rangeClosed(1, 19).map(i -> messagesService.createMessage(ugnich, String.valueOf(i), null, null)).boxed().collect(Collectors.toList());
for (Integer m : newMids) {
subscriptionService.subscribeMessage(messagesService.getMessage(m), freefd);
}
@@ -384,7 +386,7 @@ public class WebAppTests {
}
@Test
public void anythingRedirects() throws Exception {
- int mid = messagesService.createMessage(ugnich.getUid(), "yo", null, null);
+ int mid = messagesService.createMessage(ugnich, "yo", null, null);
mockMvc.perform(get(String.format("/%d", mid)))
.andExpect(status().isMovedPermanently())
.andExpect(redirectedUrl(String.format("/%s/%d", ugnich.getName(), mid)));
@@ -407,7 +409,7 @@ public class WebAppTests {
new com.gargoylesoftware.htmlunit.util.Cookie(loginCookie.getDomain(),
loginCookie.getName(),
loginCookie.getValue()));
- int mid = messagesService.createMessage(ugnich.getUid(), "new test", null, null);
+ int mid = messagesService.createMessage(ugnich, "new test", null, null);
subscriptionService.subscribeMessage(messagesService.getMessage(mid), freefd);
int rid = messagesService.createReply(mid, 0, ugnich, "new reply", null);
HtmlPage discussionsPage = webClient.getPage("http://localhost:8080/?show=discuss");