wocao
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user