Skip to content

Commit fb904b5

Browse files
authored
CLOUDP-180059: Service Accounts Example (#465)
1 parent 8c1c4c7 commit fb904b5

File tree

3 files changed

+89
-24
lines changed

3 files changed

+89
-24
lines changed

examples/auth/basic_client.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package main
33
import (
44
"context"
55
"fmt"
6-
"go.mongodb.org/atlas-sdk/v20241023001/admin"
76
"log"
87
"os"
8+
9+
"go.mongodb.org/atlas-sdk/v20241023001/admin"
910
)
1011

1112
// Basic example for Service Account OAuth Authentication
@@ -33,17 +34,7 @@ func main() {
3334
log.Fatalf("Error: %v", err)
3435
}
3536

36-
request := sdk.ProjectsApi.ListProjectsWithParams(ctx,
37-
&admin.ListProjectsApiParams{
38-
ItemsPerPage: admin.PtrInt(1),
39-
IncludeCount: admin.PtrBool(true),
40-
PageNum: admin.PtrInt(1),
41-
})
42-
43-
if err != nil {
44-
log.Fatalf("Error making request: %v", err)
45-
}
46-
projects, _, err := request.IncludeCount(true).PageNum(1).Execute()
37+
projects, _, err := sdk.ProjectsApi.ListProjectsWithParams(ctx,&admin.ListProjectsApiParams{}).Execute()
4738
if err != nil {
4839
log.Fatalf("Error: %v", err)
4940
}

examples/auth_advanced/advanced_client.go

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,10 @@ func main() {
6363
log.Fatalf("Error: %v", err)
6464
}
6565

66-
request := sdk.ProjectsApi.ListProjectsWithParams(ctx,
67-
&admin.ListProjectsApiParams{
68-
ItemsPerPage: admin.PtrInt(1),
69-
IncludeCount: admin.PtrBool(true),
70-
PageNum: admin.PtrInt(1),
71-
})
72-
66+
projects, _, err := sdk.ProjectsApi.ListProjectsWithParams(ctx,&admin.ListProjectsApiParams{}).Execute()
7367
if err != nil {
7468
log.Fatalf("Error making request: %v", err)
7569
}
76-
projects, _, err := request.IncludeCount(true).PageNum(1).Execute()
77-
if err != nil {
78-
log.Fatalf("Error: %v", err)
79-
}
80-
8170
if projects.Results == nil {
8271
fmt.Printf("projects should not be empty: %v", projects)
8372
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"os"
8+
9+
"go.mongodb.org/atlas-sdk/v20241023001/admin"
10+
)
11+
12+
// Example for Service Account Management API
13+
// Example uses Service Account to create Service Account.
14+
// Please ensure that Service Account has organizational admin permission.
15+
16+
// Required env variables to run example:
17+
// export MONGODB_ATLAS_CLIENT_ID="your_client_id"
18+
// export MONGODB_ATLAS_CLIENT_SECRET="your_client_secret"
19+
// export MONGODB_ATLAS_ORG="your_org_id"
20+
func main() {
21+
host := os.Getenv("MONGODB_ATLAS_URL")
22+
if host == "" {
23+
host = "https://cloud.mongodb.com"
24+
}
25+
26+
// Fetch clientID and clientSecret from environment variables
27+
clientID := os.Getenv("MONGODB_ATLAS_CLIENT_ID")
28+
clientSecret := os.Getenv("MONGODB_ATLAS_CLIENT_SECRET")
29+
org := os.Getenv("MONGODB_ATLAS_ORG")
30+
31+
if clientID == "" || clientSecret == "" || org == "" {
32+
log.Fatal("Missing required environment variables")
33+
}
34+
35+
ctx := context.Background()
36+
sdk, err := admin.NewClient(
37+
admin.UseBaseURL(host),
38+
admin.UseOAuthAuth(clientID, clientSecret, nil),
39+
)
40+
if err != nil {
41+
log.Fatalf("Error: %v", err)
42+
}
43+
44+
// 1. Create Service Account
45+
request := sdk.ServiceAccountsApi.CreateServiceAccount(ctx, org, admin.NewOrgServiceAccountRequest("SA created by sdk-example",
46+
"example", []string{"ORG_OWNER"}, 365*24))
47+
sa, _, err := request.Execute()
48+
if err != nil {
49+
log.Fatalf("Error: %v", err)
50+
}
51+
52+
// 2. Rotate secret
53+
newSecret, _, err := sdk.ServiceAccountsApi.CreateServiceAccountSecret(ctx, org, *sa.ClientId, &admin.ServiceAccountSecretRequest{
54+
SecretExpiresAfterHours: 365*24,
55+
}).Execute();
56+
if err != nil {
57+
log.Fatalf("Error: %v", err)
58+
}
59+
60+
// 3. Delete rotated secret
61+
_, err = sdk.ServiceAccountsApi.DeleteServiceAccountSecret(ctx, *sa.ClientId, sa.GetSecrets()[0].Id, org).Execute();
62+
if err != nil {
63+
log.Fatalf("Error: %v", err)
64+
}
65+
66+
// 4. Create new SDK client using New Service Account
67+
newSDK, err := admin.NewClient(
68+
admin.UseBaseURL(host),
69+
// 4.1 Using ClientId and Secret returned by API
70+
// API might have up to 2 secrets
71+
admin.UseOAuthAuth(*sa.ClientId, *newSecret.Secret, nil),
72+
)
73+
74+
// 5. Make request using new Service Account
75+
projects, _, err := newSDK.ProjectsApi.ListProjectsWithParams(ctx,
76+
&admin.ListProjectsApiParams{}).Execute()
77+
if err != nil {
78+
log.Fatalf("Error: %v", err)
79+
}
80+
81+
fmt.Printf("Projects size: %v", *projects.TotalCount)
82+
83+
// 6. Remove created Service Account. We would not be able to use it afterwards without access to Secret value.
84+
sdk.ServiceAccountsApi.DeleteServiceAccount(ctx, *sa.ClientId, org)
85+
}

0 commit comments

Comments
 (0)