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 public class HelpController { @Inject UserService userService; @RequestMapping({"/help", "/help/{lang}", "/help/{lang}/{page}"}) protected String doGetHelp( Principal principal, @PathVariable("lang") Optional lang, @PathVariable("page") Optional 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"; } }