1 package civitas.bboard.server.controllers;
2
3 import java.math.BigInteger;
4 import java.security.PublicKey;
5
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Controller;
8 import org.springframework.web.bind.annotation.PostMapping;
9
10 import civitas.bboard.server.Board;
11 import civitas.bboard.server.BoardRepository;
12 import civitas.common.CommonConstants;
13 import civitas.crypto.algorithms.CreateFreshNonce;
14 import civitas.crypto.rsapublickey.ConvertPublicKeyToString;
15
16 @Controller
17 public class NewBoardController implements CommonConstants {
18
19 @Autowired
20 CreateFreshNonce createFreshNonce;
21
22 @Autowired
23 BoardRepository boardRepository;
24
25 @Autowired
26 ConvertPublicKeyToString convertPublicKeyToString;
27
28 @PostMapping("/boards/newBoard")
29 public String apply(final PublicKey key) {
30 String newBoardName;
31 do {
32 byte[] bs = createFreshNonce.apply(ELECTION_ID_LENGTH);
33 newBoardName = new BigInteger(bs).abs().toString(16);
34 } while (boardRepository.findById(newBoardName).isPresent());
35
36 String keyString = convertPublicKeyToString.apply(key);
37 boardRepository.save(new Board(newBoardName, keyString, true));
38 return newBoardName;
39 }
40 }