/** * Set the {@link SessionConfiguration} information */ public Builder setSessionConfiguration(SessionConfiguration configuration) { if (scopes != null) { this.scopes = new HashSet<>(configuration.getScopes()); } if (customScopes != null) { this.customScopes = new HashSet<>(configuration.getCustomScopes()); } this.clientId = configuration.getClientId(); this.clientSecret = configuration.getClientSecret(); this.redirectUri = configuration.getRedirectUri(); this.loginHost = configuration.getLoginHost(); return this; }
@Override public Response intercept(Chain chain) throws IOException { Request.Builder requestBuilder = chain.request().newBuilder(); requestBuilder.addHeader(HEADER_ACCEPT_LANGUAGE, authenticator.getSessionConfiguration().getLocale().getLanguage()); requestBuilder.addHeader(HEADER_USER_AGENT, "Java Rides SDK v" + LIB_VERSION); authenticator.signRequest(requestBuilder); return chain.proceed(requestBuilder.build()); }
return new SessionConfiguration( clientId, clientSecret,
/** * Creates an {@link OAuth2Credentials} object that can be used by any of the servlets. * * Throws an {@throws IOException} when no client ID or secret found in secrets.properties */ static OAuth2Credentials createOAuth2Credentials(SessionConfiguration config) throws IOException { return new OAuth2Credentials.Builder() .setCredentialDataStoreFactory(MemoryDataStoreFactory.getDefaultInstance()) .setRedirectUri(config.getRedirectUri()) .setScopes(config.getScopes()) .setClientSecrets(config.getClientId(), config.getClientSecret()) .build(); }
/** * Creates an {@link OAuth2Credentials} object that can be used by any of the servlets. */ public static OAuth2Credentials createOAuth2Credentials(SessionConfiguration sessionConfiguration) throws Exception { // Store the users OAuth2 credentials in their home directory. File credentialDirectory = new File(System.getProperty("user.home") + File.separator + ".uber_credentials"); credentialDirectory.setReadable(true, true); credentialDirectory.setWritable(true, true); // If you'd like to store them in memory or in a DB, any DataStoreFactory can be used. AbstractDataStoreFactory dataStoreFactory = new FileDataStoreFactory(credentialDirectory); // Build an OAuth2Credentials object with your secrets. return new OAuth2Credentials.Builder() .setCredentialDataStoreFactory(dataStoreFactory) .setRedirectUri(sessionConfiguration.getRedirectUri()) .setClientSecrets(sessionConfiguration.getClientId(), sessionConfiguration.getClientSecret()) .build(); }
@Test public void newBuilder_copiesConfiguration() throws Exception { SessionConfiguration config = new SessionConfiguration.Builder() .setClientId("clientId") .setRedirectUri("test") .build(); SessionConfiguration config2 = config.newBuilder().setClientId("clientId2").build(); assertEquals("clientId", config.getClientId()); assertEquals("clientId2", config2.getClientId()); assertEquals("test", config2.getRedirectUri()); }
AccessToken refreshToken(AccessToken auth2Token) throws IOException { AccessToken newToken = auth2Service.refresh(auth2Token.getRefreshToken(), sessionConfiguration.getClientId()) .execute().body(); tokenStorage.setAccessToken(newToken); return newToken; }
@Before public void setup() { MockitoAnnotations.initMocks(this); when(session.getAuthenticator()).thenReturn(authenticator); when(authenticator.getSessionConfiguration()).thenReturn(config); when(config.getLocale()).thenReturn(Locale.US); when(config.getEndpointHost()).thenReturn("http://api.uber.com"); }
Retrofit createRetrofit(OkHttpClient client, Session session) { Moshi moshi = new Moshi.Builder().add(new BigDecimalAdapter()).build(); return new Retrofit.Builder() .addConverterFactory(MoshiConverterFactory.create(moshi)) .baseUrl(session.getAuthenticator().getSessionConfiguration().getEndpointHost()) .client(client) .build(); } }
public AccessTokenAuthenticator(SessionConfiguration sessionConfiguration, AccessTokenStorage tokenStorage) { this(sessionConfiguration, tokenStorage, createOAuthService(String.format(TOKEN_URL, sessionConfiguration.getLoginHost()))); }
@Test public void getRedirectUri_whenSetOnBuilder_setsOnConfiguration() throws Exception { SessionConfiguration config = new SessionConfiguration.Builder() .setClientId("clientId") .setRedirectUri("redirectUri") .build(); assertEquals("redirectUri", config.getRedirectUri()); }
@Test public void getScopes_whenSetOnBuilder_setsOnConfiguration() throws Exception { List<Scope> scopes = Arrays.asList(Scope.ALL_TRIPS, Scope.HISTORY); SessionConfiguration config = new SessionConfiguration.Builder() .setClientId("clientId") .setScopes(scopes) .build(); assertTrue(scopes.containsAll(config.getScopes())); }
@Override public void signRequest(Request.Builder builder) { ApiInterceptor.setAuthorizationHeader(builder, String.format(HEADER_TOKEN_ACCESS_VALUE, sessionConfiguration.getServerToken())); }
AccessToken refreshToken(AccessToken auth2Token) throws IOException { AccessToken newToken = auth2Service.refresh(auth2Token.getRefreshToken(), sessionConfiguration.getClientId()) .execute().body(); tokenStorage.setAccessToken(newToken); return newToken; }
Retrofit createRetrofit(OkHttpClient client, Session session) { Moshi moshi = new Moshi.Builder().add(new BigDecimalAdapter()).build(); return new Retrofit.Builder() .addConverterFactory(MoshiConverterFactory.create(moshi)) .baseUrl(session.getAuthenticator().getSessionConfiguration().getEndpointHost()) .client(client) .build(); } }
public AccessTokenAuthenticator(SessionConfiguration sessionConfiguration, AccessTokenStorage tokenStorage) { this(sessionConfiguration, tokenStorage, createOAuthService(String.format(TOKEN_URL, sessionConfiguration.getLoginHost()))); }
@Override public void signRequest(Request.Builder builder) { ApiInterceptor.setAuthorizationHeader(builder, String.format(HEADER_TOKEN_ACCESS_VALUE, sessionConfiguration.getServerToken())); }
@Test public void testRefreshToken() throws Exception { when(accessToken.getRefreshToken()).thenReturn("refresh"); when(config.getClientId()).thenReturn("clientId"); when(service.refresh(eq("refresh"), eq("clientId"))).thenReturn(serviceResult); when(serviceResult.execute()).thenReturn(retrofit2.Response.success(accessToken)); assertEquals(accessToken, authenticator.refreshToken(accessToken)); verify(accessTokenStorage).setAccessToken(accessToken); }
@Test public void buildSession_whenProductionEnv_shouldGiveProductionEndpointHost() throws Exception { SessionConfiguration sessionConfig = new SessionConfiguration.Builder() .setClientId("clientId") .setEnvironment(PRODUCTION).build(); assertEquals("https://api.uber.com", sessionConfig.getEndpointHost()); }
@Override public Response intercept(Chain chain) throws IOException { Request.Builder requestBuilder = chain.request().newBuilder(); requestBuilder.addHeader(HEADER_ACCEPT_LANGUAGE, authenticator.getSessionConfiguration().getLocale().getLanguage()); requestBuilder.addHeader(HEADER_USER_AGENT, "Java Rides SDK v" + LIB_VERSION); authenticator.signRequest(requestBuilder); return chain.proceed(requestBuilder.build()); }