Search in sources :

Example 1 with AuthServiceExtension

use of org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension in project data-transfer-project by google.

the class ApiMain method initializeHttps.

public void initializeHttps(TrustManagerFactory trustManagerFactory, KeyManagerFactory keyManagerFactory) {
    // TODO init with types
    TypeManager typeManager = new TypeManagerImpl();
    typeManager.registerTypes(TokenAuthData.class, TokensAndUrlAuthData.class, TokenSecretAuthData.class);
    SettingsExtension settingsExtension = getSettingsExtension();
    settingsExtension.initialize(null);
    ApiExtensionContext extensionContext = new ApiExtensionContext(typeManager, settingsExtension);
    // Services that need to be shared between authServiceExtensions or load types in the
    // typemanager get initialized first.
    ServiceLoader.load(ServiceExtension.class).iterator().forEachRemaining(serviceExtension -> serviceExtension.initialize(extensionContext));
    CloudExtension cloudExtension = getCloudExtension();
    cloudExtension.initialize(extensionContext);
    // Needed for GoogleAuthServiceExtension
    extensionContext.registerService(HttpTransport.class, new NetHttpTransport());
    extensionContext.registerService(JobStore.class, cloudExtension.getJobStore());
    extensionContext.registerService(AppCredentialStore.class, cloudExtension.getAppCredentialStore());
    // TODO: Load up only "enabled" services
    List<AuthServiceExtension> authServiceExtensions = new ArrayList<>();
    ServiceLoader.load(AuthServiceExtension.class).iterator().forEachRemaining((authServiceExtension) -> {
        authServiceExtension.initialize(extensionContext);
        authServiceExtensions.add(authServiceExtension);
    });
    // TODO: make configurable
    SymmetricKeyGenerator keyGenerator = new AesSymmetricKeyGenerator();
    TokenManager tokenManager;
    try {
        // TODO: we store the JWT Token with the application credentials, but dont need to have a key
        // consider using a blobstore type of thing or allowing the AppCredentialStore to return a
        // cred that doesn't contain a key.
        tokenManager = new JWTTokenManager(cloudExtension.getAppCredentialStore().getAppCredentials(JWTTokenManager.JWT_KEY_NAME, JWTTokenManager.JWT_SECRET_NAME).getSecret());
    } catch (IOException e) {
        logger.error("Unable to initialize JWTTokenManager, did you specify a JWT_KEY and JWT_SECRET?");
        throw new RuntimeException(e);
    }
    Injector injector = Guice.createInjector(new ApiServicesModule(typeManager, cloudExtension.getJobStore(), keyGenerator, trustManagerFactory, keyManagerFactory, authServiceExtensions, tokenManager), new ReferenceApiModule(extensionContext));
    // Launch the application
    // TODO: Support other server implementations, e.g. Jetty, Tomcat
    server = injector.getInstance(ReferenceApiServer.class);
}
Also used : ArrayList(java.util.ArrayList) JWTTokenManager(org.dataportabilityproject.gateway.reference.JWTTokenManager) TypeManagerImpl(org.dataportabilityproject.launcher.impl.TypeManagerImpl) IOException(java.io.IOException) ReferenceApiServer(org.dataportabilityproject.gateway.reference.ReferenceApiServer) SettingsExtension(org.dataportabilityproject.config.extension.SettingsExtension) CloudExtension(org.dataportabilityproject.spi.cloud.extension.CloudExtension) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) SymmetricKeyGenerator(org.dataportabilityproject.security.SymmetricKeyGenerator) AesSymmetricKeyGenerator(org.dataportabilityproject.security.AesSymmetricKeyGenerator) Injector(com.google.inject.Injector) TypeManager(org.dataportabilityproject.api.launcher.TypeManager) AesSymmetricKeyGenerator(org.dataportabilityproject.security.AesSymmetricKeyGenerator) AuthServiceExtension(org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension) TokenManager(org.dataportabilityproject.gateway.reference.TokenManager) JWTTokenManager(org.dataportabilityproject.gateway.reference.JWTTokenManager) ReferenceApiModule(org.dataportabilityproject.gateway.reference.ReferenceApiModule)

