@RequestMapping("/{userPseudo}/validateStep4")
  public ResponseEntity<Void> validateStep4(
      @PathVariable("userPseudo") String userPseudo,
      @RequestParam("userHostAndPort") String userHostAndPort) {
    log.info("Validation step 4 for player {} with data {}", userPseudo, userHostAndPort);

    ResponseEntity<Void> result = new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);

    String url = "http://" + userHostAndPort + "/zen/env";

    ResponseEntity<String> responseEntityShouldFail =
        restTemplate.exchange(
            url, HttpMethod.GET, new HttpEntity<>(new HttpHeaders()), String.class);

    byte[] encodedAuth = Base64.encodeBase64("zenika:technozaure".getBytes());
    String authHeader = "Basic " + new String(encodedAuth);

    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.set("Authorization", authHeader);
    HttpEntity<String> entity = new HttpEntity<>(headers);

    ResponseEntity<String> responseEntityShouldSucceed =
        restTemplate.exchange(url, HttpMethod.GET, entity, String.class);

    if (responseEntityShouldFail.getStatusCode() != HttpStatus.OK
        && responseEntityShouldSucceed.getStatusCode() == HttpStatus.OK) {
      gameStepRepository.save(new GameStep(userPseudo, Step._4));
      result = new ResponseEntity<Void>(HttpStatus.OK);
      broadcastGameStatus();
    }

    return result;
  }
  @RequestMapping("/{userPseudo}/validateStep3")
  public ResponseEntity<Void> validateStep3(
      @PathVariable("userPseudo") String userPseudo, @RequestParam("secret") String secret) {
    log.info("Validation step 3 for player {} with data {}", userPseudo, secret);

    ResponseEntity<Void> result = new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);

    if (stepConfig.getStep3().equals(secret)) {
      gameStepRepository.save(new GameStep(userPseudo, Step._3));
      result = new ResponseEntity<Void>(HttpStatus.OK);
      broadcastGameStatus();
    }

    return result;
  }
  @RequestMapping("/{userPseudo}/validateStep5")
  public ResponseEntity<Void> validateStep5(
      @PathVariable("userPseudo") String userPseudo, @RequestParam("secret") String secret) {
    log.info("Validation step 5 for player {} with data {}", userPseudo, secret);

    ResponseEntity<Void> result = new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);

    if (environment.getProperty("git.commit.id.abbrev").equals(secret)) {
      gameStepRepository.save(new GameStep(userPseudo, Step._5));
      result = new ResponseEntity<Void>(HttpStatus.OK);
      broadcastGameStatus();
    }

    return result;
  }
  @RequestMapping("/{userPseudo}/validateStep1")
  public ResponseEntity<Void> validateStep1(
      @PathVariable("userPseudo") String userPseudo,
      @RequestParam("userHostAndPort") String userHostAndPort) {
    log.info("Validation step 1 for player {} with data {}", userPseudo, userHostAndPort);
    ResponseEntity<Void> result = new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);

    ResponseEntity<String> responseEntity =
        restTemplate.getForEntity("http://" + userHostAndPort + "/zen/health", String.class);

    if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
      gameStepRepository.save(new GameStep(userPseudo, Step._1));
      result = new ResponseEntity<Void>(HttpStatus.OK);
      broadcastGameStatus();
    }

    broadcastGameStatus();
    return result;
  }