package com.kickstarter.factories;
import android.support.annotation.NonNull;
import com.google.gson.Gson;
import com.kickstarter.models.User;
import com.kickstarter.services.ApiException;
import com.kickstarter.services.apiresponses.ErrorEnvelope;
import java.util.Collections;
import okhttp3.ResponseBody;
import rx.Observable;
public final class ApiExceptionFactory {
private ApiExceptionFactory() {}
public static @NonNull ApiException badRequestException() {
final ErrorEnvelope envelope = ErrorEnvelope.builder()
.errorMessages(Collections.singletonList("bad request"))
.httpCode(400)
.build();
final ResponseBody body = ResponseBody.create(null, "");
final retrofit2.Response<Observable<User>> response = retrofit2.Response.error(400, body);
return new ApiException(envelope, response);
}
public static @NonNull ApiException apiError(final @NonNull ErrorEnvelope errorEnvelope) {
final ResponseBody body = ResponseBody.create(null, new Gson().toJson(errorEnvelope));
final retrofit2.Response<Observable<User>> response = retrofit2.Response.error(errorEnvelope.httpCode(), body);
return new ApiException(errorEnvelope, response);
}
public static @NonNull ApiException invalidLoginException() {
final ErrorEnvelope envelope = ErrorEnvelope.builder()
.errorMessages(Collections.singletonList("Invalid login."))
.httpCode(401)
.ksrCode(ErrorEnvelope.INVALID_XAUTH_LOGIN)
.build();
final ResponseBody body = ResponseBody.create(null, new Gson().toJson(envelope));
final retrofit2.Response<Observable<User>> response = retrofit2.Response.error(envelope.httpCode(), body);
return new ApiException(envelope, response);
}
public static @NonNull ApiException tfaRequired() {
final ErrorEnvelope envelope = ErrorEnvelope.builder()
.ksrCode(ErrorEnvelope.TFA_REQUIRED)
.httpCode(403)
.errorMessages(Collections.singletonList("Two-factor authentication required."))
.build();
final ResponseBody body = ResponseBody.create(null, new Gson().toJson(envelope));
final retrofit2.Response<Observable<User>> response = retrofit2.Response.error(envelope.httpCode(), body);
return new ApiException(envelope, response);
}
public static @NonNull ApiException tfaFailed() {
final ErrorEnvelope envelope = ErrorEnvelope.builder()
.ksrCode(ErrorEnvelope.TFA_FAILED)
.httpCode(400)
.build();
final ResponseBody body = ResponseBody.create(null, new Gson().toJson(envelope));
final retrofit2.Response<Observable<User>> response = retrofit2.Response.error(envelope.httpCode(), body);
return new ApiException(envelope, response);
}
}