16
16
package software .amazon .awssdk .services .sts .auth ;
17
17
18
18
import java .util .function .Consumer ;
19
+ import java .util .function .Supplier ;
20
+
19
21
import software .amazon .awssdk .annotations .NotThreadSafe ;
20
22
import software .amazon .awssdk .annotations .ThreadSafe ;
21
23
import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
38
40
*/
39
41
@ ThreadSafe
40
42
public class StsAssumeRoleCredentialsProvider extends StsCredentialsProvider {
41
- private final AssumeRoleRequest assumeRoleRequest ;
43
+ private Supplier < AssumeRoleRequest > assumeRoleRequestSupplier ;
42
44
43
45
/**
44
46
* @see #builder()
45
47
*/
46
48
private StsAssumeRoleCredentialsProvider (Builder builder ) {
47
49
super (builder , "sts-assume-role-credentials-provider" );
48
- Validate .notNull (builder .assumeRoleRequest , "Assume role request must not be null." );
50
+ Validate .notNull (builder .assumeRoleRequestSupplier , "Assume role request must not be null." );
49
51
50
- this .assumeRoleRequest = builder .assumeRoleRequest ;
52
+ this .assumeRoleRequestSupplier = builder .assumeRoleRequestSupplier ;
51
53
}
52
54
53
55
/**
@@ -59,13 +61,15 @@ public static Builder builder() {
59
61
60
62
@ Override
61
63
protected Credentials getUpdatedCredentials (StsClient stsClient ) {
64
+ AssumeRoleRequest assumeRoleRequest = assumeRoleRequestSupplier .get ();
65
+ Validate .notNull (assumeRoleRequest , "Assume role request must not be null." );
62
66
return stsClient .assumeRole (assumeRoleRequest ).credentials ();
63
67
}
64
68
65
69
@ Override
66
70
public String toString () {
67
71
return ToString .builder ("StsAssumeRoleCredentialsProvider" )
68
- .add ("refreshRequest" , assumeRoleRequest )
72
+ .add ("refreshRequest" , assumeRoleRequestSupplier )
69
73
.build ();
70
74
}
71
75
@@ -75,7 +79,7 @@ public String toString() {
75
79
*/
76
80
@ NotThreadSafe
77
81
public static final class Builder extends BaseBuilder <Builder , StsAssumeRoleCredentialsProvider > {
78
- private AssumeRoleRequest assumeRoleRequest ;
82
+ private Supplier < AssumeRoleRequest > assumeRoleRequestSupplier ;
79
83
80
84
private Builder () {
81
85
super (StsAssumeRoleCredentialsProvider ::new );
@@ -89,7 +93,18 @@ private Builder() {
89
93
* @return This object for chained calls.
90
94
*/
91
95
public Builder refreshRequest (AssumeRoleRequest assumeRoleRequest ) {
92
- this .assumeRoleRequest = assumeRoleRequest ;
96
+ return refreshRequest (() -> assumeRoleRequest );
97
+ }
98
+
99
+ /**
100
+ * Similar to {@link #refreshRequest(AssumeRoleRequest)}, but takes a {@link Supplier} to supply the request to
101
+ * STS.
102
+ *
103
+ * @param assumeRoleRequestSupplier A supplier
104
+ * @return This object for chained calls.
105
+ */
106
+ public Builder refreshRequest (Supplier <AssumeRoleRequest > assumeRoleRequestSupplier ) {
107
+ this .assumeRoleRequestSupplier = assumeRoleRequestSupplier ;
93
108
return this ;
94
109
}
95
110
0 commit comments