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 }