SlideShare a Scribd company logo
1 of 40
Download to read offline
Creating a WhatsApp Clone - Part XIII
@Service
public class UserService {
@Autowired
private UserRepository users;
@Autowired
private ChatGroupRepository groups;
@Autowired
private ChatMessageRepository messages;
@Autowired
private APIKeys keys;
@Autowired
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
e
UserService
@Service
public class UserService {
@Autowired
private UserRepository users;
@Autowired
private ChatGroupRepository groups;
@Autowired
private ChatMessageRepository messages;
@Autowired
private APIKeys keys;
@Autowired
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
e
UserService
@Service
public class UserService {
@Autowired
private UserRepository users;
@Autowired
private ChatGroupRepository groups;
@Autowired
private ChatMessageRepository messages;
@Autowired
private APIKeys keys;
@Autowired
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
e
UserService
@Service
public class UserService {
@Autowired
private UserRepository users;
@Autowired
private ChatGroupRepository groups;
@Autowired
private ChatMessageRepository messages;
@Autowired
private APIKeys keys;
@Autowired
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
e
UserService
@Autowired
private ChatGroupRepository groups;
@Autowired
private ChatMessageRepository messages;
@Autowired
private APIKeys keys;
@Autowired
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
@Autowired
private NotificationService notifications;
private void sendActivationSMS(String number, String text) {
Twilio.init(keys.get("twilio.sid"), keys.get("twilio.auth"));
e
UserService
private PasswordEncoder encoder;
@Autowired
private MediaRepository medias;
@Autowired
private NotificationService notifications;
private void sendActivationSMS(String number, String text) {
Twilio.init(keys.get("twilio.sid"), keys.get("twilio.auth"));
Message message = Message
.creator(new PhoneNumber(number),
new PhoneNumber(keys.get("twilio.phone")),
text)
.create();
message.getSid();
}
public UserDAO login(String phone, String auth)
throws LoginException {
List<User> userList;
userList = users.findByPhone(phone);
e
UserService
new PhoneNumber(keys.get("twilio.phone")),
text)
.create();
message.getSid();
}
public UserDAO login(String phone, String auth)
throws LoginException {
List<User> userList;
userList = users.findByPhone(phone);
if (userList != null && userList.size() == 1) {
User u = userList.get(0);
if (encoder.matches(auth, u.getAuthtoken())) {
return u.getLoginDAO();
}
throw new LoginException("Authentication error!");
}
throw new LoginException("User not found!");
}
private String createVerificationCode(int length) {
StringBuilder k = new StringBuilder();
e
UserService
new PhoneNumber(keys.get("twilio.phone")),
text)
.create();
message.getSid();
}
public UserDAO login(String phone, String auth)
throws LoginException {
List<User> userList;
userList = users.findByPhone(phone);
if (userList != null && userList.size() == 1) {
User u = userList.get(0);
if (encoder.matches(auth, u.getAuthtoken())) {
return u.getLoginDAO();
}
throw new LoginException("Authentication error!");
}
throw new LoginException("User not found!");
}
private String createVerificationCode(int length) {
StringBuilder k = new StringBuilder();
e
UserService
new PhoneNumber(keys.get("twilio.phone")),
text)
.create();
message.getSid();
}
public UserDAO login(String phone, String auth)
throws LoginException {
List<User> userList;
userList = users.findByPhone(phone);
if (userList != null && userList.size() == 1) {
User u = userList.get(0);
if (encoder.matches(auth, u.getAuthtoken())) {
return u.getLoginDAO();
}
throw new LoginException("Authentication error!");
}
throw new LoginException("User not found!");
}
private String createVerificationCode(int length) {
StringBuilder k = new StringBuilder();
e
UserService
if (encoder.matches(auth, u.getAuthtoken())) {
return u.getLoginDAO();
}
throw new LoginException("Authentication error!");
}
throw new LoginException("User not found!");
}
private String createVerificationCode(int length) {
StringBuilder k = new StringBuilder();
Random r = new Random();
for (int iter = 0; iter < length; iter++) {
k.append(r.nextInt(10));
}
return k.toString();
}
public UserDAO signup(UserDAO user) throws SignupException {
List<User> ul = users.findByPhone(user.getPhone());
if (ul != null && ul.size() > 0) {
throw new SignupException(
e
UserService
}
public UserDAO signup(UserDAO user) throws SignupException {
List<User> ul = users.findByPhone(user.getPhone());
if (ul != null && ul.size() > 0) {
throw new SignupException(
"The phone number is already registered!");
}
User u = new User();
setProps(user, u);
u.setAuthtoken(UUID.randomUUID().toString());
u.setVerificationCode(createVerificationCode(4));
users.save(u);
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
e
UserService
}
public UserDAO signup(UserDAO user) throws SignupException {
List<User> ul = users.findByPhone(user.getPhone());
if (ul != null && ul.size() > 0) {
throw new SignupException(
"The phone number is already registered!");
}
User u = new User();
setProps(user, u);
u.setAuthtoken(UUID.randomUUID().toString());
u.setVerificationCode(createVerificationCode(4));
users.save(u);
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
e
UserService
}
public UserDAO signup(UserDAO user) throws SignupException {
List<User> ul = users.findByPhone(user.getPhone());
if (ul != null && ul.size() > 0) {
throw new SignupException(
"The phone number is already registered!");
}
User u = new User();
setProps(user, u);
u.setAuthtoken(UUID.randomUUID().toString());
u.setVerificationCode(createVerificationCode(4));
users.save(u);
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
e
UserService
}
public UserDAO signup(UserDAO user) throws SignupException {
List<User> ul = users.findByPhone(user.getPhone());
if (ul != null && ul.size() > 0) {
throw new SignupException(
"The phone number is already registered!");
}
User u = new User();
setProps(user, u);
u.setAuthtoken(UUID.randomUUID().toString());
u.setVerificationCode(createVerificationCode(4));
users.save(u);
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
e
UserService
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
public boolean verifyPhone(String userId, String code) {
User u = users.findById(userId).get();
if (u.getVerificationCode().equals(code)) {
u.setVerificationCode(null);
u.setVerified(true);
users.save(u);
return true;
}
return false;
}
private void setProps(UserDAO user, User u) {
u.setName(user.getName());
u.setTagline(user.getTagline());
}
e
UserService
sendActivationSMS(user.getPhone(), "Activation key: " + u.
getVerificationCode());
return u.getLoginDAO();
}
public boolean verifyPhone(String userId, String code) {
User u = users.findById(userId).get();
if (u.getVerificationCode().equals(code)) {
u.setVerificationCode(null);
u.setVerified(true);
users.save(u);
return true;
}
return false;
}
private void setProps(UserDAO user, User u) {
u.setName(user.getName());
u.setTagline(user.getTagline());
}
e
UserService
private void setProps(UserDAO user, User u) {
u.setName(user.getName());
u.setTagline(user.getTagline());
}
public void update(String auth, UserDAO user) {
User u = users.findById(user.getId()).get();
if (encoder.matches(auth, u.getAuthtoken())) {
setProps(user, u);
users.save(u);
}
}
public byte[] getAvatar(String userId) {
User u = users.findById(userId).get();
if (u.getAvatar() != null) {
return u.getAvatar().getData();
}
return null;
}
e
UserService
users.save(u);
}
}
public byte[] getAvatar(String userId) {
User u = users.findById(userId).get();
if (u.getAvatar() != null) {
return u.getAvatar().getData();
}
return null;
}
public void setAvatar(String auth, String userId, String mediaId) {
Media m = medias.findById(mediaId).get();
User u = users.findById(userId).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setAvatar(m);
users.save(u);
}
}
public void userTyping(String userId, String toUser, boolean t) {
e
UserService
User u = users.findById(userId).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setAvatar(m);
users.save(u);
}
}
public void userTyping(String userId, String toUser, boolean t) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t);
} else {
ChatGroup g = groups.findById(toUser).get();
for(User u : g.getMembers()) {
AppSocket.sendUserTyping(u.getAuthtoken(), userId, t);
}
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
e
UserService
User u = users.findById(userId).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setAvatar(m);
users.save(u);
}
}
public void userTyping(String userId, String toUser, boolean t) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t);
} else {
ChatGroup g = groups.findById(toUser).get();
for(User u : g.getMembers()) {
AppSocket.sendUserTyping(u.getAuthtoken(), userId, t);
}
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
e
UserService
User u = users.findById(userId).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setAvatar(m);
users.save(u);
}
}
public void userTyping(String userId, String toUser, boolean t) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t);
} else {
ChatGroup g = groups.findById(toUser).get();
for(User u : g.getMembers()) {
AppSocket.sendUserTyping(u.getAuthtoken(), userId, t);
}
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
e
UserService
User u = users.findById(userId).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setAvatar(m);
users.save(u);
}
}
public void userTyping(String userId, String toUser, boolean t) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t);
} else {
ChatGroup g = groups.findById(toUser).get();
for(User u : g.getMembers()) {
AppSocket.sendUserTyping(u.getAuthtoken(), userId, t);
}
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
e
UserService
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
e
UserService
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
e
UserService
}
}
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
e
UserService
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
m.getBody());
}
}
return cm.getDAO();
}
e
UserService
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
m.getBody());
}
}
return cm.getDAO();
}
e
UserService
public MessageDAO sendMessage(MessageDAO m) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById(m.getAuthorId()).get());
cm.setBody(m.getBody());
cm.setMessageTime(new Date());
Optional<User> to = users.findById(m.getSentTo());
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(m.getSentTo(), cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json,
m.getBody());
} else {
ChatGroup g = groups.findById(m.getSentTo()).get();
cm.setSentToGroup(g);
String json = createMessageImpl(m.getSentTo(), cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
m.getBody());
}
}
return cm.getDAO();
}
e
UserService
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
m.getBody());
}
}
return cm.getDAO();
}
private void sendMessageImpl(String authToken, String pushKey,
String json, String message) {
if(!AppSocket.sendMessage(authToken, json)) {
notifications.sendPushNotification(pushKey, message, 1);
}
}
public void sendMessage(String toUser,
Map<String, Object> parsedJSON) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById((String)parsedJSON.get("authorId")).
get());
cm.setBody((String)parsedJSON.get("body"));
cm.setMessageTime(new Date());
e
UserService
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json,
m.getBody());
}
}
return cm.getDAO();
}
private void sendMessageImpl(String authToken, String pushKey,
String json, String message) {
if(!AppSocket.sendMessage(authToken, json)) {
notifications.sendPushNotification(pushKey, message, 1);
}
}
public void sendMessage(String toUser,
Map<String, Object> parsedJSON) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById((String)parsedJSON.get("authorId")).
get());
cm.setBody((String)parsedJSON.get("body"));
cm.setMessageTime(new Date());
e
UserService
}
}
public void sendMessage(String toUser,
Map<String, Object> parsedJSON) {
ChatMessage cm = new ChatMessage();
cm.setAuthor(users.findById((String)parsedJSON.get("authorId")).
get());
cm.setBody((String)parsedJSON.get("body"));
cm.setMessageTime(new Date());
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
cm.setSentTo(to.get());
String json = createMessageImpl(toUser, cm);
User usr = to.get();
sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(),
json, cm.getBody());
} else {
ChatGroup g = groups.findById(toUser).get();
cm.setSentToGroup(g);
String json = createMessageImpl(toUser, cm);
for(User u : g.getMembers()) {
e
UserService
String json = createMessageImpl(toUser, cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(),
json, cm.getBody());
}
}
}
private String createMessageImpl(String toUser, ChatMessage cm) {
cm = messages.save(cm);
ObjectMapper objectMapper = new ObjectMapper();
try {
String dao = objectMapper.writeValueAsString(cm.getDAO());
return dao;
} catch(JsonProcessingException err) {
throw new RuntimeException(err);
}
}
public void sendJSONTo(String toUser, String json) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
e
UserService
String json = createMessageImpl(toUser, cm);
for(User u : g.getMembers()) {
sendMessageImpl(u.getAuthtoken(), u.getPushKey(),
json, cm.getBody());
}
}
}
private String createMessageImpl(String toUser, ChatMessage cm) {
cm = messages.save(cm);
ObjectMapper objectMapper = new ObjectMapper();
try {
String dao = objectMapper.writeValueAsString(cm.getDAO());
return dao;
} catch(JsonProcessingException err) {
throw new RuntimeException(err);
}
}
public void sendJSONTo(String toUser, String json) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
e
UserService
return dao;
} catch(JsonProcessingException err) {
throw new RuntimeException(err);
}
}
public void sendJSONTo(String toUser, String json) {
Optional<User> to = users.findById(toUser);
if(to.isPresent()) {
AppSocket.sendMessage(to.get().getAuthtoken(), json);
} else {
ChatGroup g = groups.findById(toUser).get();
for(User u : g.getMembers()) {
AppSocket.sendMessage(u.getAuthtoken(), json);
}
}
}
public UserDAO findRegisteredUser(String phone) {
return fromList(users.findByPhone(phone));
}
e
UserService
AppSocket.sendMessage(u.getAuthtoken(), json);
}
}
}
public UserDAO findRegisteredUser(String phone) {
return fromList(users.findByPhone(phone));
}
private UserDAO fromList(List<User> ul) {
if(ul.isEmpty()) {
return null;
}
User u = ul.get(0);
if(!u.isVerified()) {
return null;
}
return u.getDAO();
}
public UserDAO findRegisteredUserById(String id) {
return users.findById(id).get().getDAO();
e
UserService
AppSocket.sendMessage(u.getAuthtoken(), json);
}
}
}
public UserDAO findRegisteredUser(String phone) {
return fromList(users.findByPhone(phone));
}
private UserDAO fromList(List<User> ul) {
if(ul.isEmpty()) {
return null;
}
User u = ul.get(0);
if(!u.isVerified()) {
return null;
}
return u.getDAO();
}
public UserDAO findRegisteredUserById(String id) {
return users.findById(id).get().getDAO();
e
UserService
public UserDAO findRegisteredUserById(String id) {
return users.findById(id).get().getDAO();
}
public void ackMessage(String id) {
ChatMessage m = messages.findById(id).get();
m.setAck(true);
messages.save(m);
}
public void sendUnAckedMessages(String toUser) {
List<ChatMessage> mess = messages.findByUnAcked(toUser);
for(ChatMessage m : mess) {
sendMessage(m.getDAO());
}
}
public void updatePushKey(String auth, String id, String key) {
User u = users.findById(auth).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setPushKey(key);
users.save(u);
e
UserService
public UserDAO findRegisteredUserById(String id) {
return users.findById(id).get().getDAO();
}
public void ackMessage(String id) {
ChatMessage m = messages.findById(id).get();
m.setAck(true);
messages.save(m);
}
public void sendUnAckedMessages(String toUser) {
List<ChatMessage> mess = messages.findByUnAcked(toUser);
for(ChatMessage m : mess) {
sendMessage(m.getDAO());
}
}
public void updatePushKey(String auth, String id, String key) {
User u = users.findById(auth).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setPushKey(key);
users.save(u);
e
UserService
public void ackMessage(String id) {
ChatMessage m = messages.findById(id).get();
m.setAck(true);
messages.save(m);
}
public void sendUnAckedMessages(String toUser) {
List<ChatMessage> mess = messages.findByUnAcked(toUser);
for(ChatMessage m : mess) {
sendMessage(m.getDAO());
}
}
public void updatePushKey(String auth, String id, String key) {
User u = users.findById(auth).get();
if (encoder.matches(auth, u.getAuthtoken())) {
u.setPushKey(key);
users.save(u);
}
}
}
e
UserService

More Related Content

Similar to Creating a Whatsapp Clone - Part XIII.pdf

Laporan multi client
Laporan multi clientLaporan multi client
Laporan multi client
ichsanbarokah
 
Include- Modularity using design patterns- Fault tolerance and Compone.pdf
Include- Modularity using design patterns- Fault tolerance and Compone.pdfInclude- Modularity using design patterns- Fault tolerance and Compone.pdf
Include- Modularity using design patterns- Fault tolerance and Compone.pdf
RyanF2PLeev
 
Integrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight ApplicationsIntegrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight Applications
Dan Wahlin
 
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache IgniteNeues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
QAware GmbH
 

Similar to Creating a Whatsapp Clone - Part XIII.pdf (20)

Testando API's de forma unitária mocando as dependências
Testando API's de forma unitária mocando as dependênciasTestando API's de forma unitária mocando as dependências
Testando API's de forma unitária mocando as dependências
 
Creating a Facebook Clone - Part XLV - Transcript.pdf
Creating a Facebook Clone - Part XLV - Transcript.pdfCreating a Facebook Clone - Part XLV - Transcript.pdf
Creating a Facebook Clone - Part XLV - Transcript.pdf
 
Creating a Facebook Clone - Part XLV.pdf
Creating a Facebook Clone - Part XLV.pdfCreating a Facebook Clone - Part XLV.pdf
Creating a Facebook Clone - Part XLV.pdf
 
Android Testing
Android TestingAndroid Testing
Android Testing
 
Creating a Facebook Clone - Part XXII.pdf
Creating a Facebook Clone - Part XXII.pdfCreating a Facebook Clone - Part XXII.pdf
Creating a Facebook Clone - Part XXII.pdf
 
Laporan multi client
Laporan multi clientLaporan multi client
Laporan multi client
 
Include- Modularity using design patterns- Fault tolerance and Compone.pdf
Include- Modularity using design patterns- Fault tolerance and Compone.pdfInclude- Modularity using design patterns- Fault tolerance and Compone.pdf
Include- Modularity using design patterns- Fault tolerance and Compone.pdf
 
Creating a Facebook Clone - Part XXIV.pdf
Creating a Facebook Clone - Part XXIV.pdfCreating a Facebook Clone - Part XXIV.pdf
Creating a Facebook Clone - Part XXIV.pdf
 
Creating a Facebook Clone - Part XXV - Transcript.pdf
Creating a Facebook Clone - Part XXV - Transcript.pdfCreating a Facebook Clone - Part XXV - Transcript.pdf
Creating a Facebook Clone - Part XXV - Transcript.pdf
 
Codemotion appengine
Codemotion appengineCodemotion appengine
Codemotion appengine
 
Integrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight ApplicationsIntegrating Security Roles into Microsoft Silverlight Applications
Integrating Security Roles into Microsoft Silverlight Applications
 
Creating an Uber Clone - Part XIII.pdf
Creating an Uber Clone - Part XIII.pdfCreating an Uber Clone - Part XIII.pdf
Creating an Uber Clone - Part XIII.pdf
 
Vasyl Aleksashyn "How to Stop Shooting Yourself in the Foot"
Vasyl Aleksashyn "How to Stop Shooting Yourself in the Foot"Vasyl Aleksashyn "How to Stop Shooting Yourself in the Foot"
Vasyl Aleksashyn "How to Stop Shooting Yourself in the Foot"
 
Webauthn Tutorial
Webauthn TutorialWebauthn Tutorial
Webauthn Tutorial
 
Creating a Whatsapp Clone - Part XIV.pdf
Creating a Whatsapp Clone - Part XIV.pdfCreating a Whatsapp Clone - Part XIV.pdf
Creating a Whatsapp Clone - Part XIV.pdf
 
Aprimorando sua Aplicação com Ext JS 4 - BrazilJS
Aprimorando sua Aplicação com Ext JS 4 - BrazilJSAprimorando sua Aplicação com Ext JS 4 - BrazilJS
Aprimorando sua Aplicação com Ext JS 4 - BrazilJS
 
Lesson_07_Spring_Security_Register_NEW.pdf
Lesson_07_Spring_Security_Register_NEW.pdfLesson_07_Spring_Security_Register_NEW.pdf
Lesson_07_Spring_Security_Register_NEW.pdf
 
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache IgniteNeues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
Neues aus dem Tindergarten: Auswertung "privater" APIs mit Apache Ignite
 
CDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptorCDI e as ideias pro futuro do VRaptor
CDI e as ideias pro futuro do VRaptor
 
AuthN deep.dive—ASP.NET Authentication Internals.pdf
AuthN deep.dive—ASP.NET Authentication Internals.pdfAuthN deep.dive—ASP.NET Authentication Internals.pdf
AuthN deep.dive—ASP.NET Authentication Internals.pdf
 

More from ShaiAlmog1

More from ShaiAlmog1 (20)

The Duck Teaches Learn to debug from the masters. Local to production- kill ...
The Duck Teaches  Learn to debug from the masters. Local to production- kill ...The Duck Teaches  Learn to debug from the masters. Local to production- kill ...
The Duck Teaches Learn to debug from the masters. Local to production- kill ...
 
create-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdfcreate-netflix-clone-06-client-ui.pdf
create-netflix-clone-06-client-ui.pdf
 
create-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdfcreate-netflix-clone-01-introduction_transcript.pdf
create-netflix-clone-01-introduction_transcript.pdf
 
create-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdfcreate-netflix-clone-02-server_transcript.pdf
create-netflix-clone-02-server_transcript.pdf
 
create-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdfcreate-netflix-clone-04-server-continued_transcript.pdf
create-netflix-clone-04-server-continued_transcript.pdf
 
create-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdfcreate-netflix-clone-01-introduction.pdf
create-netflix-clone-01-introduction.pdf
 
create-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdfcreate-netflix-clone-06-client-ui_transcript.pdf
create-netflix-clone-06-client-ui_transcript.pdf
 
create-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdfcreate-netflix-clone-03-server.pdf
create-netflix-clone-03-server.pdf
 
create-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdfcreate-netflix-clone-04-server-continued.pdf
create-netflix-clone-04-server-continued.pdf
 
create-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdfcreate-netflix-clone-05-client-model_transcript.pdf
create-netflix-clone-05-client-model_transcript.pdf
 
create-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdfcreate-netflix-clone-03-server_transcript.pdf
create-netflix-clone-03-server_transcript.pdf
 
create-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdfcreate-netflix-clone-02-server.pdf
create-netflix-clone-02-server.pdf
 
create-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdfcreate-netflix-clone-05-client-model.pdf
create-netflix-clone-05-client-model.pdf
 
Creating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdfCreating a Whatsapp Clone - Part II.pdf
Creating a Whatsapp Clone - Part II.pdf
 
Creating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdfCreating a Whatsapp Clone - Part IX - Transcript.pdf
Creating a Whatsapp Clone - Part IX - Transcript.pdf
 
Creating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdfCreating a Whatsapp Clone - Part II - Transcript.pdf
Creating a Whatsapp Clone - Part II - Transcript.pdf
 
Creating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdfCreating a Whatsapp Clone - Part V - Transcript.pdf
Creating a Whatsapp Clone - Part V - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdfCreating a Whatsapp Clone - Part IV - Transcript.pdf
Creating a Whatsapp Clone - Part IV - Transcript.pdf
 
Creating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdfCreating a Whatsapp Clone - Part IV.pdf
Creating a Whatsapp Clone - Part IV.pdf
 
Creating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdfCreating a Whatsapp Clone - Part I - Transcript.pdf
Creating a Whatsapp Clone - Part I - Transcript.pdf
 

Recently uploaded

Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
Muhammad Subhan
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 

Recently uploaded (20)

Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Top 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development CompaniesTop 10 CodeIgniter Development Companies
Top 10 CodeIgniter Development Companies
 
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
“Iamnobody89757” Understanding the Mysterious of Digital Identity.pdf
 
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptxCyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
Cyber Insurance - RalphGilot - Embry-Riddle Aeronautical University.pptx
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
UiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overviewUiPath manufacturing technology benefits and AI overview
UiPath manufacturing technology benefits and AI overview
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Generative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdfGenerative AI Use Cases and Applications.pdf
Generative AI Use Cases and Applications.pdf
 
الأمن السيبراني - ما لا يسع للمستخدم جهله
الأمن السيبراني - ما لا يسع للمستخدم جهلهالأمن السيبراني - ما لا يسع للمستخدم جهله
الأمن السيبراني - ما لا يسع للمستخدم جهله
 
Vector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptxVector Search @ sw2con for slideshare.pptx
Vector Search @ sw2con for slideshare.pptx
 

Creating a Whatsapp Clone - Part XIII.pdf

  • 1. Creating a WhatsApp Clone - Part XIII
  • 2. @Service public class UserService { @Autowired private UserRepository users; @Autowired private ChatGroupRepository groups; @Autowired private ChatMessageRepository messages; @Autowired private APIKeys keys; @Autowired private PasswordEncoder encoder; @Autowired private MediaRepository medias; e UserService
  • 3. @Service public class UserService { @Autowired private UserRepository users; @Autowired private ChatGroupRepository groups; @Autowired private ChatMessageRepository messages; @Autowired private APIKeys keys; @Autowired private PasswordEncoder encoder; @Autowired private MediaRepository medias; e UserService
  • 4. @Service public class UserService { @Autowired private UserRepository users; @Autowired private ChatGroupRepository groups; @Autowired private ChatMessageRepository messages; @Autowired private APIKeys keys; @Autowired private PasswordEncoder encoder; @Autowired private MediaRepository medias; e UserService
  • 5. @Service public class UserService { @Autowired private UserRepository users; @Autowired private ChatGroupRepository groups; @Autowired private ChatMessageRepository messages; @Autowired private APIKeys keys; @Autowired private PasswordEncoder encoder; @Autowired private MediaRepository medias; e UserService
  • 6. @Autowired private ChatGroupRepository groups; @Autowired private ChatMessageRepository messages; @Autowired private APIKeys keys; @Autowired private PasswordEncoder encoder; @Autowired private MediaRepository medias; @Autowired private NotificationService notifications; private void sendActivationSMS(String number, String text) { Twilio.init(keys.get("twilio.sid"), keys.get("twilio.auth")); e UserService
  • 7. private PasswordEncoder encoder; @Autowired private MediaRepository medias; @Autowired private NotificationService notifications; private void sendActivationSMS(String number, String text) { Twilio.init(keys.get("twilio.sid"), keys.get("twilio.auth")); Message message = Message .creator(new PhoneNumber(number), new PhoneNumber(keys.get("twilio.phone")), text) .create(); message.getSid(); } public UserDAO login(String phone, String auth) throws LoginException { List<User> userList; userList = users.findByPhone(phone); e UserService
  • 8. new PhoneNumber(keys.get("twilio.phone")), text) .create(); message.getSid(); } public UserDAO login(String phone, String auth) throws LoginException { List<User> userList; userList = users.findByPhone(phone); if (userList != null && userList.size() == 1) { User u = userList.get(0); if (encoder.matches(auth, u.getAuthtoken())) { return u.getLoginDAO(); } throw new LoginException("Authentication error!"); } throw new LoginException("User not found!"); } private String createVerificationCode(int length) { StringBuilder k = new StringBuilder(); e UserService
  • 9. new PhoneNumber(keys.get("twilio.phone")), text) .create(); message.getSid(); } public UserDAO login(String phone, String auth) throws LoginException { List<User> userList; userList = users.findByPhone(phone); if (userList != null && userList.size() == 1) { User u = userList.get(0); if (encoder.matches(auth, u.getAuthtoken())) { return u.getLoginDAO(); } throw new LoginException("Authentication error!"); } throw new LoginException("User not found!"); } private String createVerificationCode(int length) { StringBuilder k = new StringBuilder(); e UserService
  • 10. new PhoneNumber(keys.get("twilio.phone")), text) .create(); message.getSid(); } public UserDAO login(String phone, String auth) throws LoginException { List<User> userList; userList = users.findByPhone(phone); if (userList != null && userList.size() == 1) { User u = userList.get(0); if (encoder.matches(auth, u.getAuthtoken())) { return u.getLoginDAO(); } throw new LoginException("Authentication error!"); } throw new LoginException("User not found!"); } private String createVerificationCode(int length) { StringBuilder k = new StringBuilder(); e UserService
  • 11. if (encoder.matches(auth, u.getAuthtoken())) { return u.getLoginDAO(); } throw new LoginException("Authentication error!"); } throw new LoginException("User not found!"); } private String createVerificationCode(int length) { StringBuilder k = new StringBuilder(); Random r = new Random(); for (int iter = 0; iter < length; iter++) { k.append(r.nextInt(10)); } return k.toString(); } public UserDAO signup(UserDAO user) throws SignupException { List<User> ul = users.findByPhone(user.getPhone()); if (ul != null && ul.size() > 0) { throw new SignupException( e UserService
  • 12. } public UserDAO signup(UserDAO user) throws SignupException { List<User> ul = users.findByPhone(user.getPhone()); if (ul != null && ul.size() > 0) { throw new SignupException( "The phone number is already registered!"); } User u = new User(); setProps(user, u); u.setAuthtoken(UUID.randomUUID().toString()); u.setVerificationCode(createVerificationCode(4)); users.save(u); sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } e UserService
  • 13. } public UserDAO signup(UserDAO user) throws SignupException { List<User> ul = users.findByPhone(user.getPhone()); if (ul != null && ul.size() > 0) { throw new SignupException( "The phone number is already registered!"); } User u = new User(); setProps(user, u); u.setAuthtoken(UUID.randomUUID().toString()); u.setVerificationCode(createVerificationCode(4)); users.save(u); sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } e UserService
  • 14. } public UserDAO signup(UserDAO user) throws SignupException { List<User> ul = users.findByPhone(user.getPhone()); if (ul != null && ul.size() > 0) { throw new SignupException( "The phone number is already registered!"); } User u = new User(); setProps(user, u); u.setAuthtoken(UUID.randomUUID().toString()); u.setVerificationCode(createVerificationCode(4)); users.save(u); sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } e UserService
  • 15. } public UserDAO signup(UserDAO user) throws SignupException { List<User> ul = users.findByPhone(user.getPhone()); if (ul != null && ul.size() > 0) { throw new SignupException( "The phone number is already registered!"); } User u = new User(); setProps(user, u); u.setAuthtoken(UUID.randomUUID().toString()); u.setVerificationCode(createVerificationCode(4)); users.save(u); sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } e UserService
  • 16. sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } public boolean verifyPhone(String userId, String code) { User u = users.findById(userId).get(); if (u.getVerificationCode().equals(code)) { u.setVerificationCode(null); u.setVerified(true); users.save(u); return true; } return false; } private void setProps(UserDAO user, User u) { u.setName(user.getName()); u.setTagline(user.getTagline()); } e UserService
  • 17. sendActivationSMS(user.getPhone(), "Activation key: " + u. getVerificationCode()); return u.getLoginDAO(); } public boolean verifyPhone(String userId, String code) { User u = users.findById(userId).get(); if (u.getVerificationCode().equals(code)) { u.setVerificationCode(null); u.setVerified(true); users.save(u); return true; } return false; } private void setProps(UserDAO user, User u) { u.setName(user.getName()); u.setTagline(user.getTagline()); } e UserService
  • 18. private void setProps(UserDAO user, User u) { u.setName(user.getName()); u.setTagline(user.getTagline()); } public void update(String auth, UserDAO user) { User u = users.findById(user.getId()).get(); if (encoder.matches(auth, u.getAuthtoken())) { setProps(user, u); users.save(u); } } public byte[] getAvatar(String userId) { User u = users.findById(userId).get(); if (u.getAvatar() != null) { return u.getAvatar().getData(); } return null; } e UserService
  • 19. users.save(u); } } public byte[] getAvatar(String userId) { User u = users.findById(userId).get(); if (u.getAvatar() != null) { return u.getAvatar().getData(); } return null; } public void setAvatar(String auth, String userId, String mediaId) { Media m = medias.findById(mediaId).get(); User u = users.findById(userId).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setAvatar(m); users.save(u); } } public void userTyping(String userId, String toUser, boolean t) { e UserService
  • 20. User u = users.findById(userId).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setAvatar(m); users.save(u); } } public void userTyping(String userId, String toUser, boolean t) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t); } else { ChatGroup g = groups.findById(toUser).get(); for(User u : g.getMembers()) { AppSocket.sendUserTyping(u.getAuthtoken(), userId, t); } } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); e UserService
  • 21. User u = users.findById(userId).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setAvatar(m); users.save(u); } } public void userTyping(String userId, String toUser, boolean t) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t); } else { ChatGroup g = groups.findById(toUser).get(); for(User u : g.getMembers()) { AppSocket.sendUserTyping(u.getAuthtoken(), userId, t); } } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); e UserService
  • 22. User u = users.findById(userId).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setAvatar(m); users.save(u); } } public void userTyping(String userId, String toUser, boolean t) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t); } else { ChatGroup g = groups.findById(toUser).get(); for(User u : g.getMembers()) { AppSocket.sendUserTyping(u.getAuthtoken(), userId, t); } } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); e UserService
  • 23. User u = users.findById(userId).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setAvatar(m); users.save(u); } } public void userTyping(String userId, String toUser, boolean t) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { AppSocket.sendUserTyping(to.get().getAuthtoken(), userId, t); } else { ChatGroup g = groups.findById(toUser).get(); for(User u : g.getMembers()) { AppSocket.sendUserTyping(u.getAuthtoken(), userId, t); } } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); e UserService
  • 24. } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, e UserService
  • 25. } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, e UserService
  • 26. } } public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, e UserService
  • 27. public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, m.getBody()); } } return cm.getDAO(); } e UserService
  • 28. public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, m.getBody()); } } return cm.getDAO(); } e UserService
  • 29. public MessageDAO sendMessage(MessageDAO m) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById(m.getAuthorId()).get()); cm.setBody(m.getBody()); cm.setMessageTime(new Date()); Optional<User> to = users.findById(m.getSentTo()); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(m.getSentTo(), cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, m.getBody()); } else { ChatGroup g = groups.findById(m.getSentTo()).get(); cm.setSentToGroup(g); String json = createMessageImpl(m.getSentTo(), cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, m.getBody()); } } return cm.getDAO(); } e UserService
  • 30. for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, m.getBody()); } } return cm.getDAO(); } private void sendMessageImpl(String authToken, String pushKey, String json, String message) { if(!AppSocket.sendMessage(authToken, json)) { notifications.sendPushNotification(pushKey, message, 1); } } public void sendMessage(String toUser, Map<String, Object> parsedJSON) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById((String)parsedJSON.get("authorId")). get()); cm.setBody((String)parsedJSON.get("body")); cm.setMessageTime(new Date()); e UserService
  • 31. for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, m.getBody()); } } return cm.getDAO(); } private void sendMessageImpl(String authToken, String pushKey, String json, String message) { if(!AppSocket.sendMessage(authToken, json)) { notifications.sendPushNotification(pushKey, message, 1); } } public void sendMessage(String toUser, Map<String, Object> parsedJSON) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById((String)parsedJSON.get("authorId")). get()); cm.setBody((String)parsedJSON.get("body")); cm.setMessageTime(new Date()); e UserService
  • 32. } } public void sendMessage(String toUser, Map<String, Object> parsedJSON) { ChatMessage cm = new ChatMessage(); cm.setAuthor(users.findById((String)parsedJSON.get("authorId")). get()); cm.setBody((String)parsedJSON.get("body")); cm.setMessageTime(new Date()); Optional<User> to = users.findById(toUser); if(to.isPresent()) { cm.setSentTo(to.get()); String json = createMessageImpl(toUser, cm); User usr = to.get(); sendMessageImpl(usr.getAuthtoken(), usr.getPushKey(), json, cm.getBody()); } else { ChatGroup g = groups.findById(toUser).get(); cm.setSentToGroup(g); String json = createMessageImpl(toUser, cm); for(User u : g.getMembers()) { e UserService
  • 33. String json = createMessageImpl(toUser, cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, cm.getBody()); } } } private String createMessageImpl(String toUser, ChatMessage cm) { cm = messages.save(cm); ObjectMapper objectMapper = new ObjectMapper(); try { String dao = objectMapper.writeValueAsString(cm.getDAO()); return dao; } catch(JsonProcessingException err) { throw new RuntimeException(err); } } public void sendJSONTo(String toUser, String json) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { e UserService
  • 34. String json = createMessageImpl(toUser, cm); for(User u : g.getMembers()) { sendMessageImpl(u.getAuthtoken(), u.getPushKey(), json, cm.getBody()); } } } private String createMessageImpl(String toUser, ChatMessage cm) { cm = messages.save(cm); ObjectMapper objectMapper = new ObjectMapper(); try { String dao = objectMapper.writeValueAsString(cm.getDAO()); return dao; } catch(JsonProcessingException err) { throw new RuntimeException(err); } } public void sendJSONTo(String toUser, String json) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { e UserService
  • 35. return dao; } catch(JsonProcessingException err) { throw new RuntimeException(err); } } public void sendJSONTo(String toUser, String json) { Optional<User> to = users.findById(toUser); if(to.isPresent()) { AppSocket.sendMessage(to.get().getAuthtoken(), json); } else { ChatGroup g = groups.findById(toUser).get(); for(User u : g.getMembers()) { AppSocket.sendMessage(u.getAuthtoken(), json); } } } public UserDAO findRegisteredUser(String phone) { return fromList(users.findByPhone(phone)); } e UserService
  • 36. AppSocket.sendMessage(u.getAuthtoken(), json); } } } public UserDAO findRegisteredUser(String phone) { return fromList(users.findByPhone(phone)); } private UserDAO fromList(List<User> ul) { if(ul.isEmpty()) { return null; } User u = ul.get(0); if(!u.isVerified()) { return null; } return u.getDAO(); } public UserDAO findRegisteredUserById(String id) { return users.findById(id).get().getDAO(); e UserService
  • 37. AppSocket.sendMessage(u.getAuthtoken(), json); } } } public UserDAO findRegisteredUser(String phone) { return fromList(users.findByPhone(phone)); } private UserDAO fromList(List<User> ul) { if(ul.isEmpty()) { return null; } User u = ul.get(0); if(!u.isVerified()) { return null; } return u.getDAO(); } public UserDAO findRegisteredUserById(String id) { return users.findById(id).get().getDAO(); e UserService
  • 38. public UserDAO findRegisteredUserById(String id) { return users.findById(id).get().getDAO(); } public void ackMessage(String id) { ChatMessage m = messages.findById(id).get(); m.setAck(true); messages.save(m); } public void sendUnAckedMessages(String toUser) { List<ChatMessage> mess = messages.findByUnAcked(toUser); for(ChatMessage m : mess) { sendMessage(m.getDAO()); } } public void updatePushKey(String auth, String id, String key) { User u = users.findById(auth).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setPushKey(key); users.save(u); e UserService
  • 39. public UserDAO findRegisteredUserById(String id) { return users.findById(id).get().getDAO(); } public void ackMessage(String id) { ChatMessage m = messages.findById(id).get(); m.setAck(true); messages.save(m); } public void sendUnAckedMessages(String toUser) { List<ChatMessage> mess = messages.findByUnAcked(toUser); for(ChatMessage m : mess) { sendMessage(m.getDAO()); } } public void updatePushKey(String auth, String id, String key) { User u = users.findById(auth).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setPushKey(key); users.save(u); e UserService
  • 40. public void ackMessage(String id) { ChatMessage m = messages.findById(id).get(); m.setAck(true); messages.save(m); } public void sendUnAckedMessages(String toUser) { List<ChatMessage> mess = messages.findByUnAcked(toUser); for(ChatMessage m : mess) { sendMessage(m.getDAO()); } } public void updatePushKey(String auth, String id, String key) { User u = users.findById(auth).get(); if (encoder.matches(auth, u.getAuthtoken())) { u.setPushKey(key); users.save(u); } } } e UserService