diff --git a/README.md b/README.md index 51e1e09..e77d3e3 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,16 @@ Fleet Engine use JSON Web Tokens (JWTs) to both authenticate and authorize incoming requests. This process has several aspects to it and is non-trivial to -set up. +set up. This Fleet Engine Auth Library provides a set of tools to simplify the +setup process. -The Fleet Engine Auth Library provides a set of tools to simplify the setup -process. The functionality is best thought of in two buckets, Fleet Engine Roles -and JWT Signers. +This library provides the following benefits: + +* Simplifies the process of creating Fleet Engine Tokens. +* Provides token signing mechanisms other than using credential files (such as + impersonating a service account.) +* Attaches signed tokens to outbound requests made from either a gRPC stub or + GAPIC client. Sample scripts are provided in the sample directory. To learn more, see: [sample/README.md](sample/README.md). diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsSampleCommands.java b/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsSampleCommands.java index a5e2187..0647bcb 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsSampleCommands.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/LmfsSampleCommands.java @@ -30,6 +30,8 @@ final class LmfsSampleCommands { private LmfsSampleCommands() {} + private static FleetEngineTokenProvider minter; + static void createDeliveryVehicle() throws SignerInitializationException, IOException { String randomDeliveryVehicleId = String.format("delivery-vehicle-%s", UUID.randomUUID()); @@ -66,14 +68,15 @@ static void createDeliveryVehicle() throws SignerInitializationException, IOExce DeliveryServiceSettings settings = new FleetEngineClientSettingsModifier< - DeliveryServiceSettings, DeliveryServiceSettings.Builder>(createMinter()) + DeliveryServiceSettings, DeliveryServiceSettings.Builder>(getMinter()) .updateBuilder(DeliveryServiceSettings.newBuilder()) .setEndpoint(LmfsConfiguration.FLEET_ENGINE_ADDRESS) .build(); - DeliveryServiceClient client = DeliveryServiceClient.create(settings); - client.createDeliveryVehicle(createDeliveryVehicleRequest); - System.out.printf("Delivery Vehicle with id '%s' created\n", randomDeliveryVehicleId); + try (DeliveryServiceClient client = DeliveryServiceClient.create(settings)) { + client.createDeliveryVehicle(createDeliveryVehicleRequest); + System.out.printf("Delivery Vehicle with id '%s' created\n", randomDeliveryVehicleId); + } } static void createTask() throws SignerInitializationException, IOException { @@ -119,14 +122,15 @@ static void createTask() throws SignerInitializationException, IOException { DeliveryServiceSettings settings = new FleetEngineClientSettingsModifier< - DeliveryServiceSettings, DeliveryServiceSettings.Builder>(createMinter()) + DeliveryServiceSettings, DeliveryServiceSettings.Builder>(getMinter()) .updateBuilder(DeliveryServiceSettings.newBuilder()) .setEndpoint(LmfsConfiguration.FLEET_ENGINE_ADDRESS) .build(); - DeliveryServiceClient client = DeliveryServiceClient.create(settings); - client.createTask(createTaskRequest); - System.out.printf("Task with id '%s' created\n", randomTaskId); + try (DeliveryServiceClient client = DeliveryServiceClient.create(settings)) { + client.createTask(createTaskRequest); + System.out.printf("Task with id '%s' created\n", randomTaskId); + } } static void listDeliveryVehicles() throws SignerInitializationException, IOException { @@ -138,13 +142,15 @@ static void listDeliveryVehicles() throws SignerInitializationException, IOExcep DeliveryServiceSettings settings = new FleetEngineClientSettingsModifier< - DeliveryServiceSettings, DeliveryServiceSettings.Builder>(createMinter()) + DeliveryServiceSettings, DeliveryServiceSettings.Builder>(getMinter()) .updateBuilder(DeliveryServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); - DeliveryServiceClient client = DeliveryServiceClient.create(settings); - ListDeliveryVehiclesPagedResponse response = client.listDeliveryVehicles(request); + ListDeliveryVehiclesPagedResponse response; + try (DeliveryServiceClient client = DeliveryServiceClient.create(settings)) { + response = client.listDeliveryVehicles(request); + } for (DeliveryVehicle vehicle : response.getPage().getValues()) { System.out.printf("Delivery Vehicle Name: %s\n", vehicle.getName()); @@ -153,22 +159,25 @@ static void listDeliveryVehicles() throws SignerInitializationException, IOExcep } } - private static FleetEngineTokenProvider createMinter() throws SignerInitializationException { - // Create minter with delivery builder in order to produce lmfs server tokens by default - return AuthTokenMinter.deliveryBuilder() - // Only the account for the server signer is needed in this example - .setDeliveryServerSigner( - ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_SERVER_TOKEN_ACCOUNT)) - - // When the audience is not set, it defaults to https://fleetengine.googleapis.com/. - // This is fine in the vast majority of cases. - .setTokenFactory( - new FleetEngineTokenFactory( - FleetEngineTokenFactorySettings.builder() - .setAudience(LmfsConfiguration.FLEET_ENGINE_AUDIENCE) - .build())) - - // Build the minter - .build(); + private static FleetEngineTokenProvider getMinter() throws SignerInitializationException { + if (minter == null) { + // Create minter with delivery builder in order to produce lmfs server tokens by default + minter = AuthTokenMinter.deliveryBuilder() + // Only the account for the server signer is needed in this example + .setDeliveryServerSigner( + ImpersonatedSigner.create(LmfsConfiguration.DELIVERY_SERVER_TOKEN_ACCOUNT)) + + // When the audience is not set, it defaults to https://fleetengine.googleapis.com/. + // This is fine in the vast majority of cases. + .setTokenFactory( + new FleetEngineTokenFactory( + FleetEngineTokenFactorySettings.builder() + .setAudience(LmfsConfiguration.FLEET_ENGINE_AUDIENCE) + .build())) + + // Build the minter + .build(); + } + return minter; } } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdSampleCommands.java b/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdSampleCommands.java index 003e2b3..98d7b17 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdSampleCommands.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/OdrdSampleCommands.java @@ -42,6 +42,8 @@ final class OdrdSampleCommands { private OdrdSampleCommands() {} + private static FleetEngineTokenProvider minter; + static void createVehicle() throws SignerInitializationException, IOException { String randomVehicleId = String.format("vehicle-%s", UUID.randomUUID()); @@ -85,7 +87,7 @@ static void createVehicle() throws SignerInitializationException, IOException { VehicleServiceSettings settings = new FleetEngineClientSettingsModifier< - VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) + VehicleServiceSettings, VehicleServiceSettings.Builder>(getMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); @@ -128,14 +130,16 @@ static void createTrip() throws SignerInitializationException, IOException { TripServiceSettings settings = new FleetEngineClientSettingsModifier( - createMinter()) + getMinter()) .updateBuilder(TripServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); - TripServiceClient client = TripServiceClient.create(settings); - client.createTrip(request); + try (TripServiceClient client = TripServiceClient.create(settings)) { + client.createTrip(request); + } System.out.printf("Trip with id '%s' created\n", randomTripId); + } static void listVehicles() throws SignerInitializationException, IOException { @@ -147,13 +151,15 @@ static void listVehicles() throws SignerInitializationException, IOException { VehicleServiceSettings settings = new FleetEngineClientSettingsModifier< - VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) + VehicleServiceSettings, VehicleServiceSettings.Builder>(getMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); - VehicleServiceClient client = VehicleServiceClient.create(settings); - ListVehiclesPagedResponse response = client.listVehicles(request); + ListVehiclesPagedResponse response; + try (VehicleServiceClient client = VehicleServiceClient.create(settings)) { + response = client.listVehicles(request); + } for (Vehicle vehicle : response.getPage().getValues()) { System.out.printf("Vehicle Name: %s\n", vehicle.getName()); @@ -188,13 +194,15 @@ static void searchVehicles() throws SignerInitializationException, IOException { VehicleServiceSettings settings = new FleetEngineClientSettingsModifier< - VehicleServiceSettings, VehicleServiceSettings.Builder>(createMinter()) + VehicleServiceSettings, VehicleServiceSettings.Builder>(getMinter()) .updateBuilder(VehicleServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); - VehicleServiceClient client = VehicleServiceClient.create(settings); - SearchVehiclesResponse response = client.searchVehicles(request); + SearchVehiclesResponse response; + try (VehicleServiceClient client = VehicleServiceClient.create(settings)) { + response = client.searchVehicles(request); + } for (VehicleMatch vehicleMatch : response.getMatchesList()) { Vehicle vehicle = vehicleMatch.getVehicle(); System.out.printf("Vehicle Name: %s\n", vehicle.getName()); @@ -216,13 +224,15 @@ static void searchTrips() throws SignerInitializationException, IOException { TripServiceSettings settings = new FleetEngineClientSettingsModifier( - createMinter()) + getMinter()) .updateBuilder(TripServiceSettings.newBuilder()) .setEndpoint(OdrdConfiguration.FLEET_ENGINE_ADDRESS) .build(); - TripServiceClient client = TripServiceClient.create(settings); - SearchTripsPagedResponse response = client.searchTrips(request); + SearchTripsPagedResponse response; + try (TripServiceClient client = TripServiceClient.create(settings)) { + response = client.searchTrips(request); + } for (Trip trip : response.getPage().getValues()) { System.out.printf("Trip Name: %s\n", trip.getName()); @@ -232,20 +242,24 @@ static void searchTrips() throws SignerInitializationException, IOException { } } - private static FleetEngineTokenProvider createMinter() throws SignerInitializationException { - return AuthTokenMinter.builder() - // Only the account for the server signer is needed in this example - .setServerSigner(ImpersonatedSigner.create(OdrdConfiguration.SERVER_TOKEN_ACCOUNT)) - - // When the audience is not set, it defaults to https://fleetengine.googleapis.com/. - // This is fine in the vast majority of cases. - .setTokenFactory( - new FleetEngineTokenFactory( - FleetEngineTokenFactorySettings.builder() - .setAudience(OdrdConfiguration.FLEET_ENGINE_AUDIENCE) - .build())) - - // Build the minter - .build(); + private static FleetEngineTokenProvider getMinter() throws SignerInitializationException { + // Only create one minter across all calls to Fleet Engine + if (minter == null) { + minter = AuthTokenMinter.builder() + // Only the account for the server signer is needed in this example + .setServerSigner(ImpersonatedSigner.create(OdrdConfiguration.SERVER_TOKEN_ACCOUNT)) + + // When the audience is not set, it defaults to https://fleetengine.googleapis.com/. + // This is fine in the vast majority of cases. + .setTokenFactory( + new FleetEngineTokenFactory( + FleetEngineTokenFactorySettings.builder() + .setAudience(OdrdConfiguration.FLEET_ENGINE_AUDIENCE) + .build())) + + // Build the minter + .build(); + } + return minter; } } diff --git a/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java b/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java index ab22a72..f2baf1b 100644 --- a/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java +++ b/sample/src/main/java/com/google/fleetengine/auth/sample/SampleApp.java @@ -20,12 +20,16 @@ /** Sample app for auth library. */ public final class SampleApp { + private static final String ANSI_GREEN = "\u001B[32m"; + private static final String ANSI_RED = "\u001B[31m"; + private static final String ANSI_RESET = "\u001B[0m"; private SampleApp() {} /** Entry point. */ public static void main(String[] args) throws Throwable { - System.out.println( + while (true) { + System.out.println( "\n\n\n=== Choose example: ===\n" + "0. Validate Configured ODRD Roles\n" + "1. Create Vehicle\n" @@ -37,43 +41,67 @@ public static void main(String[] args) throws Throwable { + "10. Validate Configured LMFS Roles\n" + "11. Create Delivery Vehicle\n" + "12. Create Task\n" - + "13. List Delivery Vehicles\n"); - Scanner scanner = new Scanner(System.in, UTF_8.name()); - int choice = scanner.nextInt(); + + "13. List Delivery Vehicles\n" + + "----------------------------------------\n" + + "100. Run all commands\n"); + Scanner scanner = new Scanner(System.in, UTF_8.name()); + int choice = scanner.nextInt(); + switch (choice) { + case 0: + ValidateOdrdRoles.run(); + break; + case 1: + OdrdSampleCommands.createVehicle(); + break; + case 2: + OdrdSampleCommands.createTrip(); + break; + case 3: + OdrdSampleCommands.listVehicles(); + break; + case 4: + OdrdSampleCommands.searchVehicles(); + break; + case 5: + OdrdSampleCommands.searchTrips(); + break; + case 10: + ValidateLmfsRoles.run(); + break; + case 11: + LmfsSampleCommands.createDeliveryVehicle(); + break; + case 12: + LmfsSampleCommands.createTask(); + break; + case 13: + LmfsSampleCommands.listDeliveryVehicles(); + break; + case 100: + runAll(); + break; + default: + throw new IllegalArgumentException("Invalid choice provided."); + } + } + } - switch (choice) { - case 0: - ValidateOdrdRoles.run(); - break; - case 1: - OdrdSampleCommands.createVehicle(); - break; - case 2: - OdrdSampleCommands.createTrip(); - break; - case 3: - OdrdSampleCommands.listVehicles(); - break; - case 4: - OdrdSampleCommands.searchVehicles(); - break; - case 5: - OdrdSampleCommands.searchTrips(); - break; - case 10: - ValidateLmfsRoles.run(); - break; - case 11: - LmfsSampleCommands.createDeliveryVehicle(); - break; - case 12: - LmfsSampleCommands.createTask(); - break; - case 13: - LmfsSampleCommands.listDeliveryVehicles(); - break; - default: - throw new IllegalArgumentException("Invalid choice provided."); + private static void runAll() throws Throwable { + try { + ValidateOdrdRoles.run(); + OdrdSampleCommands.createVehicle(); + OdrdSampleCommands.createTrip(); + OdrdSampleCommands.listVehicles(); + OdrdSampleCommands.searchVehicles(); + OdrdSampleCommands.searchTrips(); + ValidateLmfsRoles.run(); + LmfsSampleCommands.createDeliveryVehicle(); + LmfsSampleCommands.createTask(); + LmfsSampleCommands.listDeliveryVehicles(); + } catch (Exception ex) { + System.out.printf("%sRUN ALL FAILED, EXITING...%s\n", ANSI_RED, ANSI_RESET); + throw ex; } + System.out.printf("%sRUN ALL SUCCEEDED%s\n", ANSI_GREEN, ANSI_RESET); } } diff --git a/version.properties b/version.properties index 06bae60..de44690 100644 --- a/version.properties +++ b/version.properties @@ -15,5 +15,5 @@ ################################################################################ # Used by conventional commits in github. Do not touch. -libVersion=1.8.0 +libVersion=1.9.0 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy