diff options
Diffstat (limited to 'juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java')
-rw-r--r-- | juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java b/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java index dad3ff9f..49e24c8c 100644 --- a/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java +++ b/juick-spring-www/src/main/java/com/juick/www/controllers/HelpController.java @@ -1,12 +1,68 @@ package com.juick.www.controllers; +import com.juick.User; +import com.juick.server.util.HttpNotFoundException; +import com.juick.service.UserService; +import com.juick.util.UserUtils; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import javax.inject.Inject; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.Principal; +import java.util.Optional; +import java.util.stream.Collectors; + /** * Created by aalexeev on 11/21/16. */ @Controller -@RequestMapping("/help") public class HelpController { + @Inject + UserService userService; + + @RequestMapping({"/help", "/help/{lang}", "/help/{lang}/{page}"}) + protected String doGetHelp( + Principal principal, + @PathVariable("lang") Optional<String> lang, + @PathVariable("page") Optional<String> page, + ModelMap model) throws IOException, URISyntaxException { + String name = UserUtils.getUsername(principal, null); + User visitor = userService.getUserByName(name); + + lang.ifPresent(l -> { + if (l.length() != 2 || !l.matches("^[a-z]+$")) { + throw new HttpNotFoundException(); + } + }); + if (!lang.isPresent()) { + lang = Optional.of("ru"); + } + + page.ifPresent(p -> { + if (!p.matches("^[a-zA-Z0-9\\-]*$") || p.equals("navigation") || p.equals("index")) { + throw new HttpNotFoundException(); + } + }); + if (!page.isPresent()) { + page = Optional.of("index"); + } + + String filePath = "help/" + lang.get() + "/" + page.get(); + String navigationPath = "help/" + lang.get() + "/navigation"; + + model.addAttribute("title", "Помощь"); + model.addAttribute("visitor", visitor); + model.addAttribute("help_nav", Files.readAllLines(Paths.get(new ClassPathResource(navigationPath).getURI())) + .stream().collect(Collectors.joining())); + model.addAttribute("help_data", Files.readAllLines(Paths.get(new ClassPathResource(filePath).getURI())) + .stream().collect(Collectors.joining())); + return "views/help"; + } } |