Skip to content

Commit 5f12047

Browse files
committed
add csrfToken in graphql request
1 parent 9837133 commit 5f12047

7 files changed

Lines changed: 95 additions & 15 deletions

File tree

claimManagement/src/main/java/org/openimis/imisclaims/Global.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class Global extends Application {
6565
private static final String SHPREF_NAME = "SHPref";
6666
private static final String SHPREF_LANGUAGE = "language";
6767
private static final String DEFAULT_LANGUAGE_CODE = "en";
68+
private static final String SHPREF_CSRF = "csrfToken";
6869
private static Global instance;
6970
private String OfficerCode;
7071
private String OfficerHealthFacility;
@@ -137,6 +138,11 @@ public Token getJWTToken() {
137138
return JWTToken;
138139
}
139140

141+
public String getCsrfToken(){
142+
SharedPreferences sp = getDefaultSharedPreferences();
143+
return sp.getString(SHPREF_CSRF,null);
144+
}
145+
140146
public boolean isLoggedIn() {
141147
boolean isLoggedIn = getJWTToken().isTokenValidJWT();
142148
if (!isLoggedIn) {

claimManagement/src/main/java/org/openimis/imisclaims/MainActivity.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -569,22 +569,22 @@ public void DownLoadDiagnosesServicesItems(@Nullable final String officerCode) {
569569
Thread thread = new Thread() {
570570
public void run() {
571571
try {
572-
DiagnosesServicesMedications diagnosesServicesMedications = new FetchDiagnosesServicesItems().execute();
573-
saveLastUpdateDate(diagnosesServicesMedications.getLastUpdated());
572+
// DiagnosesServicesMedications diagnosesServicesMedications = new FetchDiagnosesServicesItems().execute();
573+
// saveLastUpdateDate(diagnosesServicesMedications.getLastUpdated());
574574
sqlHandler.ClearAll("tblReferences");
575575
sqlHandler.ClearAll("tblHealthFacilities");
576576
sqlHandler.ClearMapping("S");
577577
sqlHandler.ClearMapping("I");
578578
//Insert Diagnoses
579-
for (Diagnosis diagnosis : diagnosesServicesMedications.getDiagnoses()) {
580-
sqlHandler.InsertReferences(diagnosis.getCode(), diagnosis.getName(), "D", "");
581-
}
579+
// for (Diagnosis diagnosis : diagnosesServicesMedications.getDiagnoses()) {
580+
// sqlHandler.InsertReferences(diagnosis.getCode(), diagnosis.getName(), "D", "");
581+
// }
582582

583583
//Insert Services
584-
for (Service service : diagnosesServicesMedications.getServices()) {
585-
sqlHandler.InsertReferences(service.getCode(), service.getName(), "S", String.valueOf(service.getPrice()));
586-
sqlHandler.InsertMapping(service.getCode(), service.getName(), "S");
587-
}
584+
// for (Service service : diagnosesServicesMedications.getServices()) {
585+
// sqlHandler.InsertReferences(service.getCode(), service.getName(), "S", String.valueOf(service.getPrice()));
586+
// sqlHandler.InsertMapping(service.getCode(), service.getName(), "S");
587+
// }
588588

589589
//Insert Items
590590
List<Medication> medications = new FetchMedications().execute();

claimManagement/src/main/java/org/openimis/imisclaims/network/okhttp/AuthorizationInterceptor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.openimis.imisclaims.Global;
88
import org.openimis.imisclaims.Token;
9+
import org.openimis.imisclaims.tools.Log;
910

1011
import java.io.IOException;
1112
import java.net.HttpURLConnection;
@@ -22,14 +23,21 @@ public class AuthorizationInterceptor implements Interceptor {
2223
public AuthorizationInterceptor(@NonNull Global global) {
2324
this.global = global;
2425
}
26+
private static final String REQUESTED_WITH = "mobile_app";
2527

2628
@NonNull
2729
@Override
2830
public Response intercept(@NonNull Chain chain) throws IOException {
2931
Token token = global.getJWTToken();
32+
String csrfToken = global.getCsrfToken();
3033
if (token != null && token.isTokenValidJWT()) {
3134
Request.Builder builder = chain.request().newBuilder();
3235
builder.addHeader("Authorization", "bearer " + token.getTokenText().trim());
36+
if(csrfToken != null){
37+
Log.e("csrf token", csrfToken);
38+
builder.addHeader("X-Csrftoken", csrfToken);
39+
builder.addHeader("X-Requested-With", REQUESTED_WITH);
40+
}
3341
Response response = chain.proceed(builder.build());
3442
if (response.code() == HttpURLConnection.HTTP_UNAUTHORIZED) {
3543
global.getJWTToken().clearToken();

claimManagement/src/main/java/org/openimis/imisclaims/network/request/BaseGraphQLRequest.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.apollographql.apollo.ApolloCall;
77
import com.apollographql.apollo.ApolloClient;
8+
import com.apollographql.apollo.api.Mutation;
89
import com.apollographql.apollo.api.Operation;
910
import com.apollographql.apollo.api.Query;
1011
import com.apollographql.apollo.api.Response;
@@ -14,9 +15,11 @@
1415
import org.openimis.imisclaims.network.apollo.DateCustomTypeAdapter;
1516
import org.openimis.imisclaims.network.apollo.DateTimeCustomTypeAdapter;
1617
import org.openimis.imisclaims.network.apollo.DecimalCustomTypeAdapter;
18+
import org.openimis.imisclaims.network.exception.HttpException;
1719
import org.openimis.imisclaims.network.util.OkHttpUtils;
1820
import org.openimis.imisclaims.type.CustomType;
1921

22+
import java.net.HttpURLConnection;
2023
import java.util.concurrent.Semaphore;
2124
import java.util.concurrent.TimeUnit;
2225
import java.util.concurrent.TimeoutException;
@@ -62,4 +65,54 @@ public void onFailure(@NonNull ApolloException e) {
6265
}
6366
return responses[0];
6467
}
68+
69+
@NonNull
70+
@WorkerThread
71+
protected <T extends Operation.Data> Response<T> makeSynchronous(Operation<T, ?, ?> query) throws Exception {
72+
Semaphore semaphore = new Semaphore(0);
73+
final Exception[] exceptions = new Exception[1];
74+
final Response<T>[] responses = new Response[1];
75+
ApolloCall<?> call;
76+
if (query instanceof Query) {
77+
call = apolloClient.query((Query<T, ?, ?>) query);
78+
} else if(query instanceof Mutation) {
79+
call = apolloClient.mutate((Mutation<T, ?, ?>) query);
80+
} else {
81+
throw new IllegalArgumentException("Query is unsupported");
82+
}
83+
call.enqueue(new ApolloCall.Callback() {
84+
@Override
85+
public void onResponse(@NonNull Response response) {
86+
responses[0] = response;
87+
semaphore.release();
88+
}
89+
90+
@Override
91+
public void onFailure(@NonNull ApolloException e) {
92+
exceptions[0] = e;
93+
semaphore.release();
94+
}
95+
});
96+
if (!semaphore.tryAcquire(TIME_OUT_IN_MS, TimeUnit.MILLISECONDS)) {
97+
throw new TimeoutException("Call couldn't finish within " + TIME_OUT_IN_MS + "ms");
98+
}
99+
Exception exception = exceptions[0];
100+
if (exception != null) {
101+
throw exception;
102+
}
103+
Response<T> response = responses[0];
104+
if (response.hasErrors()) {
105+
String details = response.getErrors().get(0).getMessage();
106+
if (details.equals("User not authorized for this operation")) {
107+
throw new HttpException(
108+
HttpURLConnection.HTTP_UNAUTHORIZED,
109+
details,
110+
null,
111+
null
112+
);
113+
}
114+
throw new RuntimeException(response.toString());
115+
}
116+
return response;
117+
}
65118
}

claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetCrsfTokenGraphQLMutation.java renamed to claimManagement/src/main/java/org/openimis/imisclaims/network/request/GetCsrfTokenGraphQLMutation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import java.util.Objects;
99

10-
public class GetCrsfTokenGraphQLMutation extends BaseGraphQLRequest {
10+
public class GetCsrfTokenGraphQLMutation extends BaseGraphQLRequest {
1111

1212
@WorkerThread
1313
@NonNull

claimManagement/src/main/java/org/openimis/imisclaims/network/util/OkHttpUtils.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.openimis.imisclaims.Global;
99
import org.openimis.imisclaims.network.okhttp.AuthorizationInterceptor;
1010

11+
import java.util.concurrent.TimeUnit;
12+
1113
import javax.net.ssl.SSLContext;
1214
import javax.net.ssl.TrustManager;
1315
import javax.net.ssl.X509TrustManager;
@@ -29,6 +31,8 @@ public static OkHttpClient getDefaultOkHttpClient() {
2931
synchronized (OkHttpUtils.class) {
3032
if (client == null) {
3133
OkHttpClient.Builder builder = new OkHttpClient.Builder();
34+
builder.connectTimeout(20000, TimeUnit.MILLISECONDS)
35+
.readTimeout(200000, TimeUnit.MILLISECONDS);
3236
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
3337
interceptor.setLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.BASIC);
3438
builder.addInterceptor(interceptor);

claimManagement/src/main/java/org/openimis/imisclaims/usecase/Login.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package org.openimis.imisclaims.usecase;
22

3+
import android.content.SharedPreferences;
4+
35
import androidx.annotation.NonNull;
46
import androidx.annotation.WorkerThread;
57

68
import org.openimis.imisclaims.Global;
79
import org.openimis.imisclaims.network.dto.LoginDto;
810
import org.openimis.imisclaims.network.dto.TokenDto;
9-
import org.openimis.imisclaims.network.request.GetCrsfTokenGraphQLMutation;
11+
import org.openimis.imisclaims.network.request.GetCsrfTokenGraphQLMutation;
1012
import org.openimis.imisclaims.network.request.LoginRequest;
13+
import org.openimis.imisclaims.tools.Log;
1114

1215
import java.util.concurrent.TimeUnit;
1316

@@ -18,20 +21,21 @@ public class Login {
1821
@NonNull
1922
private final Global global;
2023
@NonNull
21-
private final GetCrsfTokenGraphQLMutation getCrsfTokenGraphQLMutation;
24+
private final GetCsrfTokenGraphQLMutation getCsrfTokenGraphQLMutation;
25+
private static final String SHPREF_CSRF = "csrfToken";
2226

2327
public Login(
2428
@NonNull LoginRequest request,
2529
@NonNull Global global,
26-
@NonNull GetCrsfTokenGraphQLMutation getCrsfTokenGraphQLMutation
30+
@NonNull GetCsrfTokenGraphQLMutation getCsrfTokenGraphQLMutation
2731
) {
2832
this.request = request;
2933
this.global = global;
30-
this.getCrsfTokenGraphQLMutation = getCrsfTokenGraphQLMutation;
34+
this.getCsrfTokenGraphQLMutation = getCsrfTokenGraphQLMutation;
3135
}
3236

3337
public Login() {
34-
this(new LoginRequest(), Global.getGlobal(), new GetCrsfTokenGraphQLMutation());
38+
this(new LoginRequest(), Global.getGlobal(), new GetCsrfTokenGraphQLMutation());
3539
}
3640

3741
@WorkerThread
@@ -42,6 +46,11 @@ public void execute(@NonNull String username, String password) {
4246
token.getToken(),
4347
TimeUnit.SECONDS.toMillis(token.getExpiresOn())
4448
);
49+
String csrfToken = getCsrfTokenGraphQLMutation.get();
50+
SharedPreferences sp = global.getDefaultSharedPreferences();
51+
SharedPreferences.Editor editor = sp.edit();
52+
editor.putString(SHPREF_CSRF, csrfToken);
53+
editor.apply();
4554
} catch (Exception e) {
4655
e.printStackTrace();
4756
}

0 commit comments

Comments
 (0)