iron.git

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;
    }
}