Skip to content

Commit 274798f

Browse files
authored
Merge pull request #204 from mngoe/OP-2347
add crsfToken on mobile graphql request
2 parents 07a8c8e + 0f6bd0d commit 274798f

7 files changed

Lines changed: 29 additions & 60 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mutation GetCsrfToken {
2+
getCsrfToken {
3+
csrfToken
4+
}
5+
}

app/src/main/graphql/org.openimis.imispolicies/schema.graphqls

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4797,6 +4797,7 @@ Skip indicates that the claim is not selected for review
47974797
revokeToken(refreshToken: String): Revoke
47984798
deleteTokenCookie: DeleteJSONWebTokenCookie
47994799
deleteRefreshTokenCookie: DeleteRefreshTokenCookie
4800+
getCsrfToken: GetCsrfTokenMutationPayload
48004801
}
48014802

48024803
type CreateHeraSubscriptionMutationPayload {
@@ -8724,6 +8725,10 @@ type ResetPasswordMutationPayload {
87248725
clientMutationId: String
87258726
}
87268727

8728+
type GetCsrfTokenMutationPayload {
8729+
csrfToken: String
8730+
}
8731+
87278732
input ResetPasswordMutationInput {
87288733
"""
87298734
Username of the account to recover

app/src/main/java/org/openimis/imispolicies/network/okhttp/AuthorizationInterceptor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import okhttp3.Response;
1515

1616
public class AuthorizationInterceptor implements Interceptor {
17-
private static final String REQUESTED_WITH = "mobile";
17+
private static final String REQUESTED_WITH = "webapp";
1818

1919
@NonNull
2020
private final LoginRepository repository;
@@ -33,9 +33,10 @@ public Response intercept(@NonNull Chain chain) throws IOException {
3333
}
3434
Request.Builder builder = chain.request().newBuilder();
3535
builder.addHeader("Authorization", "bearer " + token.trim());
36-
builder.addHeader("X-Requested-With", REQUESTED_WITH);
36+
//builder.addHeader("Content-Type", "application/json");
3737
if(!StringUtils.isEmpty(csrfToken)){
38-
builder.addHeader("X-CSRFToken", csrfToken);
38+
builder.addHeader("X-Csrftoken", csrfToken);
39+
builder.addHeader("X-Requested-With", REQUESTED_WITH);
3940
}
4041
Response response = chain.proceed(builder.build());
4142
if (response.code() == HttpURLConnection.HTTP_UNAUTHORIZED) {

app/src/main/java/org/openimis/imispolicies/network/request/BaseGraphQLRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public abstract class BaseGraphQLRequest {
3131

3232
private static final ApolloClient apolloClient = ApolloClient.builder()
3333
.okHttpClient(OkHttpUtils.getDefaultOkHttpClient())
34+
.useHttpGetMethodForQueries(true)
3435
.serverUrl(URI)
3536
.addCustomTypeAdapter(CustomType.DATE, new DateCustomTypeAdapter())
3637
.addCustomTypeAdapter(CustomType.DATETIME, new DateTimeCustomTypeAdapter())
Lines changed: 8 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,21 @@
11
package org.openimis.imispolicies.network.request;
22

3-
import android.media.session.MediaSession;
4-
53
import androidx.annotation.NonNull;
64
import androidx.annotation.WorkerThread;
75

8-
import com.apollographql.apollo.api.internal.QueryDocumentMinifier;
9-
10-
import org.json.JSONObject;
11-
import org.openimis.imispolicies.BuildConfig;
12-
import org.openimis.imispolicies.Global;
13-
import org.openimis.imispolicies.ToRestApi;
14-
import org.openimis.imispolicies.tools.Log;
15-
6+
import org.openimis.imispolicies.GetCsrfTokenMutation;
167
import java.util.Objects;
178

18-
import okhttp3.MediaType;
19-
import okhttp3.OkHttpClient;
20-
import okhttp3.Request;
21-
import okhttp3.RequestBody;
22-
import okhttp3.Response;
23-
249
public class GetCsrfTokenGraphQLMutation extends BaseGraphQLRequest {
2510

26-
private static final String URI = BuildConfig.API_BASE_URL + "api/graphql";
27-
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
28-
protected Global global;
29-
30-
3111
@WorkerThread
3212
@NonNull
33-
public Response get(@NonNull String jwtToken) throws Exception {
34-
35-
String QUERY_DOCUMENT = QueryDocumentMinifier.minify(
36-
"mutation {"
37-
+ " getCsrfToken {"
38-
+ " csrfToken"
39-
+ " } "
40-
+ " } "
41-
);
42-
43-
JSONObject json = new JSONObject();
44-
json.put("query", QUERY_DOCUMENT);
45-
OkHttpClient.Builder builder = new OkHttpClient.Builder();
46-
OkHttpClient httpClient = builder.build();
47-
RequestBody body = RequestBody.create(json.toString(), JSON);
48-
Request request = new Request.Builder()
49-
.url(URI)
50-
.addHeader("Authorization","bearer " + jwtToken)
51-
.post(body)
52-
.build();
53-
54-
Response response = httpClient.newCall(request).execute();
55-
int responseCode = response.code();
56-
57-
Log.i("HTTP_POST", URI + " - " + responseCode);
58-
Log.i("GetCsrfToken", QUERY_DOCUMENT);
59-
60-
String responsePhrase = Objects.requireNonNull(response.body()).string();
61-
Log.i("RESPONSE", String.format("response: %d %s", responseCode, responsePhrase));
62-
63-
return response;
64-
13+
public String get() throws Exception {
14+
com.apollographql.apollo.api.Response<GetCsrfTokenMutation.Data> response = makeSynchronous(new GetCsrfTokenMutation());
15+
return Objects.requireNonNull(
16+
Objects.requireNonNull(
17+
Objects.requireNonNull(response.getData(), "data is null")
18+
.getCsrfToken(), "csrfToken is null"
19+
).csrfToken(), "csrfToken is null");
6520
}
6621
}

app/src/main/java/org/openimis/imispolicies/repository/LoginRepository.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.openimis.imispolicies.BuildConfig;
1414
import org.openimis.imispolicies.Global;
1515
import org.openimis.imispolicies.Token;
16+
import org.openimis.imispolicies.tools.Log;
1617

1718
import java.util.Date;
1819

@@ -72,7 +73,9 @@ public String getFhirToken() {
7273
}
7374

7475
@Nullable
75-
public String getCsrfToken() { return prefs.getString(CSRF_TOKEN, null);}
76+
public String getCsrfToken() {
77+
return prefs.getString(CSRF_TOKEN, null);
78+
}
7679

7780
/**
7881
* Logic taken from [Token.java]
@@ -179,5 +182,6 @@ public void saveCsrfToken( @Nullable String csrfToken){
179182
} else {
180183
editor.putString(CSRF_TOKEN, csrfToken);
181184
}
185+
editor.apply();
182186
}
183187
}

app/src/main/java/org/openimis/imispolicies/usecase/Login.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,8 @@ public void execute(@NonNull String username, @NonNull String password) throws E
5959
}
6060
try {
6161
TokenDto token = request.post(new LoginDto(username.trim(), password));
62-
Response response = new GetCsrfTokenGraphQLMutation().get(token.getToken());
63-
String csrfToken = Objects.requireNonNull(response.body()).toString();
64-
Log.e("response token", response.body().toString());
6562
repository.saveFhirToken(token.getToken(), new Date(token.getExpiresOn()), officerCode);
63+
String csrfToken = new GetCsrfTokenGraphQLMutation().get();
6664
repository.saveCsrfToken(csrfToken);
6765
if (isPaymentEnabled) {
6866
token = loginToRestApi(username, password);

0 commit comments

Comments
 (0)