Skip to content

Commit 24c5542

Browse files
authored
Merge pull request #492 from bonitoo-io/basic_auth
Support for Basic Authentication, closes #449
2 parents f31b2fd + 090864f commit 24c5542

File tree

5 files changed

+54
-49
lines changed

5 files changed

+54
-49
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## 2.13 [unreleased]
44

5+
### Features
6+
7+
- Support for Basic Authentication [PR #492](https://github.com/influxdata/influxdb-java/pull/492)
58

69
## 2.12 [2018-07-31]
710

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.influxdb.impl;
2+
3+
import java.io.IOException;
4+
5+
import okhttp3.Credentials;
6+
import okhttp3.Interceptor;
7+
import okhttp3.Request;
8+
import okhttp3.Response;
9+
10+
public class BasicAuthInterceptor implements Interceptor {
11+
12+
private String credentials;
13+
14+
public BasicAuthInterceptor(final String user, final String password) {
15+
credentials = Credentials.basic(user, password);
16+
}
17+
18+
@Override
19+
public Response intercept(final Chain chain) throws IOException {
20+
Request request = chain.request();
21+
Request authenticatedRequest = request.newBuilder().header("Authorization", credentials).build();
22+
return chain.proceed(authenticatedRequest);
23+
}
24+
}

src/main/java/org/influxdb/impl/InfluxDBImpl.java

+16-33
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ public class InfluxDBImpl implements InfluxDB {
7979
private static final LogLevel LOG_LEVEL = LogLevel.parseLogLevel(System.getProperty(LOG_LEVEL_PROPERTY));
8080

8181
private final InetAddress hostAddress;
82-
private final String username;
83-
private final String password;
8482
private String version;
8583
private final Retrofit retrofit;
8684
private final InfluxDBService influxDBService;
@@ -119,16 +117,14 @@ public InfluxDBImpl(final String url, final String username, final String passwo
119117
final ResponseFormat responseFormat) {
120118
this.messagePack = ResponseFormat.MSGPACK.equals(responseFormat);
121119
this.hostAddress = parseHostAddress(url);
122-
this.username = username;
123-
this.password = password;
124120

125121
this.loggingInterceptor = new HttpLoggingInterceptor();
126122
setLogLevel(LOG_LEVEL);
127123

128124
this.gzipRequestInterceptor = new GzipRequestInterceptor();
129125
OkHttpClient.Builder clonedBuilder = client.build().newBuilder();
130-
clonedBuilder.addInterceptor(loggingInterceptor).addInterceptor(gzipRequestInterceptor);
131-
126+
clonedBuilder.addInterceptor(loggingInterceptor).addInterceptor(gzipRequestInterceptor).
127+
addInterceptor(new BasicAuthInterceptor(username, password));
132128
Factory converterFactory = null;
133129
switch (responseFormat) {
134130
case MSGPACK:
@@ -167,16 +163,15 @@ public InfluxDBImpl(final String url, final String username, final String passwo
167163
super();
168164
this.messagePack = false;
169165
this.hostAddress = parseHostAddress(url);
170-
this.username = username;
171-
this.password = password;
172166

173167
this.loggingInterceptor = new HttpLoggingInterceptor();
174168
setLogLevel(LOG_LEVEL);
175169

176170
this.gzipRequestInterceptor = new GzipRequestInterceptor();
177171
OkHttpClient.Builder clonedBuilder = client.build().newBuilder();
178172
this.retrofit = new Retrofit.Builder().baseUrl(url)
179-
.client(clonedBuilder.addInterceptor(loggingInterceptor).addInterceptor(gzipRequestInterceptor).build())
173+
.client(clonedBuilder.addInterceptor(loggingInterceptor).addInterceptor(gzipRequestInterceptor).
174+
addInterceptor(new BasicAuthInterceptor(username, password)).build())
180175
.addConverterFactory(MoshiConverterFactory.create()).build();
181176
this.influxDBService = influxDBService;
182177

@@ -423,8 +418,6 @@ public void write(final BatchPoints batchPoints) {
423418
this.batchedCount.add(batchPoints.getPoints().size());
424419
RequestBody lineProtocol = RequestBody.create(MEDIA_TYPE_STRING, batchPoints.lineProtocol());
425420
execute(this.influxDBService.writePoints(
426-
this.username,
427-
this.password,
428421
batchPoints.getDatabase(),
429422
batchPoints.getRetentionPolicy(),
430423
TimeUtil.toTimePrecision(batchPoints.getPrecision()),
@@ -437,8 +430,6 @@ public void write(final BatchPoints batchPoints) {
437430
public void write(final String database, final String retentionPolicy, final ConsistencyLevel consistency,
438431
final TimeUnit precision, final String records) {
439432
execute(this.influxDBService.writePoints(
440-
this.username,
441-
this.password,
442433
database,
443434
retentionPolicy,
444435
TimeUtil.toTimePrecision(precision),
@@ -537,12 +528,10 @@ public void query(final Query query, final int chunkSize, final Consumer<QueryRe
537528
Call<ResponseBody> call = null;
538529
if (query instanceof BoundParameterQuery) {
539530
BoundParameterQuery boundParameterQuery = (BoundParameterQuery) query;
540-
call = this.influxDBService.query(this.username, this.password,
541-
query.getDatabase(), query.getCommandWithUrlEncoded(), chunkSize,
531+
call = this.influxDBService.query(query.getDatabase(), query.getCommandWithUrlEncoded(), chunkSize,
542532
boundParameterQuery.getParameterJsonWithUrlEncoded());
543533
} else {
544-
call = this.influxDBService.query(this.username, this.password,
545-
query.getDatabase(), query.getCommandWithUrlEncoded(), chunkSize);
534+
call = this.influxDBService.query(query.getDatabase(), query.getCommandWithUrlEncoded(), chunkSize);
546535
}
547536

548537
call.enqueue(new Callback<ResponseBody>() {
@@ -581,11 +570,11 @@ public QueryResult query(final Query query, final TimeUnit timeUnit) {
581570
Call<QueryResult> call = null;
582571
if (query instanceof BoundParameterQuery) {
583572
BoundParameterQuery boundParameterQuery = (BoundParameterQuery) query;
584-
call = this.influxDBService.query(this.username, this.password, query.getDatabase(),
573+
call = this.influxDBService.query(query.getDatabase(),
585574
TimeUtil.toTimePrecision(timeUnit), query.getCommandWithUrlEncoded(),
586575
boundParameterQuery.getParameterJsonWithUrlEncoded());
587576
} else {
588-
call = this.influxDBService.query(this.username, this.password, query.getDatabase(),
577+
call = this.influxDBService.query(query.getDatabase(),
589578
TimeUtil.toTimePrecision(timeUnit), query.getCommandWithUrlEncoded());
590579
}
591580
return executeQuery(call);
@@ -598,25 +587,23 @@ public QueryResult query(final Query query, final TimeUnit timeUnit) {
598587
public void createDatabase(final String name) {
599588
Preconditions.checkNonEmptyString(name, "name");
600589
String createDatabaseQueryString = String.format("CREATE DATABASE \"%s\"", name);
601-
executeQuery(this.influxDBService.postQuery(this.username, this.password, Query.encode(createDatabaseQueryString)));
590+
executeQuery(this.influxDBService.postQuery(Query.encode(createDatabaseQueryString)));
602591
}
603592

604593
/**
605594
* {@inheritDoc}
606595
*/
607596
@Override
608597
public void deleteDatabase(final String name) {
609-
executeQuery(this.influxDBService.postQuery(this.username, this.password,
610-
Query.encode("DROP DATABASE \"" + name + "\"")));
598+
executeQuery(this.influxDBService.postQuery(Query.encode("DROP DATABASE \"" + name + "\"")));
611599
}
612600

613601
/**
614602
* {@inheritDoc}
615603
*/
616604
@Override
617605
public List<String> describeDatabases() {
618-
QueryResult result = executeQuery(this.influxDBService.query(this.username,
619-
this.password, SHOW_DATABASE_COMMAND_ENCODED));
606+
QueryResult result = executeQuery(this.influxDBService.query(SHOW_DATABASE_COMMAND_ENCODED));
620607
// {"results":[{"series":[{"name":"databases","columns":["name"],"values":[["mydb"]]}]}]}
621608
// Series [name=databases, columns=[name], values=[[mydb], [unittest_1433605300968]]]
622609
List<List<Object>> databaseNames = result.getResults().get(0).getSeries().get(0).getValues();
@@ -650,16 +637,13 @@ private Call<QueryResult> callQuery(final Query query) {
650637
Call<QueryResult> call;
651638
if (query instanceof BoundParameterQuery) {
652639
BoundParameterQuery boundParameterQuery = (BoundParameterQuery) query;
653-
call = this.influxDBService.postQuery(this.username,
654-
this.password, query.getDatabase(), query.getCommandWithUrlEncoded(),
640+
call = this.influxDBService.postQuery(query.getDatabase(), query.getCommandWithUrlEncoded(),
655641
boundParameterQuery.getParameterJsonWithUrlEncoded());
656642
} else {
657643
if (query.requiresPost()) {
658-
call = this.influxDBService.postQuery(this.username,
659-
this.password, query.getDatabase(), query.getCommandWithUrlEncoded());
644+
call = this.influxDBService.postQuery(query.getDatabase(), query.getCommandWithUrlEncoded());
660645
} else {
661-
call = this.influxDBService.query(this.username,
662-
this.password, query.getDatabase(), query.getCommandWithUrlEncoded());
646+
call = this.influxDBService.query(query.getDatabase(), query.getCommandWithUrlEncoded());
663647
}
664648
}
665649
return call;
@@ -783,7 +767,7 @@ public void createRetentionPolicy(final String rpName, final String database, fi
783767
if (isDefault) {
784768
queryBuilder.append(" DEFAULT");
785769
}
786-
executeQuery(this.influxDBService.postQuery(this.username, this.password, Query.encode(queryBuilder.toString())));
770+
executeQuery(this.influxDBService.postQuery(Query.encode(queryBuilder.toString())));
787771
}
788772

789773
/**
@@ -818,8 +802,7 @@ public void dropRetentionPolicy(final String rpName, final String database) {
818802
.append("\" ON \"")
819803
.append(database)
820804
.append("\"");
821-
executeQuery(this.influxDBService.postQuery(this.username, this.password,
822-
Query.encode(queryBuilder.toString())));
805+
executeQuery(this.influxDBService.postQuery(Query.encode(queryBuilder.toString())));
823806
}
824807

825808
private interface ChunkProccesor {

src/main/java/org/influxdb/impl/InfluxDBService.java

+10-15
Original file line numberDiff line numberDiff line change
@@ -39,49 +39,44 @@ interface InfluxDBService {
3939
* Can be one of one, any, all, quorum. Defaults to all.
4040
*/
4141
@POST("write")
42-
public Call<ResponseBody> writePoints(@Query(U) String username,
43-
@Query(P) String password, @Query(DB) String database,
42+
public Call<ResponseBody> writePoints(@Query(DB) String database,
4443
@Query(RP) String retentionPolicy, @Query(PRECISION) String precision,
4544
@Query(CONSISTENCY) String consistency, @Body RequestBody batchPoints);
4645

4746
@GET("query")
48-
public Call<QueryResult> query(@Query(U) String username, @Query(P) String password, @Query(DB) String db,
47+
public Call<QueryResult> query(@Query(DB) String db,
4948
@Query(EPOCH) String epoch, @Query(value = Q, encoded = true) String query);
5049

5150
@POST("query")
52-
public Call<QueryResult> query(@Query(U) String username, @Query(P) String password, @Query(DB) String db,
51+
public Call<QueryResult> query(@Query(DB) String db,
5352
@Query(EPOCH) String epoch, @Query(value = Q, encoded = true) String query,
5453
@Query(value = PARAMS, encoded = true) String params);
5554

5655
@GET("query")
57-
public Call<QueryResult> query(@Query(U) String username, @Query(P) String password, @Query(DB) String db,
56+
public Call<QueryResult> query(@Query(DB) String db,
5857
@Query(value = Q, encoded = true) String query);
5958

6059
@POST("query")
61-
public Call<QueryResult> postQuery(@Query(U) String username, @Query(P) String password, @Query(DB) String db,
60+
public Call<QueryResult> postQuery(@Query(DB) String db,
6261
@Query(value = Q, encoded = true) String query);
6362

6463
@POST("query")
65-
public Call<QueryResult> postQuery(@Query(U) String username, @Query(P) String password, @Query(DB) String db,
64+
public Call<QueryResult> postQuery(@Query(DB) String db,
6665
@Query(value = Q, encoded = true) String query, @Query(value = PARAMS, encoded = true) String params);
6766

6867
@GET("query")
69-
public Call<QueryResult> query(@Query(U) String username, @Query(P) String password,
70-
@Query(value = Q, encoded = true) String query);
68+
public Call<QueryResult> query(@Query(value = Q, encoded = true) String query);
7169

7270
@POST("query")
73-
public Call<QueryResult> postQuery(@Query(U) String username,
74-
@Query(P) String password, @Query(value = Q, encoded = true) String query);
71+
public Call<QueryResult> postQuery(@Query(value = Q, encoded = true) String query);
7572

7673
@Streaming
7774
@GET("query?chunked=true")
78-
public Call<ResponseBody> query(@Query(U) String username,
79-
@Query(P) String password, @Query(DB) String db, @Query(value = Q, encoded = true) String query,
75+
public Call<ResponseBody> query(@Query(DB) String db, @Query(value = Q, encoded = true) String query,
8076
@Query(CHUNK_SIZE) int chunkSize);
8177

8278
@Streaming
8379
@POST("query?chunked=true")
84-
public Call<ResponseBody> query(@Query(U) String username,
85-
@Query(P) String password, @Query(DB) String db, @Query(value = Q, encoded = true) String query,
80+
public Call<ResponseBody> query(@Query(DB) String db, @Query(value = Q, encoded = true) String query,
8681
@Query(CHUNK_SIZE) int chunkSize, @Query(value = PARAMS, encoded = true) String params);
8782
}

src/test/java/org/influxdb/impl/ChunkingExceptionTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void testChunkingException(Exception ex, String message) throws IOExcepti
5656
Call<ResponseBody> call = mock(Call.class);
5757
ResponseBody responseBody = mock(ResponseBody.class);
5858

59-
when(influxDBService.query(any(String.class), any(String.class), any(String.class), any(String.class), anyInt())).thenReturn(call);
59+
when(influxDBService.query(any(String.class), any(String.class), anyInt())).thenReturn(call);
6060
when(responseBody.source()).thenReturn(new Buffer());
6161
doThrow(ex).when(adapter).fromJson(any(JsonReader.class));
6262

0 commit comments

Comments
 (0)