/
data.go
66 lines (57 loc) · 2.13 KB
/
data.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package azureADServicePrincipal
import (
"context"
"fmt"
"github.com/PGSSoft/terraform-provider-mssql/internal/core/datasource"
common2 "github.com/PGSSoft/terraform-provider-mssql/internal/services/common"
"github.com/PGSSoft/terraform-provider-mssql/internal/sql"
"github.com/PGSSoft/terraform-provider-mssql/internal/utils"
"github.com/hashicorp/terraform-plugin-framework/tfsdk"
"github.com/hashicorp/terraform-plugin-framework/types"
"strings"
)
type dataSource struct{}
func (d *dataSource) GetName() string {
return "azuread_service_principal"
}
func (d *dataSource) GetSchema(_ context.Context) tfsdk.Schema {
attrs := map[string]tfsdk.Attribute{}
for n, attr := range attributes {
attr.Required = n == "database_id"
attr.Optional = n != "id" && !attr.Required
attr.Computed = !attr.Required
attrs[n] = attr
}
return tfsdk.Schema{
Description: "Obtains information about single Azure AD Service Principal database user.",
Attributes: attrs,
}
}
func (d *dataSource) Read(ctx context.Context, request datasource.ReadRequest[resourceData], response *datasource.ReadResponse[resourceData]) {
var (
db sql.Database
user sql.User
)
request.
Then(func() { db = common2.GetResourceDb(ctx, request.Conn, request.Config.DatabaseId.ValueString()) }).
Then(func() {
if !request.Config.Name.IsNull() && !request.Config.Name.IsUnknown() {
user = sql.GetUserByName(ctx, db, request.Config.Name.ValueString())
return
}
for _, u := range sql.GetUsers(ctx, db) {
settings := u.GetSettings(ctx)
if settings.Type == sql.USER_TYPE_AZUREAD && strings.EqualFold(fmt.Sprint(settings.AADObjectId), request.Config.ClientId.ValueString()) {
user = u
return
}
}
utils.AddError(ctx, "User does not exist", fmt.Errorf("could not find user with name=%q and client_id=%q", request.Config.Name.ValueString(), request.Config.ClientId.ValueString()))
}).
Then(func() {
state := request.Config
state.Id = types.StringValue(common2.DbObjectId[sql.UserId]{DbId: db.GetId(ctx), ObjectId: user.GetId(ctx)}.String())
state = state.withSettings(ctx, user.GetSettings(ctx))
response.SetState(state)
})
}