mirror of
https://github.com/go-i2p/gitlab-to-gitea.git
synced 2025-07-13 12:54:34 -04:00
initial commit
This commit is contained in:
273
gitlab/client.go
Normal file
273
gitlab/client.go
Normal file
@ -0,0 +1,273 @@
|
||||
// client.go
|
||||
|
||||
// Package gitlab provides a client for interacting with the GitLab API
|
||||
package gitlab
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/xanzy/go-gitlab"
|
||||
)
|
||||
|
||||
// Client wraps the GitLab client for custom functionality
|
||||
type Client struct {
|
||||
client *gitlab.Client
|
||||
}
|
||||
|
||||
// NewClient creates a new GitLab client with the provided URL and token
|
||||
func NewClient(url, token string) (*Client, error) {
|
||||
client, err := gitlab.NewClient(token, gitlab.WithBaseURL(url))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create GitLab client: %w", err)
|
||||
}
|
||||
|
||||
return &Client{
|
||||
client: client,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetVersion retrieves the GitLab version
|
||||
func (c *Client) GetVersion() (string, error) {
|
||||
v, _, err := c.client.Version.GetVersion()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get GitLab version: %w", err)
|
||||
}
|
||||
return v.Version, nil
|
||||
}
|
||||
|
||||
// GetCurrentUser retrieves information about the current authenticated user
|
||||
func (c *Client) GetCurrentUser() (*gitlab.User, error) {
|
||||
user, _, err := c.client.Users.CurrentUser()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get current user: %w", err)
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// ListUsers returns all users in the GitLab instance
|
||||
func (c *Client) ListUsers() ([]*gitlab.User, error) {
|
||||
opts := &gitlab.ListUsersOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allUsers []*gitlab.User
|
||||
for {
|
||||
users, resp, err := c.client.Users.ListUsers(opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list users: %w", err)
|
||||
}
|
||||
allUsers = append(allUsers, users...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allUsers, nil
|
||||
}
|
||||
|
||||
// ListGroups returns all groups in the GitLab instance
|
||||
func (c *Client) ListGroups() ([]*gitlab.Group, error) {
|
||||
opts := &gitlab.ListGroupsOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allGroups []*gitlab.Group
|
||||
for {
|
||||
groups, resp, err := c.client.Groups.ListGroups(opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list groups: %w", err)
|
||||
}
|
||||
allGroups = append(allGroups, groups...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allGroups, nil
|
||||
}
|
||||
|
||||
// ListProjects returns all projects in the GitLab instance
|
||||
func (c *Client) ListProjects() ([]*gitlab.Project, error) {
|
||||
opts := &gitlab.ListProjectsOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allProjects []*gitlab.Project
|
||||
for {
|
||||
projects, resp, err := c.client.Projects.ListProjects(opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list projects: %w", err)
|
||||
}
|
||||
allProjects = append(allProjects, projects...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allProjects, nil
|
||||
}
|
||||
|
||||
// GetProjectMembers returns all members of a project
|
||||
func (c *Client) GetProjectMembers(projectID int) ([]*gitlab.ProjectMember, error) {
|
||||
opts := &gitlab.ListProjectMembersOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allMembers []*gitlab.ProjectMember
|
||||
for {
|
||||
members, resp, err := c.client.ProjectMembers.ListProjectMembers(projectID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list project members: %w", err)
|
||||
}
|
||||
allMembers = append(allMembers, members...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allMembers, nil
|
||||
}
|
||||
|
||||
// GetProjectLabels returns all labels of a project
|
||||
func (c *Client) GetProjectLabels(projectID int) ([]*gitlab.Label, error) {
|
||||
opts := &gitlab.ListLabelsOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allLabels []*gitlab.Label
|
||||
for {
|
||||
labels, resp, err := c.client.Labels.ListLabels(projectID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list project labels: %w", err)
|
||||
}
|
||||
allLabels = append(allLabels, labels...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allLabels, nil
|
||||
}
|
||||
|
||||
// GetProjectMilestones returns all milestones of a project
|
||||
func (c *Client) GetProjectMilestones(projectID int) ([]*gitlab.Milestone, error) {
|
||||
opts := &gitlab.ListMilestonesOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allMilestones []*gitlab.Milestone
|
||||
for {
|
||||
milestones, resp, err := c.client.Milestones.ListMilestones(projectID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list project milestones: %w", err)
|
||||
}
|
||||
allMilestones = append(allMilestones, milestones...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allMilestones, nil
|
||||
}
|
||||
|
||||
// GetProjectIssues returns all issues of a project
|
||||
func (c *Client) GetProjectIssues(projectID int) ([]*gitlab.Issue, error) {
|
||||
opts := &gitlab.ListProjectIssuesOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allIssues []*gitlab.Issue
|
||||
for {
|
||||
issues, resp, err := c.client.Issues.ListProjectIssues(projectID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list project issues: %w", err)
|
||||
}
|
||||
allIssues = append(allIssues, issues...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allIssues, nil
|
||||
}
|
||||
|
||||
// GetIssueNotes returns all notes of an issue
|
||||
func (c *Client) GetIssueNotes(projectID, issueID int) ([]*gitlab.Note, error) {
|
||||
opts := &gitlab.ListIssueNotesOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allNotes []*gitlab.Note
|
||||
for {
|
||||
notes, resp, err := c.client.Notes.ListIssueNotes(projectID, issueID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list issue notes: %w", err)
|
||||
}
|
||||
allNotes = append(allNotes, notes...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allNotes, nil
|
||||
}
|
||||
|
||||
// GetGroupMembers returns all members of a group
|
||||
func (c *Client) GetGroupMembers(groupID int) ([]*gitlab.GroupMember, error) {
|
||||
opts := &gitlab.ListGroupMembersOptions{
|
||||
ListOptions: gitlab.ListOptions{
|
||||
PerPage: 100,
|
||||
},
|
||||
}
|
||||
|
||||
var allMembers []*gitlab.GroupMember
|
||||
for {
|
||||
members, resp, err := c.client.Groups.ListGroupMembers(groupID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list group members: %w", err)
|
||||
}
|
||||
allMembers = append(allMembers, members...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allMembers, nil
|
||||
}
|
||||
|
||||
// GetUserKeys returns all SSH keys of a user
|
||||
func (c *Client) GetUserKeys(userID int) ([]*gitlab.SSHKey, error) {
|
||||
opts := &gitlab.ListSSHKeysForUserOptions{
|
||||
PerPage: 100,
|
||||
}
|
||||
|
||||
var allKeys []*gitlab.SSHKey
|
||||
for {
|
||||
keys, resp, err := c.client.Users.ListSSHKeysForUser(userID, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list user SSH keys: %w", err)
|
||||
}
|
||||
allKeys = append(allKeys, keys...)
|
||||
if resp.NextPage == 0 {
|
||||
break
|
||||
}
|
||||
opts.Page = resp.NextPage
|
||||
}
|
||||
return allKeys, nil
|
||||
}
|
Reference in New Issue
Block a user