Skip to content

Commit a12e989

Browse files
Merge pull request #170 from sailpoint-oss/fix/transform-preview
Limit preview identity results to 250, limit fields to pull to just i…
2 parents 74cc210 + 3a46bcc commit a12e989

File tree

5 files changed

+132
-14
lines changed

5 files changed

+132
-14
lines changed

assets/vhs/preview.tape

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Set FontSize 16
2+
Set Width 1200
3+
Set Height 1000
4+
5+
Hide Sleep 2s Show
6+
7+
Sleep 5s
8+
Type "sail transform preview -f transform_files/DeriveFirstInitialLastNameInUpper.json"
9+
Enter
10+
Set TypingSpeed 500ms
11+
Sleep 5s
12+
Down
13+
Sleep 500ms
14+
Enter
15+
Sleep 4.5s
16+
Type "/"
17+
Sleep 3s
18+
Type "Brian"
19+
Sleep 5s
20+
Backspace 5
21+
Sleep 5s
22+
Type "Adam"
23+
Down
24+
Sleep 5s
25+
Enter
26+
Sleep 15s
27+

cmd/connector/static/connector/src/index.spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { connector } from './index'
2-
import { Connector, RawResponse, ResponseType, StandardCommand } from '@sailpoint/connector-sdk'
2+
import { Connector, RawResponse, ResponseType, StandardCommand, AssumeAwsRoleRequest, AssumeAwsRoleResponse } from '@sailpoint/connector-sdk'
33
import { PassThrough } from 'stream'
44

55
const mockConfig: any = {
@@ -18,7 +18,11 @@ describe('connector unit tests', () => {
1818
StandardCommand.StdTestConnection,
1919
{reloadConfig() {
2020
return Promise.resolve()
21-
},},
21+
},
22+
assumeAwsRole(assumeAwsRoleRequest: AssumeAwsRoleRequest): Promise<AssumeAwsRoleResponse> {
23+
return Promise.resolve(new AssumeAwsRoleResponse('accessKeyId', 'secretAccessKey', 'sessionToken', "123"))
24+
}
25+
},
2226
undefined,
2327
new PassThrough({ objectMode: true }).on('data', (chunk) => expect(chunk).toStrictEqual(new RawResponse ({}, ResponseType.Output)))
2428
)
Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
import { connectorCustomizer } from './index'
2-
import { CustomizerType, StandardCommand } from '@sailpoint/connector-sdk'
2+
import { CustomizerType, StandardCommand, AssumeAwsRoleRequest, AssumeAwsRoleResponse } from '@sailpoint/connector-sdk'
33

44
const mockConfig: any = {
5-
token: 'xxx123'
5+
token: 'xxx123',
66
}
77
process.env.CONNECTOR_CONFIG = Buffer.from(JSON.stringify(mockConfig)).toString('base64')
88

99
describe('connector customizer unit tests', () => {
10-
1110
it('should not change input from beforeStdAccountReadHandler', async () => {
1211
let customizer = await connectorCustomizer()
1312
let input = {
1413
identity: 'john.doe',
1514
}
1615
let updatedInput = await customizer._exec(
1716
customizer.handlerKey(CustomizerType.Before, StandardCommand.StdAccountRead),
18-
{reloadConfig() {
19-
return Promise.resolve()
20-
},},
17+
{
18+
reloadConfig() {
19+
return Promise.resolve()
20+
},
21+
assumeAwsRole(assumeAwsRoleRequest: AssumeAwsRoleRequest): Promise<AssumeAwsRoleResponse> {
22+
return Promise.resolve(
23+
new AssumeAwsRoleResponse('ccessKeyId', 'secretAccessKey', 'sessionToken', '123')
24+
)
25+
},
26+
},
2127
input
2228
)
2329

@@ -28,20 +34,27 @@ describe('connector customizer unit tests', () => {
2834
let customizer = await connectorCustomizer()
2935
let output = await customizer._exec(
3036
customizer.handlerKey(CustomizerType.After, StandardCommand.StdAccountRead),
31-
{reloadConfig() {
32-
return Promise.resolve()
33-
},},
37+
{
38+
reloadConfig() {
39+
return Promise.resolve()
40+
},
41+
assumeAwsRole(assumeAwsRoleRequest: AssumeAwsRoleRequest): Promise<AssumeAwsRoleResponse> {
42+
return Promise.resolve(
43+
new AssumeAwsRoleResponse('ccessKeyId', 'secretAccessKey', 'sessionToken', '123')
44+
)
45+
},
46+
},
3447
{
3548
identity: '',
3649
attributes: {
3750
username: 'john.doe',
3851
firstName: 'john',
3952
lastName: 'doe',
4053
41-
}
54+
},
4255
}
4356
)
4457

4558
expect(output.attributes.location).toStrictEqual('Austin')
4659
})
47-
})
60+
})

