106 lines
2.8 KiB
Go
106 lines
2.8 KiB
Go
|
package client
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"github.com/sirupsen/logrus"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege/config"
|
||
|
)
|
||
|
|
||
|
type HubAdminClientDeps struct {
|
||
|
Logger *logrus.Logger
|
||
|
URLs *config.AdminMicroServiceURL
|
||
|
}
|
||
|
|
||
|
type HubAdminClient struct {
|
||
|
logger *logrus.Logger
|
||
|
urls *config.AdminMicroServiceURL
|
||
|
}
|
||
|
|
||
|
func NewHubAdminClient(deps *HubAdminClientDeps) *HubAdminClient {
|
||
|
return &HubAdminClient{
|
||
|
logger: deps.Logger,
|
||
|
urls: deps.URLs,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (receiver *HubAdminClient) GetPrivilege(ctx context.Context) ([]config.Privilege, error) {
|
||
|
hubAdminURL := receiver.urls.GetPrivilege
|
||
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, hubAdminURL, nil)
|
||
|
if err != nil {
|
||
|
receiver.logger.Errorf("failed to create GET request: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
response, err := http.DefaultClient.Do(req)
|
||
|
if err != nil {
|
||
|
receiver.logger.Errorf("failed to get privilege on <GetPrivilege> of <HubAdminClient>: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
defer response.Body.Close()
|
||
|
|
||
|
if response.StatusCode != http.StatusOK {
|
||
|
return nil, errors.New("unexpected status code")
|
||
|
}
|
||
|
|
||
|
var buffer bytes.Buffer
|
||
|
if _, err := io.Copy(&buffer, response.Body); err != nil {
|
||
|
receiver.logger.Errorf("failed to read response body: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var privileges []config.Privilege
|
||
|
if err := json.Unmarshal(buffer.Bytes(), &privileges); err != nil {
|
||
|
receiver.logger.Errorf("failed to unmarshal response body: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return privileges, nil
|
||
|
}
|
||
|
|
||
|
func (receiver *HubAdminClient) PostPrivilege(ctx context.Context, data []config.Privilege) ([]config.Privilege, error) {
|
||
|
postPrivilegeURL := receiver.urls.PostPrivilege
|
||
|
|
||
|
payload, err := json.Marshal(data)
|
||
|
if err != nil {
|
||
|
receiver.logger.Errorf("failed to marshal request body: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
req, err := http.NewRequestWithContext(ctx, http.MethodPost, postPrivilegeURL, bytes.NewBuffer(payload))
|
||
|
if err != nil {
|
||
|
receiver.logger.Errorf("failed to create POST request: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
req.Header.Set("Content-Type", "application/json")
|
||
|
|
||
|
response, err := http.DefaultClient.Do(req)
|
||
|
if err != nil {
|
||
|
receiver.logger.Errorf("failed to post privilege on <PostPrivilege> of <HubAdminClient>: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
defer response.Body.Close()
|
||
|
|
||
|
if response.StatusCode != http.StatusOK {
|
||
|
return nil, errors.New("unexpected status code")
|
||
|
}
|
||
|
|
||
|
var buffer bytes.Buffer
|
||
|
if _, err := io.Copy(&buffer, response.Body); err != nil {
|
||
|
receiver.logger.Errorf("failed to read response body: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var privileges []config.Privilege
|
||
|
if err := json.Unmarshal(buffer.Bytes(), &privileges); err != nil {
|
||
|
receiver.logger.Errorf("failed to unmarshal response body: %v", err)
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return privileges, nil
|
||
|
}
|