View Javadoc
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  }