159 lines
4.7 KiB
Go
159 lines
4.7 KiB
Go
package gitctl
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
|
|
"connectrpc.com/connect"
|
|
"google.golang.org/protobuf/types/known/emptypb"
|
|
|
|
v1 "simplegit/gitrpc/v1"
|
|
"simplegit/gitrpc/v1/v1connect"
|
|
)
|
|
|
|
type manageClient struct {
|
|
c v1connect.ManageServiceClient
|
|
baseURL string
|
|
http *http.Client
|
|
}
|
|
|
|
func newManageClient(baseURL string) *manageClient {
|
|
return &manageClient{
|
|
c: v1connect.NewManageServiceClient(&http.Client{Timeout: 15 * time.Second}, baseURL),
|
|
baseURL: baseURL,
|
|
http: &http.Client{Timeout: 15 * time.Second},
|
|
}
|
|
}
|
|
|
|
func (m *manageClient) ping() bool {
|
|
cli := &http.Client{Timeout: 2 * time.Second}
|
|
resp, err := cli.Get(m.baseURL + "/")
|
|
if err != nil {
|
|
return false
|
|
}
|
|
_ = resp.Body.Close()
|
|
return true
|
|
}
|
|
|
|
func errText(err error) string {
|
|
if err == nil {
|
|
return ""
|
|
}
|
|
code := connect.CodeOf(err)
|
|
if code == connect.CodeUnknown {
|
|
return err.Error()
|
|
}
|
|
return fmt.Sprintf("[%s] %v", code, err)
|
|
}
|
|
|
|
func (m *manageClient) Ctrl(ctx context.Context, op string, args ...string) ([]byte, error) {
|
|
resp, err := m.c.Ctrl(ctx, connect.NewRequest(&v1.CtrlRequest{Op: op, Args: args}))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Msg.Result, nil
|
|
}
|
|
|
|
func (m *manageClient) UpsertRepo(ctx context.Context, ns, name string, isPrivate bool) error {
|
|
_, err := m.c.UpsertRepo(ctx, connect.NewRequest(&v1.UpsertRepoRequest{Ns: ns, Name: name, IsPrivate: isPrivate}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) CreateNS(ctx context.Context, ns string) error {
|
|
_, err := m.c.CreateNS(ctx, connect.NewRequest(&v1.CreateNSRequest{Ns: ns}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) DeleteNS(ctx context.Context, ns string) error {
|
|
_, err := m.c.DeleteNS(ctx, connect.NewRequest(&v1.DeleteNSRequest{Ns: ns}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) ExistRepo(ctx context.Context, ns, name string) (bool, error) {
|
|
_, err := m.c.ExistRepo(ctx, connect.NewRequest(&v1.ExistRepoRequest{Ns: ns, Name: name}))
|
|
if err != nil {
|
|
if connect.CodeOf(err) == connect.CodeNotFound {
|
|
return false, nil
|
|
}
|
|
return false, err
|
|
}
|
|
return true, nil
|
|
}
|
|
|
|
func (m *manageClient) DeleteRepo(ctx context.Context, ns, name string) error {
|
|
_, err := m.c.DeleteRepo(ctx, connect.NewRequest(&v1.DeleteRepoRequest{Ns: ns, Name: name}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) MoveRepo(ctx context.Context, src, dst string) error {
|
|
_, err := m.c.MoveRepo(ctx, connect.NewRequest(&v1.MoveRepoRequest{Src: src, Dst: dst}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) MoveNS(ctx context.Context, src, dst string) error {
|
|
_, err := m.c.MoveNS(ctx, connect.NewRequest(&v1.MoveNSRequest{Src: src, Dst: dst}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) UserPasswordUpsert(ctx context.Context, ns, password string) error {
|
|
_, err := m.c.UserPasswordUpsert(ctx, connect.NewRequest(&v1.UserPasswordUpsertRequest{Ns: ns, Password: password}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) UserDelete(ctx context.Context, ns string) error {
|
|
_, err := m.c.UserDelete(ctx, connect.NewRequest(&v1.UserDeleteRequest{Ns: ns}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) ACLUpsertSSHKeyOnNS(ctx context.Context, ns, key, perm string) (int64, error) {
|
|
resp, err := m.c.ACLUpsertSSHKeyOnNS(ctx, connect.NewRequest(&v1.ACLUpsertSSHKeyOnNSRequest{Ns: ns, Key: key, Perm: perm}))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return resp.Msg.AclId, nil
|
|
}
|
|
|
|
func (m *manageClient) ACLUpsertPATOnNS(ctx context.Context, ns, pat, perm string) (int64, error) {
|
|
resp, err := m.c.ACLUpsertPATOnNS(ctx, connect.NewRequest(&v1.ACLUpsertPATOnNSRequest{Ns: ns, Pat: pat, Perm: perm}))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return resp.Msg.AclId, nil
|
|
}
|
|
|
|
func (m *manageClient) ACLUpsertSSHKeyOnRepo(ctx context.Context, reponame, key, perm string) (int64, error) {
|
|
resp, err := m.c.ACLUpsertSSHKeyOnRepo(ctx, connect.NewRequest(&v1.ACLUpsertSSHKeyOnRepoRequest{Reponame: reponame, Key: key, Perm: perm}))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return resp.Msg.AclId, nil
|
|
}
|
|
|
|
func (m *manageClient) ACLUpsertPATOnRepo(ctx context.Context, reponame, pat, perm string) (int64, error) {
|
|
resp, err := m.c.ACLUpsertPATOnRepo(ctx, connect.NewRequest(&v1.ACLUpsertPATOnRepoRequest{Reponame: reponame, Pat: pat, Perm: perm}))
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return resp.Msg.AclId, nil
|
|
}
|
|
|
|
func (m *manageClient) ACLDelete(ctx context.Context, id int64) error {
|
|
_, err := m.c.ACLDelete(ctx, connect.NewRequest(&v1.ACLDeleteRequest{AclId: id}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) ACLSetPerm(ctx context.Context, id int64, perm string) error {
|
|
_, err := m.c.ACLSetPerm(ctx, connect.NewRequest(&v1.ACLSetPermRequest{AclId: id, Perm: perm}))
|
|
return err
|
|
}
|
|
|
|
func (m *manageClient) Status(ctx context.Context) (*v1.StatusResponse, error) {
|
|
resp, err := m.c.Status(ctx, connect.NewRequest(&emptypb.Empty{}))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Msg, nil
|
|
}
|