-
Notifications
You must be signed in to change notification settings - Fork 664
/
data_source_ibm_appid_applications.go
129 lines (110 loc) · 3.47 KB
/
data_source_ibm_appid_applications.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package appid
import (
"context"
"fmt"
"sort"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
appid "github.com/IBM/appid-management-go-sdk/appidmanagementv4"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func DataSourceIBMAppIDApplications() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMAppIDApplicationsRead,
Schema: map[string]*schema.Schema{
"tenant_id": {
Description: "The AppID instance GUID",
Type: schema.TypeString,
Required: true,
},
"applications": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"client_id": {
Description: "The `client_id` is a public identifier for applications",
Type: schema.TypeString,
Required: true,
},
"name": {
Description: "The application name",
Type: schema.TypeString,
Computed: true,
},
"secret": {
Description: "The `secret` is a secret known only to the application and the authorization server",
Type: schema.TypeString,
Computed: true,
Sensitive: true,
},
"oauth_server_url": {
Description: "Base URL for common OAuth endpoints, like `/authorization`, `/token` and `/publickeys`",
Type: schema.TypeString,
Computed: true,
},
"profiles_url": {
Type: schema.TypeString,
Computed: true,
},
"discovery_endpoint": {
Description: "This URL returns OAuth Authorization Server Metadata",
Type: schema.TypeString,
Computed: true,
},
"type": {
Description: "The type of application to be registered. Allowed types are `regularwebapp` and `singlepageapp`.",
Type: schema.TypeString,
Computed: true,
},
},
},
},
},
}
}
func dataSourceIBMAppIDApplicationsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
appIDClient, err := meta.(conns.ClientSession).AppIDAPI()
if err != nil {
return diag.FromErr(err)
}
tenantID := d.Get("tenant_id").(string)
apps, resp, err := appIDClient.ListApplicationsWithContext(ctx, &appid.ListApplicationsOptions{
TenantID: &tenantID,
})
if err != nil {
return diag.Errorf("Error listing AppID applications: %s\n%s", err, resp)
}
applicationList := make([]interface{}, len(apps.Applications))
for index, app := range apps.Applications {
application := map[string]interface{}{}
application["client_id"] = *app.ClientID
application["name"] = *app.Name
if app.Secret != nil {
application["secret"] = *app.Secret
}
if app.OAuthServerURL != nil {
application["oauth_server_url"] = *app.OAuthServerURL
}
if app.ProfilesURL != nil {
application["profiles_url"] = *app.ProfilesURL
}
if app.DiscoveryEndpoint != nil {
application["discovery_endpoint"] = *app.DiscoveryEndpoint
}
if app.Type != nil {
application["type"] = *app.Type
}
applicationList[index] = application
}
sort.Slice(applicationList, func(a, b int) bool {
appA := applicationList[a].(map[string]interface{})
appB := applicationList[b].(map[string]interface{})
return appA["name"].(string) < appB["name"].(string)
})
if err := d.Set("applications", applicationList); err != nil {
return diag.FromErr(err)
}
d.SetId(fmt.Sprintf("%s/applications", tenantID))
return nil
}