|
| 1 | +// Copyright (c) Sander Jochems |
| 2 | +// SPDX-License-Identifier: MIT |
| 3 | + |
| 4 | +package models |
| 5 | + |
| 6 | +import ( |
| 7 | + "context" |
| 8 | + "github.com/hashicorp/terraform-plugin-framework/diag" |
| 9 | + "github.com/hashicorp/terraform-plugin-framework/types" |
| 10 | + "github.com/sander0542/nginxproxymanager-go" |
| 11 | + "slices" |
| 12 | +) |
| 13 | + |
| 14 | +type UserResource struct { |
| 15 | + Id types.Int64 `tfsdk:"id"` |
| 16 | + CreatedOn types.String `tfsdk:"created_on"` |
| 17 | + ModifiedOn types.String `tfsdk:"modified_on"` |
| 18 | + |
| 19 | + Name types.String `tfsdk:"name"` |
| 20 | + Nickname types.String `tfsdk:"nickname"` |
| 21 | + Email types.String `tfsdk:"email"` |
| 22 | + Avatar types.String `tfsdk:"avatar"` |
| 23 | + IsDisabled types.Bool `tfsdk:"is_disabled"` |
| 24 | + IsAdmin types.Bool `tfsdk:"is_admin"` |
| 25 | + Permissions types.Object `tfsdk:"permissions"` |
| 26 | +} |
| 27 | + |
| 28 | +func (m *UserResource) Write(ctx context.Context, user *nginxproxymanager.GetAccessLists200ResponseInnerOwner, diags *diag.Diagnostics) { |
| 29 | + var tmpDiags diag.Diagnostics |
| 30 | + |
| 31 | + m.Id = types.Int64Value(user.GetId()) |
| 32 | + m.CreatedOn = types.StringValue(user.GetCreatedOn()) |
| 33 | + m.ModifiedOn = types.StringValue(user.GetModifiedOn()) |
| 34 | + |
| 35 | + m.Name = types.StringValue(user.GetName()) |
| 36 | + m.Nickname = types.StringValue(user.GetNickname()) |
| 37 | + m.Email = types.StringValue(user.GetEmail()) |
| 38 | + m.Avatar = types.StringValue(user.GetAvatar()) |
| 39 | + m.IsDisabled = types.BoolValue(user.GetIsDisabled()) |
| 40 | + m.IsAdmin = types.BoolValue(slices.Contains(user.GetRoles(), "admin")) |
| 41 | + |
| 42 | + if user.HasPermissions() { |
| 43 | + m.Permissions, tmpDiags = ObjectUserPermissionsFrom(ctx, user.GetPermissions()) |
| 44 | + diags.Append(tmpDiags...) |
| 45 | + } else { |
| 46 | + m.Permissions = types.ObjectNull(UserPermissions{}.GetType().AttributeTypes()) |
| 47 | + } |
| 48 | +} |
| 49 | + |
| 50 | +func (m *UserResource) ToCreateRequest(ctx context.Context, diags *diag.Diagnostics) *nginxproxymanager.CreateUserRequest { |
| 51 | + request := nginxproxymanager.NewCreateUserRequest( |
| 52 | + m.Name.ValueString(), |
| 53 | + m.Nickname.ValueString(), |
| 54 | + m.Email.ValueString(), |
| 55 | + ) |
| 56 | + |
| 57 | + request.SetIsDisabled(m.IsDisabled.ValueBool()) |
| 58 | + if m.IsAdmin.ValueBool() { |
| 59 | + request.SetRoles([]string{"admin"}) |
| 60 | + } else { |
| 61 | + request.SetRoles([]string{}) |
| 62 | + } |
| 63 | + |
| 64 | + return request |
| 65 | +} |
| 66 | + |
| 67 | +func (m *UserResource) ToUpdateRequest(ctx context.Context, diags *diag.Diagnostics) *nginxproxymanager.UpdateUserRequest { |
| 68 | + request := nginxproxymanager.NewUpdateUserRequest() |
| 69 | + request.SetName(m.Name.ValueString()) |
| 70 | + request.SetNickname(m.Nickname.ValueString()) |
| 71 | + request.SetEmail(m.Email.ValueString()) |
| 72 | + request.SetIsDisabled(m.IsDisabled.ValueBool()) |
| 73 | + if m.IsAdmin.ValueBool() { |
| 74 | + request.SetRoles([]string{"admin"}) |
| 75 | + } else { |
| 76 | + request.SetRoles([]string{}) |
| 77 | + } |
| 78 | + |
| 79 | + return request |
| 80 | +} |
0 commit comments