Example 2 with AuthServiceExtension

use of org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension in project data-transfer-project by google.

the class PortabilityAuthServiceProviderRegistry method getAuthDataGenerator.

@Override
public AuthDataGenerator getAuthDataGenerator(String serviceId, String transferDataType, AuthMode mode) {
    AuthServiceExtension provider = authServiceProviderMap.get(serviceId);
    Preconditions.checkArgument(provider != null, "AuthServiceExtension not found for serviceId [%s]", serviceId);
    switch(mode) {
        case EXPORT:
            Preconditions.checkArgument(supportedExportTypes.contains(transferDataType), "AuthMode [%s] not valid for TransferDataType [%s]", mode, transferDataType);
            break;
        case IMPORT:
            Preconditions.checkArgument(supportedImportTypes.contains(transferDataType), "AuthMode [%s] not valid for TransferDataType [%s]", mode, transferDataType);
            break;
        default:
            throw new IllegalArgumentException("AuthMode [" + mode + "] not supported");
    }
    return provider.getAuthDataGenerator(transferDataType, mode);
}
Also used : AuthServiceExtension(org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension)

Example 3 with AuthServiceExtension

use of org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension in project data-transfer-project by google.

the class PortabilityAuthServiceExtensionRegistryTest method requireImportAndExportTest.

@Test
public void requireImportAndExportTest() {
    List<String> supportedImportTypes = ImmutableList.of("photos", "contacts");
    List<String> supportedExportTypes = ImmutableList.of("contacts");
    AuthServiceExtension mockAuthProvider = mock(AuthServiceExtension.class);
    when(mockAuthProvider.getExportTypes()).thenReturn(supportedExportTypes);
    when(mockAuthProvider.getImportTypes()).thenReturn(supportedImportTypes);
    when(mockAuthProvider.getServiceId()).thenReturn("mockAuthProvider");
    thrown.expect(IllegalArgumentException.class);
    thrown.expectMessage("available for import but not export");
    AuthServiceProviderRegistry registry = new PortabilityAuthServiceProviderRegistry(ImmutableMap.of("mockServiceProvider", mockAuthProvider));
}
Also used : PortabilityAuthServiceProviderRegistry(org.dataportabilityproject.gateway.PortabilityAuthServiceProviderRegistry) PortabilityAuthServiceProviderRegistry(org.dataportabilityproject.gateway.PortabilityAuthServiceProviderRegistry) AuthServiceExtension(org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension) Test(org.junit.Test)

Aggregations

AuthServiceExtension (org.dataportabilityproject.spi.gateway.auth.extension.AuthServiceExtension)3 NetHttpTransport (com.google.api.client.http.javanet.NetHttpTransport)1 Injector (com.google.inject.Injector)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 TypeManager (org.dataportabilityproject.api.launcher.TypeManager)1 SettingsExtension (org.dataportabilityproject.config.extension.SettingsExtension)1 PortabilityAuthServiceProviderRegistry (org.dataportabilityproject.gateway.PortabilityAuthServiceProviderRegistry)1 JWTTokenManager (org.dataportabilityproject.gateway.reference.JWTTokenManager)1 ReferenceApiModule (org.dataportabilityproject.gateway.reference.ReferenceApiModule)1 ReferenceApiServer (org.dataportabilityproject.gateway.reference.ReferenceApiServer)1 TokenManager (org.dataportabilityproject.gateway.reference.TokenManager)1 TypeManagerImpl (org.dataportabilityproject.launcher.impl.TypeManagerImpl)1 AesSymmetricKeyGenerator (org.dataportabilityproject.security.AesSymmetricKeyGenerator)1 SymmetricKeyGenerator (org.dataportabilityproject.security.SymmetricKeyGenerator)1 CloudExtension (org.dataportabilityproject.spi.cloud.extension.CloudExtension)1 Test (org.junit.Test)1