From d233943fc29508dc37714852b11b96b0b46b55d9 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Thu, 24 Nov 2016 21:38:52 +0300 Subject: juick-api: now on spring-webmvc --- .../java/com/juick/api/controllers/Messages.java | 248 +++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 juick-api/src/main/java/com/juick/api/controllers/Messages.java (limited to 'juick-api/src/main/java/com/juick/api/controllers/Messages.java') diff --git a/juick-api/src/main/java/com/juick/api/controllers/Messages.java b/juick-api/src/main/java/com/juick/api/controllers/Messages.java new file mode 100644 index 00000000..a6bd3f6d --- /dev/null +++ b/juick-api/src/main/java/com/juick/api/controllers/Messages.java @@ -0,0 +1,248 @@ +package com.juick.api.controllers; + +import com.juick.Tag; +import com.juick.User; +import com.juick.api.ApiServer; +import com.juick.api.util.HttpBadRequestException; +import com.juick.api.util.HttpForbiddenException; +import com.juick.api.util.HttpNotFoundException; +import com.juick.server.helpers.Status; +import com.juick.service.MessagesService; +import com.juick.service.TagService; +import com.juick.service.UserService; +import org.apache.commons.lang3.math.NumberUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import rocks.xmpp.addr.Jid; +import rocks.xmpp.core.stanza.model.Message; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author ugnich + */ +@Controller +@ResponseBody +public class Messages { + private static final Logger logger = LoggerFactory.getLogger(Messages.class); + + @Inject + private MessagesService messagesService; + @Inject + private UserService userService; + @Inject + private TagService tagService; + @Inject + ApiServer apiServer; + + // TODO: serialize image urls + + @RequestMapping(value = "/home", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public List doGetHome(HttpServletRequest request) { + // TODO: use spring-security + String auth = request.getHeader("Authorization"); + int vuid = userService.getUIDByHttpAuth(auth); + if (vuid == -1) { + throw new HttpForbiddenException(); + } + if (vuid == 0) { + String hash = request.getParameter("hash"); + if (hash != null && hash.length() == 16) { + vuid = userService.getUIDbyHash(hash); + } + } + if (vuid == 0) { + throw new HttpForbiddenException(); + } + int before_mid = NumberUtils.toInt(request.getParameter("before_mid"), 0); + List mids = messagesService.getMyFeed(vuid, before_mid); + return messagesService.getMessages(mids); + } + + @RequestMapping(value = "/messages", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public List doGet(HttpServletRequest request) { + // TODO: use spring-security + String auth = request.getHeader("Authorization"); + int vuid = userService.getUIDByHttpAuth(auth); + if (vuid == -1) { + throw new HttpForbiddenException(); + } + if (vuid == 0) { + String hash = request.getParameter("hash"); + if (hash != null && hash.length() == 16) { + vuid = userService.getUIDbyHash(hash); + } + } + int before_mid = NumberUtils.toInt(request.getParameter("before_mid"), 0); + String uname = request.getParameter("uname"); + String popular = request.getParameter("popular"); + String media = request.getParameter("media"); + String tag = request.getParameter("tag"); + List mids; + if (!StringUtils.isEmpty(uname)) { + User user = userService.getUserByName(uname); + if (user != null) { + if (!StringUtils.isEmpty(media)) { + mids = messagesService.getUserPhotos(user.getUid(), 0, before_mid); + } else if (!StringUtils.isEmpty(tag)) { + Tag tagObject = tagService.getTag(tag, false); + if (tagObject != null) { + mids = messagesService.getUserTag(user.getUid(), tagObject.TID, 0, before_mid); + } else { + throw new HttpNotFoundException(); + } + } else { + mids = messagesService.getUserBlog(user.getUid(), 0, before_mid); + } + } else { + throw new HttpNotFoundException(); + } + } else { + if (!StringUtils.isEmpty(popular)) { + mids = messagesService.getPopular(vuid, before_mid); + } else if (!StringUtils.isEmpty(media)) { + mids = messagesService.getPhotos(vuid, before_mid); + } else if (!StringUtils.isEmpty(tag)) { + Tag tagObject = tagService.getTag(tag, false); + if (tagObject != null) { + mids = messagesService.getTag(tagObject.TID, vuid, before_mid, 20); + } else { + throw new HttpNotFoundException(); + } + } else { + mids = messagesService.getAll(vuid, before_mid); + } + } + return messagesService.getMessages(mids); + } + + @RequestMapping(value = "/thread", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public List doThreadGet(HttpServletRequest request) { + // TODO: use spring-security + String auth = request.getHeader("Authorization"); + int vuid = userService.getUIDByHttpAuth(auth); + if (vuid == -1) { + throw new HttpForbiddenException(); + } + if (vuid == 0) { + String hash = request.getParameter("hash"); + if (hash != null && hash.length() == 16) { + vuid = userService.getUIDbyHash(hash); + } + } + int mid = NumberUtils.toInt(request.getParameter("mid"), 0); + com.juick.Message msg = messagesService.getMessage(mid); + if (msg != null) { + if (!messagesService.canViewThread(mid, vuid)) { + throw new HttpForbiddenException(); + } else { + List replies = messagesService.getReplies(mid); + replies.add(0, msg); + return replies; + } + } + throw new HttpNotFoundException(); + } + + @RequestMapping(value = "/messages/recommended", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public List doGetRecommended(HttpServletRequest request) { + // TODO: use spring-security + String auth = request.getHeader("Authorization"); + int vuid = userService.getUIDByHttpAuth(auth); + if (vuid == -1) { + throw new HttpForbiddenException(); + } + if (vuid == 0) { + String hash = request.getParameter("hash"); + if (hash != null && hash.length() == 16) { + vuid = userService.getUIDbyHash(hash); + } + } + if (vuid == 0) { + throw new HttpForbiddenException(); + } + int before_mid = NumberUtils.toInt(request.getParameter("before_mid"), 0); + + List mids = messagesService.getUserRecommendations(vuid, before_mid); + if (mids != null && !mids.isEmpty()) { + List msgs = messagesService.getMessages(mids); + if (msgs != null && !msgs.isEmpty()) { + return msgs; + } else { + throw new HttpForbiddenException(); + } + } + throw new HttpNotFoundException(); + } + + @RequestMapping(value = "/messages/set_privacy", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @ResponseBody + public Status doSetPrivacy(HttpServletRequest request) { + // TODO: use spring-security + String auth = request.getHeader("Authorization"); + int vuid = userService.getUIDByHttpAuth(auth); + if (vuid == -1) { + throw new HttpForbiddenException(); + } + if (vuid == 0) { + String hash = request.getParameter("hash"); + if (hash != null && hash.length() == 16) { + vuid = userService.getUIDbyHash(hash); + } + } + if (vuid == 0) { + throw new HttpForbiddenException(); + } + int mid = NumberUtils.toInt(request.getParameter("mid"), 0); + com.juick.User user = messagesService.getMessageAuthor(mid); + if (user != null && user.getUid() == vuid && messagesService.setMessagePrivacy(mid)) { + return new Status("ok"); + } else { + throw new HttpBadRequestException(); + } + } + + @RequestMapping(value = "/messages/set_popular", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public Status doSetPopular(HttpServletRequest request) { + int mid = NumberUtils.toInt(request.getParameter("mid"), 0); + int popular = NumberUtils.toInt(request.getParameter("popular"), 0); + + if (mid > 0) { + boolean ret = messagesService.setMessagePopular(mid, popular); + + if (ret && popular == 2) { + try { + com.juick.Message m = messagesService.getMessage(mid); + if (m != null) { + Message msg = new Message(); + msg.setFrom(Jid.of("juick@juick.com")); + msg.setTo(Jid.of("crosspost.juick.com")); + m.setUser(userService.getUserByUID(11574).get()); + msg.addExtension(m); + + msg.setTo(Jid.of("twitter@crosspost.juick.com")); + apiServer.getXmpp().send(msg); + msg.setTo(Jid.of("fb@crosspost.juick.com")); + apiServer.getXmpp().send(msg); + msg.setTo(Jid.of("vk@crosspost.juick.com")); + apiServer.getXmpp().send(msg); + } else { + throw new Exception("Message not found"); + } + } catch (Exception e) { + logger.error("SETPOPULAR ERROR", e); + } + } + return new Status("ok"); + } + throw new HttpBadRequestException(); + } +} -- cgit v1.2.3