1
16
17 package integration
18
19 import (
20 "context"
21 "fmt"
22 "os"
23 "path"
24 "strings"
25 "testing"
26
27 "github.com/okta/okta-sdk-golang/v2/okta/query"
28
29 "github.com/stretchr/testify/assert"
30 "github.com/stretchr/testify/require"
31
32 "github.com/okta/okta-sdk-golang/v2/okta"
33
34 "github.com/okta/okta-sdk-golang/v2/tests"
35 )
36
37 func TestCanGetApplicationByID(t *testing.T) {
38 ctx, client, err := tests.NewClient(context.TODO())
39 require.NoError(t, err)
40
41 basicApplication := okta.NewBasicAuthApplication()
42 basicApplication.Settings = &okta.BasicApplicationSettings{
43 App: &okta.BasicApplicationSettingsApplication{
44 AuthURL: "https://example.com/auth.html",
45 Url: "https://example.com/auth.html",
46 },
47 }
48
49 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
50 require.NoError(t, err, "Creating an application should not error")
51
52 appId := application.(*okta.BasicAuthApplication).Id
53
54 foundApplication, _, err := client.Application.GetApplication(ctx, appId, okta.NewBasicAuthApplication(), nil)
55 require.NoError(t, err, "Should not error when getting an applicaiton by id")
56
57 assert.Equal(t, appId, foundApplication.(*okta.BasicAuthApplication).Id, "Application found was not correct")
58
59 client.Application.DeactivateApplication(ctx, appId)
60 _, err = client.Application.DeleteApplication(ctx, appId)
61
62 require.NoError(t, err, "Deleting an application should not error")
63 }
64
65 func TestCanUpdateApplication(t *testing.T) {
66 ctx, client, err := tests.NewClient(context.TODO())
67 require.NoError(t, err)
68
69 basicApplication := okta.NewBasicAuthApplication()
70 basicApplication.Settings = &okta.BasicApplicationSettings{
71 App: &okta.BasicApplicationSettingsApplication{
72 AuthURL: "https://example.com/auth.html",
73 Url: "https://example.com/auth.html",
74 },
75 }
76
77 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
78 require.NoError(t, err, "Creating an application should not error")
79
80 appId := application.(*okta.BasicAuthApplication).Id
81
82 newBasicApplication := okta.NewBasicAuthApplication()
83 newBasicApplication.Settings = &okta.BasicApplicationSettings{
84 App: &okta.BasicApplicationSettingsApplication{
85 AuthURL: "https://example.org/auth.html",
86 Url: "https://example.org/auth.html",
87 },
88 }
89
90 newApp, _, err := client.Application.UpdateApplication(ctx, appId, newBasicApplication)
91 require.NoError(t, err, "Updating an application caused an error")
92
93 assert.Equal(t, "https://example.org/auth.html", newApp.(*okta.BasicAuthApplication).Settings.App.Url, "The application did not update")
94
95 _, err = client.Application.DeactivateApplication(ctx, appId)
96 require.NoError(t, err, "Deactivating an application should not error")
97
98 _, err = client.Application.DeleteApplication(ctx, appId)
99
100 require.NoError(t, err, "Deleting an application should not error")
101 }
102
103 func TestCanCreateABookmarkApplication(t *testing.T) {
104 ctx, client, err := tests.NewClient(context.TODO())
105 require.NoError(t, err)
106
107 bookmarkApplication := okta.NewBookmarkApplication()
108 bookmarkApplication.Settings = &okta.BookmarkApplicationSettings{
109 App: &okta.BookmarkApplicationSettingsApplication{
110 RequestIntegration: new(bool),
111 Url: "https://example.com/bookmark.htm",
112 },
113 }
114
115 assert.Empty(t, bookmarkApplication.Id)
116 application, _, err := client.Application.CreateApplication(ctx, bookmarkApplication, nil)
117 require.NoError(t, err, "Creating an application should not error")
118
119 assert.IsType(t, &okta.BookmarkApplication{}, application, "Application type returned was incorrect")
120 assert.NotEmpty(t, application.(*okta.BookmarkApplication).Id)
121
122 client.Application.DeactivateApplication(ctx, application.(*okta.BookmarkApplication).Id)
123 _, err = client.Application.DeleteApplication(ctx, application.(*okta.BookmarkApplication).Id)
124
125 require.NoError(t, err, "Deleting an application should not error")
126 }
127
128 func TestCanCreateABasicAuthenticationApplication(t *testing.T) {
129 ctx, client, err := tests.NewClient(context.TODO())
130 require.NoError(t, err)
131
132 basicApplication := okta.NewBasicAuthApplication()
133 basicApplication.Settings = &okta.BasicApplicationSettings{
134 App: &okta.BasicApplicationSettingsApplication{
135 AuthURL: "https://example.com/auth.html",
136 Url: "https://example.com/auth.html",
137 },
138 }
139
140 assert.Empty(t, basicApplication.Id)
141 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
142 require.NoError(t, err, "Creating an application should not error")
143
144 assert.IsType(t, &okta.BasicAuthApplication{}, application, "Application type returned was incorrect")
145 assert.NotEmpty(t, application.(*okta.BasicAuthApplication).Id)
146 assert.NotEmpty(t, basicApplication.Id)
147
148 client.Application.DeactivateApplication(ctx, application.(*okta.BasicAuthApplication).Id)
149 _, err = client.Application.DeleteApplication(ctx, application.(*okta.BasicAuthApplication).Id)
150
151 require.NoError(t, err, "Deleting an application should not error")
152 }
153
154 func TestListApplicationAllowsCastingToCorrectType(t *testing.T) {
155 ctx, client, err := tests.NewClient(context.TODO())
156 require.NoError(t, err)
157
158 basicApplication := okta.NewBasicAuthApplication()
159 basicApplication.Settings = &okta.BasicApplicationSettings{
160 App: &okta.BasicApplicationSettingsApplication{
161 AuthURL: "https://example.com/auth.html",
162 Url: "https://example.com/auth.html",
163 },
164 }
165
166 app1, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
167 require.NoError(t, err, "Creating an application should not error")
168
169 bookmarkApplication := okta.NewBookmarkApplication()
170 bookmarkApplication.Settings = &okta.BookmarkApplicationSettings{
171 App: &okta.BookmarkApplicationSettingsApplication{
172 RequestIntegration: new(bool),
173 Url: "https://example.com/bookmark.htm",
174 },
175 }
176
177 app2, _, err := client.Application.CreateApplication(ctx, bookmarkApplication, nil)
178 require.NoError(t, err, "Creating an application should not error")
179
180 applist, _, err := client.Application.ListApplications(ctx, nil)
181 require.NoError(t, err, "List applications should not error")
182
183 for _, a := range applist {
184 if a.(*okta.Application).Name == "bookmark" {
185 if a.(*okta.Application).Id == app2.(*okta.BookmarkApplication).Id {
186 ba, _, _ := client.Application.GetApplication(ctx, a.(*okta.Application).Id, okta.NewBookmarkApplication(), nil)
187 requestIntegration := ba.(*okta.BookmarkApplication).Settings.App.RequestIntegration
188 assert.False(t, *requestIntegration)
189 }
190 }
191 }
192
193 client.Application.DeactivateApplication(ctx, app1.(*okta.BasicAuthApplication).Id)
194 _, err = client.Application.DeleteApplication(ctx, app1.(*okta.BasicAuthApplication).Id)
195
196 require.NoError(t, err, "Deleting an application should not error")
197
198 client.Application.DeactivateApplication(ctx, app2.(*okta.BookmarkApplication).Id)
199 _, err = client.Application.DeleteApplication(ctx, app2.(*okta.BookmarkApplication).Id)
200
201 require.NoError(t, err, "Deleting an application should not error")
202 }
203
204 func TestCanActivateApplication(t *testing.T) {
205 ctx, client, err := tests.NewClient(context.TODO())
206 require.NoError(t, err)
207
208 basicApplication := okta.NewBasicAuthApplication()
209 basicApplication.Settings = &okta.BasicApplicationSettings{
210 App: &okta.BasicApplicationSettingsApplication{
211 AuthURL: "https://example.com/auth.html",
212 Url: "https://example.com/auth.html",
213 },
214 }
215
216 application, _, err := client.Application.CreateApplication(ctx, basicApplication, query.NewQueryParams(query.WithActivate(false)))
217 require.NoError(t, err, "Creating an application should not error")
218
219 appId := application.(*okta.BasicAuthApplication).Id
220
221 assert.Equal(t, "INACTIVE", application.(*okta.BasicAuthApplication).Status, "Application is not inactive")
222
223 _, err = client.Application.ActivateApplication(ctx, appId)
224 require.NoError(t, err, "Activationg an application should not error")
225 application, _, _ = client.Application.GetApplication(ctx, appId, okta.NewBasicAuthApplication(), nil)
226 assert.Equal(t, "ACTIVE", application.(*okta.BasicAuthApplication).Status, "Application is not inactive")
227
228 client.Application.DeactivateApplication(ctx, appId)
229 _, err = client.Application.DeleteApplication(ctx, appId)
230
231 require.NoError(t, err, "Deleting an application should not error")
232 }
233
234 func TestCanDeactivateApplication(t *testing.T) {
235 ctx, client, err := tests.NewClient(context.TODO())
236 require.NoError(t, err)
237
238 basicApplication := okta.NewBasicAuthApplication()
239 basicApplication.Settings = &okta.BasicApplicationSettings{
240 App: &okta.BasicApplicationSettingsApplication{
241 AuthURL: "https://example.com/auth.html",
242 Url: "https://example.com/auth.html",
243 },
244 }
245
246 application, _, err := client.Application.CreateApplication(ctx, basicApplication, query.NewQueryParams(query.WithActivate(true)))
247 require.NoError(t, err, "Creating an application should not error")
248
249 appId := application.(*okta.BasicAuthApplication).Id
250
251 assert.Equal(t, "ACTIVE", application.(*okta.BasicAuthApplication).Status, "Application is not inactive")
252
253 _, err = client.Application.DeactivateApplication(ctx, appId)
254 require.NoError(t, err, "Deactivating an application should not error")
255 application, _, err = client.Application.GetApplication(ctx, appId, okta.NewBasicAuthApplication(), nil)
256 assert.Equal(t, "INACTIVE", application.(*okta.BasicAuthApplication).Status, "Application is not inactive")
257
258 _, err = client.Application.DeleteApplication(ctx, appId)
259
260 require.NoError(t, err, "Deleting an application should not error")
261 }
262
263 func TestCanAddAndRemoveApplicationUsers(t *testing.T) {
264 ctx, client, err := tests.NewClient(context.TODO())
265 require.NoError(t, err)
266
267 basicApplication := okta.NewBasicAuthApplication()
268 basicApplication.Settings = &okta.BasicApplicationSettings{
269 App: &okta.BasicApplicationSettingsApplication{
270 AuthURL: "https://example.com/auth.html",
271 Url: "https://example.com/auth.html",
272 },
273 }
274
275 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
276 require.NoError(t, err, "Creating an application should not error")
277
278 appId := application.(*okta.BasicAuthApplication).Id
279
280 appUserList, _, _ := client.Application.ListApplicationUsers(ctx, appId, nil)
281 assert.Empty(t, appUserList, "App Users should be empty")
282
283 p := &okta.PasswordCredential{
284 Value: "Abcd1234",
285 }
286 uc := &okta.UserCredentials{
287 Password: p,
288 }
289 profile := okta.UserProfile{}
290 profile["firstName"] = "John"
291 profile["lastName"] = "Get-User"
292 profile["email"] = randomEmail()
293 profile["login"] = profile["email"]
294 u := &okta.CreateUserRequest{
295 Credentials: uc,
296 Profile: &profile,
297 }
298 qp := query.NewQueryParams(query.WithActivate(false))
299
300 user, _, err := client.User.CreateUser(ctx, *u, qp)
301 require.NoError(t, err, "Creating a new user should not error")
302
303 req := okta.AppUser{
304 Credentials: &okta.AppUserCredentials{
305 Password: &okta.AppUserPasswordCredential{
306 Value: "abcd1234",
307 },
308 UserName: "appUser",
309 },
310 Id: user.Id,
311 }
312
313 appUser, _, err := client.Application.AssignUserToApplication(ctx, appId, req)
314 require.NoError(t, err, "Assigning user to application show not error")
315
316 assert.IsType(t, okta.AppUser{}, *appUser, "Type returned from assigning user to application was incorrect")
317
318 appUserList, _, _ = client.Application.ListApplicationUsers(ctx, appId, nil)
319 assert.NotEmpty(t, appUserList, "App Users should not be empty")
320
321 client.Application.DeleteApplicationUser(ctx, appId, appUser.Id, nil)
322 client.GetRequestExecutor().RefreshNext()
323 appUserList, _, _ = client.Application.ListApplicationUsers(ctx, appId, nil)
324 assert.Empty(t, appUserList, "App Users should be empty after deleting")
325
326 client.Application.DeactivateApplication(ctx, appId)
327 _, err = client.Application.DeleteApplication(ctx, appId)
328
329 require.NoError(t, err, "Deleting an application should not error")
330
331 client.User.DeactivateUser(ctx, user.Id, nil)
332 client.User.DeactivateOrDeleteUser(ctx, user.Id, nil)
333 }
334
335 func TestCanSetApplicationSettingsDuringCreation(t *testing.T) {
336 ctx, client, err := tests.NewClient(context.TODO())
337 require.NoError(t, err)
338
339 basicApplication := okta.NewBasicAuthApplication()
340 basicApplication.Settings = &okta.BasicApplicationSettings{
341 App: &okta.BasicApplicationSettingsApplication{
342 AuthURL: "https://example.com/auth.html",
343 Url: "https://example.com/auth.html",
344 },
345 }
346
347 assert.Empty(t, basicApplication.Id)
348 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
349 require.NoError(t, err, "Creating an application should not error")
350
351 assert.IsType(t, okta.BasicApplicationSettingsApplication{}, *application.(*okta.BasicAuthApplication).Settings.App, "The returned type of application settings application was not correct type")
352 assert.Equal(t, "https://example.com/auth.html", application.(*okta.BasicAuthApplication).Settings.App.Url)
353
354 appId := application.(*okta.BasicAuthApplication).Id
355 client.Application.DeactivateApplication(ctx, appId)
356 _, err = client.Application.DeleteApplication(ctx, appId)
357
358 require.NoError(t, err, "Deleting an application should not error")
359 }
360
361 func TestCanSetApplicationSettingsDuringUpdate(t *testing.T) {
362 ctx, client, err := tests.NewClient(context.TODO())
363 require.NoError(t, err)
364
365 basicApplication := okta.NewBasicAuthApplication()
366 basicApplication.Settings = &okta.BasicApplicationSettings{
367 App: &okta.BasicApplicationSettingsApplication{
368 AuthURL: "https://example.com/auth.html",
369 Url: "https://example.com/auth.html",
370 },
371 }
372
373 assert.Empty(t, basicApplication.Id)
374 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
375 require.NoError(t, err, "Creating an application should not error")
376
377 appId := application.(*okta.BasicAuthApplication).Id
378
379 myApp, _, err := client.Application.GetApplication(ctx, appId, okta.NewBasicAuthApplication(), nil)
380 app := myApp.(*okta.BasicAuthApplication)
381 myAppId := app.Id
382 myAppSettingsApp := app.Settings.App
383
384 myAppSettingsApp.Url = "https://okta.com/auth"
385
386 _, _, _ = client.Application.UpdateApplication(ctx, myAppId, app)
387
388 updatedApp, _, err := client.Application.GetApplication(ctx, appId, okta.NewBasicAuthApplication(), nil)
389 assert.Equal(t, "https://okta.com/auth", updatedApp.(*okta.BasicAuthApplication).Settings.App.Url, "The URL was not updated'")
390
391 client.Application.DeactivateApplication(ctx, appId)
392 _, err = client.Application.DeleteApplication(ctx, appId)
393
394 require.NoError(t, err, "Deleting an application should not error")
395 }
396
397 func TestCanCreateCSRForApplication(t *testing.T) {
398 ctx, client, err := tests.NewClient(context.TODO())
399 require.NoError(t, err)
400
401 application := createBasicAuthApplication(t)
402
403 subject := okta.CsrMetadataSubject{
404 CountryName: "US",
405 StateOrProvinceName: "California",
406 LocalityName: "San Francisco",
407 OrganizationName: "Okta, Inc",
408 OrganizationalUnitName: "Dev",
409 CommonName: "SP Issuer",
410 }
411
412 subjectAltNames := okta.CsrMetadataSubjectAltNames{
413 DnsNames: []string{"dev.okta.com"},
414 }
415
416 csr := okta.CsrMetadata{
417 Subject: &subject,
418 SubjectAltNames: &subjectAltNames,
419 }
420
421 csrs, _, err := client.Application.GenerateCsrForApplication(ctx, application.Id, csr)
422 require.NoError(t, err, "Creating an application Csr should not error")
423
424 assert.IsType(t, &okta.Csr{}, csrs, "did not return a `okta.Csr` object")
425
426 client.Application.DeactivateApplication(ctx, application.Id)
427 _, err = client.Application.DeleteApplication(ctx, application.Id)
428
429 require.NoError(t, err, "Deleting an application should not error")
430 }
431
432 func TestGetDefaultProvisioningConnectionForApplication(t *testing.T) {
433 ctx, client, err := tests.NewClient(context.TODO())
434 require.NoError(t, err)
435
436 application := createOrg2OrgApplication(t)
437
438 conn, _, err := client.Application.GetDefaultProvisioningConnectionForApplication(ctx, application.Id)
439 require.NoError(t, err, "getting default provisioning connection for application should not error.")
440 assert.NotEmpty(t, conn.AuthScheme, "connection auth scheme shouldn't be empty")
441 assert.NotEmpty(t, conn.Status, "connection status shouldn't be empty")
442
443 client.Application.DeactivateApplication(ctx, application.Id)
444 _, err = client.Application.DeleteApplication(ctx, application.Id)
445 require.NoError(t, err, "Deleting an application should not error")
446 }
447
448 func TestSetDefaultProvisioningConnectionForApplication(t *testing.T) {
449 ctx, client, err := tests.NewClient(context.TODO())
450 require.NoError(t, err)
451
452 application := createOrg2OrgApplication(t)
453
454 provisionConnectionRequest := okta.ProvisioningConnectionRequest{
455 Profile: &okta.ProvisioningConnectionProfile{
456 AuthScheme: "TOKEN",
457 Token: "TEST",
458 },
459 }
460
461 conn, _, err := client.Application.SetDefaultProvisioningConnectionForApplication(ctx, application.Id, provisionConnectionRequest, query.NewQueryParams(query.WithActivate(false)))
462 require.NoError(t, err, "setting default provisioning connection for application should not error.")
463 assert.Equal(t, "TOKEN", conn.AuthScheme, "expected auth scheme %q, go %q", "TOKEN", conn.AuthScheme)
464
465 client.Application.DeactivateApplication(ctx, application.Id)
466 _, err = client.Application.DeleteApplication(ctx, application.Id)
467 require.NoError(t, err, "Deleting an application should not error")
468 }
469
470 func TestListFeaturesForApplication(t *testing.T) {
471 t.Skip("listing application features is specific to an org2org")
472
473 ctx, client, err := tests.NewClient(context.TODO())
474 require.NoError(t, err)
475
476 application := createOrg2OrgApplication(t)
477
478
479
480 provisionConnectionRequest := okta.ProvisioningConnectionRequest{
481 Profile: &okta.ProvisioningConnectionProfile{
482 AuthScheme: "TOKEN",
483 Token: "FIXME_WITH_REAL_ORG_TOKEN",
484 },
485 }
486 _, _, err = client.Application.SetDefaultProvisioningConnectionForApplication(ctx, application.Id, provisionConnectionRequest, query.NewQueryParams(query.WithActivate(false)))
487 require.NoError(t, err, "setting default provisioning connection for application should not error.")
488
489 features, _, err := client.Application.ListFeaturesForApplication(ctx, application.Id)
490 require.NoError(t, err, "listing features for application should not error.")
491
492 foundUserProvisiontingFeature := false
493 for _, feature := range features {
494
495
496
497
498 if feature.Name == "USER_PROVISIONING" {
499 foundUserProvisiontingFeature = true
500 break
501 }
502 }
503 if !foundUserProvisiontingFeature {
504 assert.FailNow(t, "the org2org application should at least have USER_PROVISIONING feature")
505 }
506
507 client.Application.DeactivateApplication(ctx, application.Id)
508 _, err = client.Application.DeleteApplication(ctx, application.Id)
509 require.NoError(t, err, "Deleting an application should not error")
510 }
511
512 func TestUploadApplicationLogo(t *testing.T) {
513 ctx, client, err := tests.NewClient(context.TODO())
514 require.NoError(t, err)
515
516 application := createBasicAuthApplication(t)
517
518 fileDir, _ := os.Getwd()
519 fileName := "../fixtures/logo.png"
520 filePath := path.Join(fileDir, fileName)
521 _, err = client.Application.UploadApplicationLogo(ctx, application.Id, filePath)
522 require.NoError(t, err, "uploading application logo should not error.")
523
524 client.Application.DeactivateApplication(ctx, application.Id)
525 _, err = client.Application.DeleteApplication(ctx, application.Id)
526 require.NoError(t, err, "Deleting an application should not error")
527 }
528
529 func createBasicAuthApplication(t *testing.T) *okta.BasicAuthApplication {
530 ctx, client, err := tests.NewClient(context.TODO())
531 require.NoError(t, err)
532
533 basicApplication := okta.NewBasicAuthApplication()
534 basicApplication.Settings = &okta.BasicApplicationSettings{
535 App: &okta.BasicApplicationSettingsApplication{
536 AuthURL: "https://example.com/auth.html",
537 Url: "https://example.com/auth.html",
538 },
539 }
540
541 application, _, err := client.Application.CreateApplication(ctx, basicApplication, nil)
542 require.NoError(t, err, "Creating an application should not error")
543
544 return application.(*okta.BasicAuthApplication)
545 }
546
547 func createOrg2OrgApplication(t *testing.T) *okta.Org2OrgApplication {
548 ctx, client, err := tests.NewClient(context.TODO())
549 require.NoError(t, err)
550
551 application := okta.NewOrg2OrgApplication()
552 application.Label = "Sample Okta Org2Org App"
553 application.Name = "okta_org2org"
554 application.Settings = &okta.Org2OrgApplicationSettings{
555 App: &okta.Org2OrgApplicationSettingsApp{
556 AcsUrl: "https://example.okta.com/sso/saml2/exampleid",
557 AudRestriction: "https://www.okta.com/saml2/service-provider/exampleid",
558 BaseUrl: "https://example.okta.com",
559 },
560 }
561
562 app, _, err := client.Application.CreateApplication(ctx, application, query.NewQueryParams(query.WithActivate(true)))
563 require.NoError(t, err, "Creating an application should not error")
564
565 return app.(*okta.Org2OrgApplication)
566 }
567
568 func deleteAllApps(t *testing.T) {
569 ctx, client, err := tests.NewClient(context.TODO())
570 require.NoError(t, err)
571
572 applicationList, _, err := client.Application.ListApplications(ctx, nil)
573 if err != nil {
574 fmt.Printf("%+v\n", err)
575 }
576
577 for _, a := range applicationList {
578 if strings.HasPrefix(a.(*okta.Application).Label, "Template Basic Auth App") ||
579 strings.HasPrefix(a.(*okta.Application).Label, "Bookmark App") {
580 client.Application.DeactivateApplication(ctx, a.(*okta.Application).Id)
581 client.Application.DeleteApplication(ctx, a.(*okta.Application).Id)
582 }
583 }
584 }
585
View as plain text