新增gitea部署
This commit is contained in:
parent
58ae758ece
commit
8a75441642
|
@ -7,10 +7,13 @@ import org.springframework.beans.factory.annotation.Value;
|
|||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
|
@ -51,6 +54,41 @@ public class DeployController {
|
|||
return ResponseEntity.ok("部署流程已启动");
|
||||
}
|
||||
|
||||
@ApiOperation(value = "gitea自动部署", httpMethod = "POST")
|
||||
@PostMapping("/gitea-webhook")
|
||||
public ResponseEntity<String> handleWebhook(@RequestHeader("X-Gitea-Signature") String signature,
|
||||
@RequestBody(required = false) byte[] body) {
|
||||
|
||||
// 1. 签名校验
|
||||
if (!validSignature(body, signature)) {
|
||||
throw new RuntimeException("签名错误");
|
||||
}
|
||||
|
||||
// 2. 启动部署流程
|
||||
startDeployment();
|
||||
|
||||
return ResponseEntity.ok("部署流程已启动");
|
||||
}
|
||||
|
||||
private boolean validSignature(byte[] body, String sigHeader) {
|
||||
if (sigHeader == null) return false;
|
||||
try {
|
||||
Mac mac = Mac.getInstance("HmacSHA256");
|
||||
mac.init(new SecretKeySpec(webhookSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
|
||||
byte[] hash = mac.doFinal(body);
|
||||
String computed = "sha256=" + bytesToHex(hash);
|
||||
return computed.equalsIgnoreCase(sigHeader);
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private String bytesToHex(byte[] bytes) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (byte b : bytes) sb.append(String.format("%02x", b));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询自动部署状态", httpMethod = "GET")
|
||||
@GetMapping("/deployment-status")
|
||||
public ResponseEntity<String> getDeploymentStatus() {
|
||||
|
|
Loading…
Reference in New Issue