package edu.stanford.prpl.phoneIdp.client.impl;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.stanford.prpl.phoneIdp.client.api.Client;
import edu.stanford.prpl.phoneIdp.common.api.Challenge;
import edu.stanford.prpl.phoneIdp.common.api.Response;
import edu.stanford.prpl.phoneIdp.common.impl.ResponseImpl;
import edu.stanford.prpl.phoneIdp.server.api.Credential;
import edu.stanford.prpl.phoneIdp.server.api.PhoneIdp;
import edu.stanford.prpl.phoneIdp.server.impl.AuthCodeCacheImpl;
import edu.stanford.prpl.phoneIdp.server.impl.CredentialImpl;
import edu.stanford.prpl.phoneIdp.server.impl.PhoneIdpImpl;
import edu.stanford.prpl.phoneIdp.server.impl.CredentialImpl.Encoding;
public class ClientImpl extends Client {
private static final Log log = LogFactory.getLog(ClientImpl.class);
PhoneIdp phoneIdp_;
@Override
public void init() {
phoneIdp_ = PhoneIdpImpl.getInstance();
}
@Override
public Challenge login(String name, String oid) {
try {
userCred_ = new CredentialImpl(name, oid, sharedSecret_, true, Encoding.BASE64);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
challenge_ = phoneIdp_.createChallenge(userCred_);
return challenge_;
}
@Override
public String registerAccount(String name, String oid) {
Credential cred = phoneIdp_.createAccount(name, oid);
sharedSecret_ = cred.getSharedSecret(); //base64 encoded
return sharedSecret_;
}
@Override
public boolean sendResponse() {
boolean result = false;
createResponse();
result = phoneIdp_.verifyResponse(response_.getSignedText_());
return result;
}
public void testLoLevel()
{
String name = "d1";
String oid = "http://localhost:8080/joid/users/d1";
String sharedSecret = registerAccount(name, oid);
Challenge challenge = login(name, oid);
boolean result = sendResponse();
log.info("Client: Result of Lo Level verify is: " + result);
}
public void testHiLevel()
{
String name = "d2";
String oid = "http://localhost:8080/joid/users/d2";
PhoneIdp phoneIdp = PhoneIdpImpl.getInstance();
userCred_ = phoneIdp.createAccount(name, oid);
String sharedSecret = userCred_.getSharedSecret();
challenge_ = phoneIdp.createChallenge(oid);
boolean verifyResult1 = phoneIdp_.isVerified(oid, challenge_.getAuthCode());
log.info("Pre response: isVerified expected result: false, actual result: " + verifyResult1);
boolean result = sendResponse();
boolean verifyResult2 = phoneIdp_.isVerified(oid, challenge_.getAuthCode());
log.info("Pre response: isVerified expected result: true, actual result: " + verifyResult2);
log.info("Client: Result of Hi Level verify is: " + result);
}
/**
* @param args
*/
public static void main(String[] args) {
log.info("Client: Start");
Client client = new ClientImpl();
client.init();
((ClientImpl) client).testLoLevel();
Client client2 = new ClientImpl();
client2.init();
((ClientImpl) client2).testHiLevel();
}
}