github.com/aiven/aiven-go-client@v1.36.0/clickhouse_user.go (about)

     1  package aiven
     2  
     3  import "fmt"
     4  
     5  type (
     6  	// ClickhouseUserHandler aiven go-client handler for Clickhouse Users
     7  	ClickhouseUserHandler struct {
     8  		client *Client
     9  	}
    10  
    11  	// ClickhouseUserRequest Aiven API request
    12  	// https://api.aiven.io/v1/project/<project>/service/<service_name>/clickhouse/user
    13  	ClickhouseUserRequest struct {
    14  		Name string `json:"name"`
    15  	}
    16  
    17  	// ListClickhouseUserResponse Aiven API response
    18  	ListClickhouseUserResponse struct {
    19  		APIResponse
    20  		Users []ClickhouseUser `json:"users"`
    21  	}
    22  
    23  	// ClickhouseUserResponse Aiven API response
    24  	ClickhouseUserResponse struct {
    25  		APIResponse
    26  		User ClickhouseUser `json:"user"`
    27  	}
    28  
    29  	ClickhouseUser struct {
    30  		Name       string                    `json:"name"`
    31  		Password   string                    `json:"password"`
    32  		Required   bool                      `json:"required,omitempty"`
    33  		UUID       string                    `json:"uuid,omitempty"`
    34  		Roles      []ClickhouseUserRole      `json:"roles,omitempty"`
    35  		Privileges []ClickhouseUserPrivilege `json:"privileges,omitempty"`
    36  	}
    37  
    38  	ClickhouseUserPrivilege struct {
    39  		AccessType      string `json:"access_type"`
    40  		Column          string `json:"column,omitempty"`
    41  		Database        string `json:"database,omitempty"`
    42  		Table           string `json:"table,omitempty"`
    43  		GrantOption     bool   `json:"grant_option"`
    44  		IsPartialRevoke bool   `json:"is_partial_revoke"`
    45  	}
    46  
    47  	ClickhouseUserRole struct {
    48  		Name            string `json:"name"`
    49  		UUID            string `json:"uuid"`
    50  		IsDefault       bool   `json:"is_default"`
    51  		WithAdminOption bool   `json:"with_admin_option"`
    52  	}
    53  )
    54  
    55  // Create creates a ClickHouse job
    56  func (h *ClickhouseUserHandler) Create(project, service, name string) (*ClickhouseUserResponse, error) {
    57  	path := buildPath("project", project, "service", service, "clickhouse", "user")
    58  	bts, err := h.client.doPostRequest(path, ClickhouseUserRequest{
    59  		Name: name,
    60  	})
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	var r ClickhouseUserResponse
    66  	errR := checkAPIResponse(bts, &r)
    67  
    68  	return &r, errR
    69  }
    70  
    71  // List gets a list of ClickHouse user for a service
    72  func (h *ClickhouseUserHandler) List(project, service string) (*ListClickhouseUserResponse, error) {
    73  	path := buildPath("project", project, "service", service, "clickhouse", "user")
    74  	bts, err := h.client.doGetRequest(path, nil)
    75  	if err != nil {
    76  		return nil, err
    77  	}
    78  
    79  	var r ListClickhouseUserResponse
    80  	errR := checkAPIResponse(bts, &r)
    81  
    82  	return &r, errR
    83  }
    84  
    85  // Get gets a ClickHouse user
    86  func (h *ClickhouseUserHandler) Get(project, service, uuid string) (*ClickhouseUser, error) {
    87  	l, err := h.List(project, service)
    88  	if err != nil {
    89  		return nil, err
    90  	}
    91  
    92  	for _, u := range l.Users {
    93  		if u.UUID == uuid {
    94  			return &u, nil
    95  		}
    96  	}
    97  
    98  	return nil, Error{
    99  		Message: fmt.Sprintf("clickhouse user not found by UUID: %s for a service: %s", uuid, service),
   100  		Status:  404,
   101  	}
   102  }
   103  
   104  // Delete deletes a ClickHouse user
   105  func (h *ClickhouseUserHandler) Delete(project, service, uuid string) error {
   106  	path := buildPath("project", project, "service", service, "clickhouse", "user", uuid)
   107  	bts, err := h.client.doDeleteRequest(path, nil)
   108  	if err != nil {
   109  		return err
   110  	}
   111  
   112  	return checkAPIResponse(bts, nil)
   113  }
   114  
   115  func (h *ClickhouseUserHandler) ResetPassword(project, service, uuid, password string) (string, error) {
   116  	path := buildPath("project", project, "service", service, "clickhouse", "user", uuid, "password")
   117  
   118  	type PassRequest struct {
   119  		Password string `json:"password"`
   120  	}
   121  
   122  	bts, err := h.client.doPutRequest(path, PassRequest{
   123  		Password: password,
   124  	})
   125  	if err != nil {
   126  		return "", err
   127  	}
   128  
   129  	type PassResponse struct {
   130  		APIResponse
   131  		Password string `json:"password"`
   132  	}
   133  
   134  	var r PassResponse
   135  	errR := checkAPIResponse(bts, &r)
   136  
   137  	return r.Password, errR
   138  }