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 of : %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 of : %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 }