Skip to content

Commit

Permalink
Abstract some common bindings of TrinoAwsProxyServerModule
Browse files Browse the repository at this point in the history
Abstract new static methods so portions of module can be used
in other contexts
  • Loading branch information
Randgalt committed Jan 27, 2025
1 parent 6ad6677 commit 09d5c7f
Showing 1 changed file with 41 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,38 @@ public class TrinoAwsProxyServerModule
{
private static final Logger log = Logger.get(TrinoAwsProxyServerModule.class);

public static void commonBindings(Binder binder)
{
configBinder(binder).bindConfig(RequestLoggerConfig.class);

JaxrsBinder jaxrsBinder = jaxrsBinder(binder);
jaxrsBinder.bind(ParamProvider.class);
jaxrsBinder.bind(ResourceSecurityDynamicFeature.class);

binder.bind(CredentialsController.class).in(Scopes.SINGLETON);
binder.bind(RequestLoggerController.class).in(Scopes.SINGLETON);

// CredentialsProvider binder
configBinder(binder).bindConfig(CredentialsProviderConfig.class);
newOptionalBinder(binder, CredentialsProvider.class).setDefault().toProvider(() -> {
log.info("Using default %s NOOP implementation", CredentialsProvider.class.getSimpleName());
return CredentialsProvider.NOOP;
});
newOptionalBinder(binder, new TypeLiteral<Class<? extends Identity>>() {}).setDefault().toProvider(() -> {
log.info("Using %s identity type", StandardIdentity.class.getSimpleName());
return StandardIdentity.class;
});
newSetBinder(binder, com.fasterxml.jackson.databind.Module.class).addBinding().toProvider(JsonIdentityProvider.class).in(Scopes.SINGLETON);

// AssumedRoleProvider binder
configBinder(binder).bindConfig(AssumedRoleProviderConfig.class);
// AssumedRoleProvider provided implementations
newOptionalBinder(binder, AssumedRoleProvider.class).setDefault().toProvider(() -> {
log.info("Using default %s NOOP implementation", AssumedRoleProvider.class.getSimpleName());
return AssumedRoleProvider.NOOP;
});
}

@Provides
@Singleton
public RemoteUriFacade remoteUriFacade(RemoteS3Facade remoteS3Facade)
Expand All @@ -96,22 +128,20 @@ public RemoteUriFacade remoteUriFacade(RemoteS3Facade remoteS3Facade)
@Override
protected void setup(Binder binder)
{
configBinder(binder).bindConfig(RequestLoggerConfig.class);
commonBindings(binder);

configBinder(binder).bindConfig(SigningControllerConfig.class);
TrinoAwsProxyConfig builtConfig = buildConfigObject(TrinoAwsProxyConfig.class);

JaxrsBinder jaxrsBinder = jaxrsBinder(binder);

jaxrsBinder.bind(ThrowableMapper.class);
jaxrsBinder.bind(ParamProvider.class);
jaxrsBinder.bind(ResourceSecurityDynamicFeature.class);

bindResourceAtPath(jaxrsBinder, TrinoS3Resource.class, builtConfig.getS3Path());
bindResourceAtPath(jaxrsBinder, TrinoStsResource.class, builtConfig.getStsPath());
bindResourceAtPath(jaxrsBinder, TrinoLogsResource.class, builtConfig.getLogsPath());
bindResourceAtPath(jaxrsBinder, TrinoStatusResource.class, builtConfig.getStatusPath());

binder.bind(CredentialsController.class).in(Scopes.SINGLETON);
binder.bind(RequestLoggerController.class).in(Scopes.SINGLETON);
binder.bind(LimitStreamController.class).in(Scopes.SINGLETON);

// TODO config, etc.
Expand All @@ -129,18 +159,6 @@ protected void setup(Binder binder)
return S3SecurityFacadeProvider.NOOP;
});

// CredentialsProvider binder
configBinder(binder).bindConfig(CredentialsProviderConfig.class);
newOptionalBinder(binder, CredentialsProvider.class).setDefault().toProvider(() -> {
log.info("Using default %s NOOP implementation", CredentialsProvider.class.getSimpleName());
return CredentialsProvider.NOOP;
});
newOptionalBinder(binder, new TypeLiteral<Class<? extends Identity>>() {}).setDefault().toProvider(() -> {
log.info("Using %s identity type", StandardIdentity.class.getSimpleName());
return StandardIdentity.class;
});
newSetBinder(binder, com.fasterxml.jackson.databind.Module.class).addBinding().toProvider(JsonIdentityProvider.class).in(Scopes.SINGLETON);

// RequestRewriter binder
configBinder(binder).bindConfig(S3RequestRewriterConfig.class);
newOptionalBinder(binder, S3RequestRewriter.class).setDefault().toProvider(() -> {
Expand All @@ -153,14 +171,6 @@ protected void setup(Binder binder)
install(new OpaS3SecurityModule());
install(new HttpCredentialsModule());

// AssumedRoleProvider binder
configBinder(binder).bindConfig(AssumedRoleProviderConfig.class);
// AssumedRoleProvider provided implementations
newOptionalBinder(binder, AssumedRoleProvider.class).setDefault().toProvider(() -> {
log.info("Using default %s NOOP implementation", AssumedRoleProvider.class.getSimpleName());
return AssumedRoleProvider.NOOP;
});

// RemoteS3 binder
newOptionalBinder(binder, RemoteS3Facade.class);
// RemoteS3 provided implementation
Expand Down Expand Up @@ -188,6 +198,12 @@ public XmlMapper newXmlMapper()
return xmlMapper;
}

public static void bindResourceAtPath(JaxrsBinder jaxrsBinder, Class<?> resourceClass, String resourcePrefix)
{
jaxrsBinder.bind(resourceClass);
jaxrsBinder.bindInstance(Resource.builder(resourceClass).path(resourcePrefix).build());
}

@VisibleForTesting
protected void installS3SecurityController(Binder binder)
{
Expand Down Expand Up @@ -224,10 +240,4 @@ private void installPlugins()
install(plugin.module());
});
}

private static void bindResourceAtPath(JaxrsBinder jaxrsBinder, Class<?> resourceClass, String resourcePrefix)
{
jaxrsBinder.bind(resourceClass);
jaxrsBinder.bindInstance(Resource.builder(resourceClass).path(resourcePrefix).build());
}
}

0 comments on commit 09d5c7f

Please sign in to comment.