diff options
author | Vitaly Takmazov | 2018-09-27 22:56:43 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2018-09-27 22:56:43 +0300 |
commit | 563966d66e812829779ff7184ff9b5d372e4b3aa (patch) | |
tree | 464d6eb600fa1af51631a5557d369a1a3b5665d7 | |
parent | ed9f1256cf2bfd93b749b6e2ef22114d7fcd89bc (diff) |
scripts: pm over api
4 files changed, 30 insertions, 92 deletions
diff --git a/juick-server/src/main/assets/scripts.js b/juick-server/src/main/assets/scripts.js index 5a5fad6b..2f86ea69 100644 --- a/juick-server/src/main/assets/scripts.js +++ b/juick-server/src/main/assets/scripts.js @@ -701,6 +701,32 @@ ready(function () { }); }); } + var pmmsg = document.getElementById('pmmsg'); + if (pmmsg) { + pmmsg.addEventListener('submit', e => { + e.preventDefault(); + let formData = new FormData(pmmsg); + fetch('/api/pm' + '?hash=' + document.getElementById('body').getAttribute('data-hash'), { + method: 'POST', + body: formData, + credentials: 'omit' + }).then(response => { + if (response.ok) { + response.json().then(result => { + if (result.to) { + window.location = new URL('/pm/sent', window.location.href); + } else { + alert('Something went wrong :('); + } + }); + } else { + alert('Something went wrong :('); + } + }).catch(error => { + alert(error.message); + }); + }); + } document.querySelectorAll('.msg-menu').forEach(function (el) { el.addEventListener('click', function (e) { diff --git a/juick-server/src/main/java/com/juick/server/www/controllers/NewMessage.java b/juick-server/src/main/java/com/juick/server/www/controllers/NewMessage.java index 6fb13009..6b5938a5 100644 --- a/juick-server/src/main/java/com/juick/server/www/controllers/NewMessage.java +++ b/juick-server/src/main/java/com/juick/server/www/controllers/NewMessage.java @@ -16,39 +16,16 @@ */ package com.juick.server.www.controllers; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.juick.Message; -import com.juick.User; -import com.juick.model.AnonymousUser; -import com.juick.model.CommandResult; -import com.juick.server.util.*; -import com.juick.server.www.WebApp; -import com.juick.service.*; +import com.juick.server.util.UserUtils; +import com.juick.service.TagService; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.client.HttpClientErrorException; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.util.UriComponentsBuilder; import javax.inject.Inject; -import java.io.IOException; -import java.net.URI; -import java.net.URL; import java.util.stream.Collectors; /** @@ -59,32 +36,6 @@ public class NewMessage { @Inject private TagService tagService; - @Inject - private MessagesService messagesService; - @Inject - private UserService userService; - @Inject - private SubscriptionService subscriptionService; - @Inject - private CrosspostService crosspostService; - @Inject - private PMQueriesService pmQueriesService; - @Inject - private WebApp webApp; - @Inject - private ObjectMapper jsonMapper; - @Inject - private ImagesService imagesService; - @Value("${img_path:#{systemEnvironment['TEMP'] ?: '/tmp'}}") - private String imgDir; - @Value("${upload_tmp_dir:#{systemEnvironment['TEMP'] ?: '/tmp'}}") - private String tmpDir; - @Value("${api_url:http://localhost:8080}") - private String apiUrl; - private RestTemplate rest = new RestTemplate(); - - private static final Logger logger = LoggerFactory.getLogger(NewMessage.class); - @GetMapping("/post") protected String postAction(@RequestParam(required = false) String body, ModelMap model) { com.juick.User visitor = UserUtils.getCurrentUser(); @@ -105,43 +56,4 @@ public class NewMessage { .sorted((e1, e2) -> Integer.compare(e2.getUsageCount(), e1.getUsageCount())).map(t -> t.getTag().getName()).collect(Collectors.toList())); return "views/post"; } - @PostMapping("/pm/send") - public String doPostPM(@RequestParam(name = "uname", required = false) String unameParam, - @RequestParam String body) throws IOException { - com.juick.User visitor = UserUtils.getCurrentUser(); - if (visitor.isAnonymous() || visitor.isBanned()) { - throw new HttpForbiddenException(); - } - String uname = unameParam; - if (uname.startsWith("@")) { - uname = uname.substring(1); - } - User userTo = AnonymousUser.INSTANCE; - if (WebUtils.isUserName(uname)) { - userTo = userService.getUserByName(uname); - } - - if (userTo.isAnonymous() || body.length() > 10240) { - throw new HttpBadRequestException(); - } - - if (userService.isInBLAny(userTo.getUid(), visitor.getUid())) { - throw new HttpForbiddenException(); - } - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); - 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())); - URI postUri = UriComponentsBuilder.fromUriString(apiUrl).path("/api/post").build().toUri(); - ResponseEntity<CommandResult> result = rest.postForEntity( - postUri, - request, CommandResult.class); - logger.info("/pm: {}", jsonMapper.writeValueAsString(result.getBody())); - return "redirect:/pm/sent"; - - } } diff --git a/juick-server/src/main/resources/templates/views/pm_inbox.html b/juick-server/src/main/resources/templates/views/pm_inbox.html index d6a9b65f..58ba538d 100644 --- a/juick-server/src/main/resources/templates/views/pm_inbox.html +++ b/juick-server/src/main/resources/templates/views/pm_inbox.html @@ -16,7 +16,7 @@ </div> <div class="msg-txt">{{ msg | formatMessage }}</div> - <form action="/pm/send" method="POST" enctype="multipart/form-data"> + <form id="pmmsg"> <input type="hidden" name="uname" value="{{ msg.user.name }}"/> <div class="msg-comment"> <div class="ta-wrapper"> diff --git a/juick-server/src/main/resources/templates/views/pm_sent.html b/juick-server/src/main/resources/templates/views/pm_sent.html index bc42c4ab..6859cec7 100644 --- a/juick-server/src/main/resources/templates/views/pm_sent.html +++ b/juick-server/src/main/resources/templates/views/pm_sent.html @@ -1,6 +1,6 @@ {% extends "layouts/default" %} {% block content %} -<form action="/pm/send" method="POST" enctype="multipart/form-data"> +<form id="pmmsg"> <div class="newpm"> <div class="newpm-to">To: <input type="text" name="uname" placeholder="username" value="{{ uname }}"/></div> <div class="newpm-body"><textarea name="body" rows="2"></textarea></div> |