package org.openbankdata.bank.americanexpress.client;
import org.openbankdata.bank.americanexpress.service.AmericanExpressAccountService;
import org.openbankdata.core.client.AbstractBankClient;
import org.openbankdata.core.client.BankClient;
import org.openbankdata.core.client.BankRequest;
import org.openbankdata.core.client.BankResponse;
/**
* Client class to interact with AmericanExpress' web.
*/
public class AmericanExpressBankClient extends AbstractBankClient {
private static final String BASE_URI = "https://www.americanexpress.com/home/se/home_c.shtml";
private static final String LOGIN_URL =
"https://global.americanexpress.com/myca/logon/emea/action";
private String mUsername;
private String mPassword;
public AmericanExpressBankClient() {
super();
}
@Override
public BankClient setCredentials(String pUsername, String pPassword) {
mUsername = pUsername;
mPassword = pPassword;
return this;
}
@Override
protected boolean activateSession() {
if (!get(new BankRequest(BASE_URI).skipAuthentication(true)).ok()) {
return false;
}
BankRequest loginRequest = new BankRequest(LOGIN_URL).skipAuthentication(true)
.addParam("request_type", "LogLogonHandler")
.addParam("Face", "sv_SE")
.addParam("DestPage", AmericanExpressAccountService.ACCOUNTS_URL)
.addParam("Logon", "Continue...")
.addParam("UserID", mUsername)
.addParam("Password", mPassword);
BankResponse loginResponse = post(loginRequest);
if (isLoginSuccessful(loginResponse)) {
this.setSessionActive(true);
getCache()
.put(new BankRequest(AmericanExpressAccountService.ACCOUNTS_URL),
loginResponse);
return true;
}
return false;
}
private boolean isLoginSuccessful(BankResponse pRequest) {
boolean ok = pRequest.code() == 200;
int index = pRequest.body().indexOf("Your Personal Cards");
return ok && index != -1;
}
}