Skip to content

Commit 9d4eaa7

Browse files
committed
Update system user client funcs to use fw diags
1 parent 284a2e2 commit 9d4eaa7

File tree

3 files changed

+63
-22
lines changed

3 files changed

+63
-22
lines changed

internal/clients/elasticsearch/security.go

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,60 +89,88 @@ func DeleteUser(ctx context.Context, apiClient *clients.ApiClient, username stri
8989
return diags
9090
}
9191

92-
func EnableUser(ctx context.Context, apiClient *clients.ApiClient, username string) diag.Diagnostics {
93-
var diags diag.Diagnostics
92+
func EnableUser(ctx context.Context, apiClient *clients.ApiClient, username string) fwdiag.Diagnostics {
93+
var diags fwdiag.Diagnostics
9494
esClient, err := apiClient.GetESClient()
9595
if err != nil {
96-
return diag.FromErr(err)
96+
diags.AddError(
97+
"Unable to get Elasticsearch client",
98+
err.Error(),
99+
)
100+
return diags
97101
}
98102
res, err := esClient.Security.EnableUser(username, esClient.Security.EnableUser.WithContext(ctx))
99103
if err != nil {
100-
return diag.FromErr(err)
104+
diags.AddError(
105+
"Unable to enable system user",
106+
err.Error(),
107+
)
108+
return diags
101109
}
102110
defer res.Body.Close()
103-
if diags := utils.CheckError(res, "Unable to enable system user"); diags.HasError() {
111+
if diags := utils.CheckErrorFromFW(res, "Unable to enable system user"); diags.HasError() {
104112
return diags
105113
}
106114
return diags
107115
}
108116

109-
func DisableUser(ctx context.Context, apiClient *clients.ApiClient, username string) diag.Diagnostics {
110-
var diags diag.Diagnostics
117+
func DisableUser(ctx context.Context, apiClient *clients.ApiClient, username string) fwdiag.Diagnostics {
118+
var diags fwdiag.Diagnostics
111119
esClient, err := apiClient.GetESClient()
112120
if err != nil {
113-
return diag.FromErr(err)
121+
diags.AddError(
122+
"Unable to get Elasticsearch client",
123+
err.Error(),
124+
)
125+
return diags
114126
}
115127
res, err := esClient.Security.DisableUser(username, esClient.Security.DisableUser.WithContext(ctx))
116128
if err != nil {
117-
return diag.FromErr(err)
129+
diags.AddError(
130+
"Unable to disable system user",
131+
err.Error(),
132+
)
133+
return diags
118134
}
119135
defer res.Body.Close()
120-
if diags := utils.CheckError(res, "Unable to disable system user"); diags.HasError() {
136+
if diags := utils.CheckErrorFromFW(res, "Unable to disable system user"); diags.HasError() {
121137
return diags
122138
}
123139
return diags
124140
}
125141

126-
func ChangeUserPassword(ctx context.Context, apiClient *clients.ApiClient, username string, userPassword *models.UserPassword) diag.Diagnostics {
127-
var diags diag.Diagnostics
142+
func ChangeUserPassword(ctx context.Context, apiClient *clients.ApiClient, username string, userPassword *models.UserPassword) fwdiag.Diagnostics {
143+
var diags fwdiag.Diagnostics
128144
userPasswordBytes, err := json.Marshal(userPassword)
129145
if err != nil {
130-
return diag.FromErr(err)
146+
diags.AddError(
147+
"Unable to marshal user password",
148+
err.Error(),
149+
)
150+
return diags
131151
}
132152
esClient, err := apiClient.GetESClient()
133153
if err != nil {
134-
return diag.FromErr(err)
154+
diags.AddError(
155+
"Unable to get Elasticsearch client",
156+
err.Error(),
157+
)
158+
return diags
135159
}
136160
res, err := esClient.Security.ChangePassword(
137161
bytes.NewReader(userPasswordBytes),
138162
esClient.Security.ChangePassword.WithUsername(username),
139163
esClient.Security.ChangePassword.WithContext(ctx),
140164
)
141165
if err != nil {
142-
return diag.FromErr(err)
166+
diags.AddError(
167+
"Unable to change user password",
168+
err.Error(),
169+
)
170+
return diags
143171
}
144172
defer res.Body.Close()
145-
if diags := utils.CheckError(res, "Unable to change user's password"); diags.HasError() {
173+
if diags := utils.CheckErrorFromFW(res, "Unable to change user's password"); diags.HasError() {
146174
return diags
147175
}
148176
return diags

internal/elasticsearch/security/system_user/update.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,25 @@ func (r *systemUserResource) update(ctx context.Context, plan tfsdk.Plan, state
4646
}
4747

4848
var userPassword models.UserPassword
49+
// TB TODO Fix up this logic. It should only set the password when it's set in config
4950
if utils.IsKnown(data.Password) && (user.Password == nil || data.Password.ValueString() != *user.Password) {
5051
userPassword.Password = data.Password.ValueStringPointer()
5152
}
5253
if utils.IsKnown(data.PasswordHash) && (user.PasswordHash == nil || data.PasswordHash.ValueString() != *user.PasswordHash) {
5354
userPassword.PasswordHash = data.PasswordHash.ValueStringPointer()
5455
}
5556
if userPassword.Password != nil || userPassword.PasswordHash != nil {
56-
sdkDiags := elasticsearch.ChangeUserPassword(ctx, r.client, usernameId, &userPassword)
57-
diags.Append(utils.FrameworkDiagsFromSDK(sdkDiags)...)
57+
diags.Append(elasticsearch.ChangeUserPassword(ctx, r.client, usernameId, &userPassword)...)
5858
if diags.HasError() {
5959
return diags
6060
}
6161
}
6262

6363
if utils.IsKnown(data.Enabled) && !data.Enabled.IsNull() && data.Enabled.ValueBool() != user.Enabled {
6464
if data.Enabled.ValueBool() {
65-
sdkDiags := elasticsearch.EnableUser(ctx, r.client, usernameId)
66-
diags.Append(utils.FrameworkDiagsFromSDK(sdkDiags)...)
65+
diags.Append(elasticsearch.EnableUser(ctx, r.client, usernameId)...)
6766
} else {
68-
sdkDiags := elasticsearch.DisableUser(ctx, r.client, usernameId)
69-
diags.Append(utils.FrameworkDiagsFromSDK(sdkDiags)...)
67+
diags.Append(elasticsearch.DisableUser(ctx, r.client, usernameId)...)
7068
}
7169
if diags.HasError() {
7270
return diags

internal/utils/diag.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,21 @@ func CheckError(res *esapi.Response, errMsg string) sdkdiag.Diagnostics {
4242
return diags
4343
}
4444

45+
func CheckErrorFromFW(res *esapi.Response, errMsg string) fwdiag.Diagnostics {
46+
var diags fwdiag.Diagnostics
47+
48+
if res.IsError() {
49+
body, err := io.ReadAll(res.Body)
50+
if err != nil {
51+
diags.AddError(errMsg, err.Error())
52+
return diags
53+
}
54+
diags.AddError(errMsg, fmt.Sprintf("Failed with: %s", body))
55+
return diags
56+
}
57+
return diags
58+
}
59+
4560
func CheckHttpError(res *http.Response, errMsg string) sdkdiag.Diagnostics {
4661
var diags sdkdiag.Diagnostics
4762

0 commit comments

Comments
 (0)