gitlab-runner-gateway/src/main/java/tk/antoine_roux/wiki/ControllerHandlers.java

109 lines
3.6 KiB
Java
Raw Normal View History

package tk.antoine_roux.wiki;
2020-09-15 23:04:29 +00:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
2020-09-15 23:04:29 +00:00
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import tk.antoine_roux.wiki.annotation.ApiPrefix;
import tk.antoine_roux.wiki.annotation.ApiVersion;
2020-09-15 23:04:29 +00:00
import tk.antoine_roux.wiki.configuration.Exception.DeleteRunnerException;
2020-09-16 22:37:33 +00:00
import tk.antoine_roux.wiki.model.HookEvent;
2020-09-15 23:04:29 +00:00
import tk.antoine_roux.wiki.model.Runner;
import tk.antoine_roux.wiki.model.request.AddRunner;
2020-09-16 22:37:33 +00:00
import tk.antoine_roux.wiki.model.request.JobRequest;
import tk.antoine_roux.wiki.model.request.TokenRunner;
import tk.antoine_roux.wiki.model.response.RegisterRunnerResponse;
2020-09-15 23:04:29 +00:00
import tk.antoine_roux.wiki.utilitary.Boolean;
2020-09-15 23:04:29 +00:00
import java.lang.invoke.MethodHandles;
import java.util.Map;
import java.util.TreeMap;
import static tk.antoine_roux.wiki.Constant.*;
@RestController
@ApiPrefix(API_PREFIX)
public class ControllerHandlers {
2020-09-15 23:04:29 +00:00
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final RunnerRegistrar runnerRegistrar;
@Autowired
public ControllerHandlers(RunnerRegistrar runnerRegistrar) {
this.runnerRegistrar = runnerRegistrar;
}
/**
* hello test endpoint
*
* @return
*/
@ResponseBody
@GetMapping("/info")
2020-09-15 23:04:29 +00:00
public ResponseEntity<TreeMap<String, String>> info() {
return ResponseEntity.ok(
// sort attribute by key name
new TreeMap<>(
Map.of(
"api-version", VERSION_PREFIX + API_VERSION,
"api-name", API_NAME
)
)
);
}
2020-09-15 23:04:29 +00:00
/**
* add register new runners
*
* @param body
* @return
*/
@ResponseBody
@ApiVersion({API_VERSION})
@PostMapping("/runners")
public ResponseEntity<RegisterRunnerResponse> addRunner(@RequestBody AddRunner body) {
2020-09-15 23:04:29 +00:00
logger.debug("Receive register runner request " + body);
Runner createdRunner = this.runnerRegistrar.addRunner(body);
RegisterRunnerResponse response = createdRunner.toRegisterResponse();
2020-09-15 23:04:29 +00:00
logger.debug("Response register runner " + response);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
@ApiVersion(API_VERSION)
@DeleteMapping("/runners")
public ResponseEntity<Void> deleteRunner(@RequestBody TokenRunner body) throws Exception {
2020-09-15 23:04:29 +00:00
logger.debug("Receive delete runner request " + body);
Boolean.trueOrElseThrow(this.runnerRegistrar.removeRunnerByRegistrationToken(body), DeleteRunnerException::new);
logger.debug("Successfully delete runner ");
return ResponseEntity.noContent().build();
}
@ApiVersion(API_VERSION)
@PostMapping("/runners/verify")
public ResponseEntity<Void> runnerExist(@RequestBody TokenRunner body) {
boolean isValid = this.runnerRegistrar.checkRunner(body);
if (isValid) {
return ResponseEntity.ok().build();
} else {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
}
2020-09-16 22:37:33 +00:00
@ApiVersion(API_VERSION)
@PostMapping("/jobs/request")
public ResponseEntity<Void> jobRequest(@RequestBody JobRequest jobRequest) {
return ResponseEntity.ok().build();
}
@ApiVersion(API_VERSION)
@PostMapping("/webhook")
public ResponseEntity<Void> webhook(@RequestBody HookEvent webHookData) {
return ResponseEntity.ok().build();
}
}