com.gitee.kooder.gitea.GiteaException: Gitea secret is missing
原因是,在新版本的gitea中已经不支持secret字段了,所以会报丢失,找不到字段
参考文档:Webhooks | Gitea Documentation

issue.png
看官方的git,最近更新已经是3年前了,所以只能自己动手修改了。
解决方案一
如果不追求严谨的话,完全可以把这一行验证给他干掉。
文件: kooder\gateway\src\main\java\com\gitee\kooder\webhook\GiteaSystemHookManager.java

image.png
对于强迫症的我,必然追求严谨
解决方案二
自己去补全新的验证方式,在上述gitea官网文档中验证方法写得很清楚,照葫芦画个瓢就行了。
主要修改的文件: gateway\src\main\java\com\gitee\kooder\webhook\GiteaSystemHookManager.java
主要修改该文件里面的checkSecretToken方法。
修改后的代码如下,仅供参考:
private static void checkSecretToken(String secretToken, String authorizationHeader, RoutingContext context) throws GiteaException {
String secret = context.getBodyAsJson().getString("secret");
if (Objects.isNull(secret)) {
// throw new GiteaException("Gitea secret is missing!");
String authorization = context.request().getHeader("Authorization");
if(Objects.isNull(authorization)){
if(!authorizationHeader.isEmpty()){
throw new GiteaException("Gitea authorization is missing!");
}
}else if(!authorization.equals(authorizationHeader)){
throw new GiteaException("Gitea authorization mismatch!");
}
String signatureEncrypt = "";
String signature = context.request().getHeader("X-Gitea-Signature");
if(Objects.isNull(signature) || signature.isEmpty()){
throw new GiteaException("Gitea secret is missing!");
}
try {
signatureEncrypt = HMACSHA256.encrypt(context.getBodyAsString(), secretToken);
} catch (InvalidKeyException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
if (!signature.equals(signatureEncrypt)) {
throw new GiteaException("Gitea secret mismatch!");
}
}else{
if (!secret.equals(secretToken)) {
throw new GiteaException("Gitea secret mismatch!");
}
}
}
由于设计到多个文件,就不一一列举了,修改后可正常使用的仓库地址: