ref: master
certsign/certsign.groovy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import javax.annotation.security.RunAs import javax.servlet.http.* import org.springframework.web.multipart.* import java.nio.file.* import java.nio.charset.* @Controller class CertSigner { public static final String DATADIR = "/tmp/data/"; public static final String IRON_HOME = System.getProperty("user.home") + "/.iron"; @RequestMapping("/certsign/{name}") @ResponseBody String home(@PathVariable String name) { return "Hello "+name; } @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) @ResponseBody public String submit(@RequestParam("file") MultipartFile file, ModelMap modelMap) { modelMap.addAttribute("file", file); convert(file); return "fileUploadView"; } @RequestMapping(value = "/upload/{servicename}/{clientname}", method = RequestMethod.POST) @ResponseBody public String submitWithParam( @RequestParam("file") MultipartFile file, @PathVariable("servicename") String servicename, @PathVariable("clientname") String clientname, HttpServletRequest request, ModelMap modelMap) { modelMap.addAttribute("file", file); convert(file, clientname+".csr"); String ip = request.getRemoteAddr(); //ip --> client mapping possible here String cmd = "iron certificate sign "+servicename+" "+DATADIR+clientname+".csr"; cmd.execute(); String certPath = IRON_HOME + "/"+ servicename + "/certs/" + clientname + "/" + clientname + ".crt"; File certFile = new File(certPath); byte[] encoded = Files.readAllBytes(Paths.get(certPath)); String certContent = new String(encoded, StandardCharsets.UTF_8); return certContent; } public static File convert(MultipartFile file) { String savedName = file.getOriginalFilename(); return convert(file, savedName); } public static File convert(MultipartFile file, String savedName) { File convFile = new File(DATADIR + savedName); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); return convFile; } } |