maven依赖
org.gitlab
java-gitlab-api
4.1.1
org.slf4j
slf4j-api
org.jsoup
jsoup
1.10.2
封装工具类
package cn.sdu.weblab.util;
import cn.sdu.weblab.entity.User;
import cn.sdu.weblab.entity.pojo.Project;
import org.gitlab.api.GitlabAPI;
import org.gitlab.api.models.CreateUserRequest;
import org.gitlab.api.models.GitlabProject;
import org.gitlab.api.models.GitlabUser;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import java.util.Map;
public class GitlabUtil {
static String ROOT_TOKEN = null;
static GitlabAPI gitlab = null;
static {
try {
ROOT_TOKEN = createPrivateToken("http", "XXXXXX", "8929", "XXXXX", "XXXXXXXXX", "weblab", "2022-07-07");
} catch (Exception e) {
e.printStackTrace();
}
gitlab = GitlabAPI.connect("http://XXXXXXXX/", ROOT_TOKEN);
}
public static String createPrivateToken(String protocol, String host, String port, String username, String password, String tokenName, String expireDate) throws Exception {
StringBuffer sb = new StringBuffer();
sb.append(protocol);
sb.append("://");
sb.append(host);
sb.append(":");
sb.append(port);
String baseLocation = sb.toString();
// 登录页面
String loginHtml = baseLocation + "/users/sign_in";
Connection loginHtmlConn = Jsoup.connect(loginHtml);
Connection.Response loginHtmlRes = loginHtmlConn.execute();
Document loginHtmlResDoc = Jsoup.parseBodyFragment(loginHtmlRes.body());
// 从网页中取到authentication
String auth = loginHtmlResDoc.getElementById("new_user")
.select("input")
.get(0)
.attr("value");
// 拿到第一个cookie 登录用
String _gitlab_session = loginHtmlRes.cookie("_gitlab_session");
// 开始登录
String loginApi = baseLocation + "/users/sign_in";
Connection loginApiConn = Jsoup.connect(loginApi);
// 设计请求参数
loginApiConn.cookie("_gitlab_session", _gitlab_session);
loginApiConn.data("user[login]", username);
loginApiConn.data("user[password]", password);
loginApiConn.data("user[remember_me]", "0");
loginApiConn.data("authenticity_token", auth);
// 使用post请求
loginApiConn.method(Connection.Method.POST);
Connection.Response loginApiRes = loginApiConn.execute();
//得到登录状态的cookie
Map loginStatusCookie = loginApiRes.cookies();
// 开始获取token
String accessTokenHtml = baseLocation + "/-/profile/personal_access_tokens";
Connection tokenHtmlConn = Jsoup.connect(accessTokenHtml);
//设置登录状态的cookie
tokenHtmlConn.cookies(loginStatusCookie);
// 从网页中取出authentication
Document accessTokenHtmlDoc = tokenHtmlConn.get();
String authenticity_token = accessTokenHtmlDoc
.getElementById("new_personal_access_token")
.select("input")
.get(0)
.attr("value");
//创建token并获取
String accessTokenCreateApi = baseLocation + "/-/profile/personal_access_tokens";
Connection accessTokenCreateApiConn = Jsoup.connect(accessTokenCreateApi);
accessTokenCreateApiConn.cookies(loginStatusCookie);
//设置token参数
//token的名字
accessTokenCreateApiConn.data("personal_access_token[name]", tokenName);
// token过时间
accessTokenCreateApiConn.data("personal_access_token[expires_at]", expireDate);
// token有哪些权限
accessTokenCreateApiConn.data("personal_access_token[scopes][]", "api");
accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_api");
accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_user");
accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_repository");
accessTokenCreateApiConn.data("personal_access_token[scopes][]", "write_repository");
accessTokenCreateApiConn.data("authenticity_token", authenticity_token);
// 设置请求为post
accessTokenCreateApiConn.method(Connection.Method.POST);
Connection.Response accessTokenCreateApiRes = accessTokenCreateApiConn.execute();
Document accessTokenCreateApiDoc = accessTokenCreateApiRes.parse();
String token = accessTokenCreateApiDoc
.getElementById("created-personal-access-token")
.attr("value");
System.out.println(token);
return token;
}
public static String getRootToken() {
return ROOT_TOKEN;
}
public static GitlabUser createGitlabUser(User user) throws IOException {
CreateUserRequest info = new CreateUserRequest(user.getUsername(), user.getUsername(), user.getEmail());
// 设置密码
info.setPassword(user.getPassword());
// 跳过邮箱验证
info.setSkipConfirmation(true);
GitlabUser gitlabUser = gitlab.createUser(info);
return gitlabUser;
}
public static GitlabProject createGitlabProject(Project project) throws IOException {
GitlabProject userProject = gitlab.createUserProject(project.getGitlabUserId(), project.getName(), project.getDescription(), "master", null, null, null, null, null, null, null);
return userProject;
}
public static void deleteGitlabProject(Integer projectId) throws IOException {
gitlab.deleteProject(projectId);
}
}