cmd/transform/preview.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ func newPreviewCommand() *cobra.Command {
122122
return err
123123
}
124124

125-
formattedResponse, err := search.PerformSearch(*apiClient, searchObj)
125+
searchObj.QueryResultFilter.Includes = []string{"id", "displayName", "email"}
126+
127+
formattedResponse, err := search.PerformSearchWithLimit(*apiClient, searchObj, 250)
126128
if err != nil {
127129
return err
128130
}

internal/search/search.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,78 @@ func PerformSearch(apiClient sailpoint.APIClient, search sailpointsdk.Search) (S
120120
return SearchResults, nil
121121
}
122122

123+
func PerformSearchWithLimit(apiClient sailpoint.APIClient, search sailpointsdk.Search, limit int32) (SearchResults, error) {
124+
var SearchResults SearchResults
125+
126+
if limit == 0 {
127+
limit = 500
128+
}
129+
130+
ctx := context.TODO()
131+
resp, r, err := apiClient.V3.SearchAPI.SearchPost(ctx).Search(search).Limit(limit).Execute()
132+
if err != nil {
133+
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
134+
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
135+
}
136+
137+
log.Debug("Search complete")
138+
139+
for i := 0; i < len(resp); i++ {
140+
entry := resp[i]
141+
switch entry["_type"] {
142+
case "accountactivity":
143+
var AccountActivity AccountActivity
144+
err := mapstructure.Decode(entry, &AccountActivity)
145+
if err != nil {
146+
return SearchResults, err
147+
}
148+
SearchResults.AccountActivities = append(SearchResults.AccountActivities, AccountActivity)
149+
150+
case "accessprofile":
151+
var AccessProfile AccessProfile
152+
err := mapstructure.Decode(entry, &AccessProfile)
153+
if err != nil {
154+
return SearchResults, err
155+
}
156+
SearchResults.AccessProfiles = append(SearchResults.AccessProfiles, AccessProfile)
157+
158+
case "entitlement":
159+
var Entitlement Entitlement
160+
err := mapstructure.Decode(entry, &Entitlement)
161+
if err != nil {
162+
return SearchResults, err
163+
}
164+
SearchResults.Entitlements = append(SearchResults.Entitlements, Entitlement)
165+
166+
case "event":
167+
var Event Event
168+
err := mapstructure.Decode(entry, &Event)
169+
if err != nil {
170+
return SearchResults, err
171+
}
172+
SearchResults.Events = append(SearchResults.Events, Event)
173+
174+
case "identity":
175+
var Identity Identity
176+
err := mapstructure.Decode(entry, &Identity)
177+
if err != nil {
178+
return SearchResults, err
179+
}
180+
SearchResults.Identities = append(SearchResults.Identities, Identity)
181+
182+
case "role":
183+
var Role Role
184+
err := mapstructure.Decode(entry, &Role)
185+
if err != nil {
186+
return SearchResults, err
187+
}
188+
SearchResults.Roles = append(SearchResults.Roles, Role)
189+
}
190+
}
191+
192+
return SearchResults, nil
193+
}
194+
123195
func IterateIndices(SearchResults SearchResults, searchQuery string, folderPath string, outputTypes []string) error {
124196
if len(SearchResults.AccountActivities) > 0 {
125197
fileName := "query=" + searchQuery + "&indices=AccountActivities"

0 commit comments

Comments
 (0)