Skip to content

Commit 4bc1704

Browse files
danielfbrightcopybara-github
authored andcommitted
feat: added simpler mechanism to generate delivery tokens
Committer: @danielfbright PiperOrigin-RevId: 435100347
1 parent 8400b3b commit 4bc1704

File tree

3 files changed

+82
-4
lines changed

3 files changed

+82
-4
lines changed

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ minting tokens straightforward.
113113

114114
To use, first associate a `Signer` with a service account and a type of token.
115115

116-
For example:
116+
For example, when creating tokens for use with the On Demand Rides and Deliveries APIs:
117117

118118
```java
119119
AuthTokenMinter minter = AuthTokenMinter.builder()
@@ -123,6 +123,18 @@ AuthTokenMinter minter = AuthTokenMinter.builder()
123123
.build();
124124
```
125125

126+
When creating tokens for use with the Last Mile Fleet Services, use:
127+
128+
```java
129+
AuthTokenMinter minter = AuthTokenMinter.deliveryBuilder()
130+
.setDeliveryServerSigner(DefaultServiceAccountSigner.create())
131+
.setDeliveryConsumerSigner(ImpersonatedAccountSignerCredentials.create("delivery-consumer@gcp-project.com")
132+
.setUntrustedDeliveryDriverSigner(ImpersonatedAccountSignerCredentials.create("untrusted-delivery-driver-signer@gcp-project.iam.gserviceaccount.com")
133+
.setTrustedDeliveryDriverSigner(ImpersonatedAccountSignerCredentials.create("trusted-delivery-driver-signer@gcp-project.iam.gserviceaccount.com")
134+
.setDeliveryFleetReaderSigner(ImpersonatedAccountSignerCredentials.create("delivery-fleet-reader@gcp-project.iam.gserviceaccount.com")
135+
.build();
136+
```
137+
126138
The minter provides a getter method for each of the token types. Each getter
127139
returns an instance of `com.google.fleetengine.auth.token.FleetEngineToken`:
128140

src/main/java/com/google/fleetengine/auth/AuthTokenMinter.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,35 @@ public abstract class AuthTokenMinter implements FleetEngineTokenProvider {
101101
/** Authorization state manager responsible for caching signed JWTs. */
102102
public abstract FleetEngineAuthTokenStateManager tokenStateManager();
103103

104+
/** Specifies which server signer to use by default. */
105+
abstract DefaultServerTokenType defaultServerTokenType();
106+
104107
/**
105-
* Provides a builder for FleetEngineToken.
108+
* Provides a builder for FleetEngineToken. Signs with {@link #serverSigner()} when acting as
109+
* {@link FleetEngineTokenProvider}.
106110
*
107111
* <p>{@link NaiveAuthStateManager} set as default state manager.
108112
*/
109113
public static AuthTokenMinter.Builder builder() {
110114
FleetEngineTokenFactorySettings settings = FleetEngineTokenFactorySettings.builder().build();
111115
return new AutoValue_AuthTokenMinter.Builder()
112116
.setTokenStateManager(new NaiveAuthStateManager())
113-
.setTokenFactory(new FleetEngineTokenFactory(settings));
117+
.setTokenFactory(new FleetEngineTokenFactory(settings))
118+
.setDefaultServerTokenType(DefaultServerTokenType.ODRD);
119+
}
120+
121+
/**
122+
* Provides a builder for FleetEngineToken.<br>
123+
* Signs with {@link #deliveryServerSigner()} when acting as {@link FleetEngineTokenProvider}.
124+
*
125+
* <p>{@link NaiveAuthStateManager} set as default state manager.
126+
*/
127+
public static AuthTokenMinter.Builder deliveryBuilder() {
128+
FleetEngineTokenFactorySettings settings = FleetEngineTokenFactorySettings.builder().build();
129+
return new AutoValue_AuthTokenMinter.Builder()
130+
.setTokenStateManager(new NaiveAuthStateManager())
131+
.setTokenFactory(new FleetEngineTokenFactory(settings))
132+
.setDefaultServerTokenType(DefaultServerTokenType.LMFS);
114133
}
115134

116135
/**
@@ -352,6 +371,9 @@ public FleetEngineToken getCustomToken(FleetEngineTokenClaims claims)
352371
/** Returns a non-expired server token with a base64 signed JWT. */
353372
@Override
354373
public FleetEngineToken getSignedToken() throws SigningTokenException {
374+
if (defaultServerTokenType() == DefaultServerTokenType.LMFS) {
375+
return getDeliveryServerToken();
376+
}
355377
return getServerToken();
356378
}
357379

@@ -397,15 +419,28 @@ public abstract static class Builder {
397419
public abstract Builder setTokenFactory(TokenFactory tokenFactory);
398420

399421
/**
400-
* Sets the authorization state manager responsible for caching signed JWTs
422+
* Sets the authorization state manager responsible for caching signed JWTs.
401423
*
402424
* <p>By default, uses a naive manager that only caches server tokens.
403425
*
404426
* @param manager manager providing valid tokens
405427
*/
406428
public abstract Builder setTokenStateManager(FleetEngineAuthTokenStateManager manager);
407429

430+
/**
431+
* Specifies whether to provide default Odrd or Lmfs token by default.
432+
*
433+
* @param defaultServerTokenType specifies the type of token to produce by default
434+
*/
435+
abstract Builder setDefaultServerTokenType(DefaultServerTokenType defaultServerTokenType);
436+
408437
/** Builds {@link AuthTokenMinter}. */
409438
public abstract AuthTokenMinter build();
410439
}
440+
441+
/** Used internally to specify whether to provide ODRD or LMFS tokens by default. */
442+
enum DefaultServerTokenType {
443+
ODRD,
444+
LMFS;
445+
}
411446
}

src/test/java/com/google/fleetengine/auth/AuthTokenMinterTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,37 @@ public void setup() {
9191
.build();
9292
}
9393

94+
@Test
95+
public void getSignedToken_whenServerSignerSet_signsWithSetServerSigner()
96+
throws SigningTokenException {
97+
AuthTokenMinter baseFleetEngineAuth =
98+
defaultFleetEngineAuthBuilder.setServerSigner(serverSigner).build();
99+
when(tokenFactory.createServerToken()).thenReturn(fleetEngineToken);
100+
101+
baseFleetEngineAuth.getServerToken();
102+
103+
verify(authStateManager, times(1)).signToken(eq(serverSigner), eq(fleetEngineToken));
104+
}
105+
106+
@Test
107+
public void getSignedToken_whenDeliveryBuilder_signsWithSetDeliveryServerSigner()
108+
throws SigningTokenException {
109+
AuthTokenMinter.Builder defaultDeliveryFleetEngineAuthBuilder =
110+
// Use delivery builder method
111+
AuthTokenMinter.deliveryBuilder()
112+
.setDeliveryServerSigner(deliveryServerSigner)
113+
.setTokenStateManager(authStateManager)
114+
.setTokenFactory(tokenFactory);
115+
116+
AuthTokenMinter baseFleetEngineAuth =
117+
defaultDeliveryFleetEngineAuthBuilder.setDeliveryServerSigner(deliveryServerSigner).build();
118+
when(tokenFactory.createDeliveryServerToken()).thenReturn(fleetEngineToken);
119+
120+
baseFleetEngineAuth.getSignedToken();
121+
122+
verify(authStateManager, times(1)).signToken(eq(deliveryServerSigner), eq(fleetEngineToken));
123+
}
124+
94125
@Test
95126
public void getServerToken_whenServerSignerSet_signsWithSetServerSigner()
96127
throws SigningTokenException {

0 commit comments

Comments
 (0)