package edu.stanford.prpl.phoneIdp.server.impl;
import java.security.NoSuchAlgorithmException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.stanford.prpl.phoneIdp.common.api.Challenge;
import edu.stanford.prpl.phoneIdp.common.api.Response;
import edu.stanford.prpl.phoneIdp.common.impl.ChallengeImpl;
import edu.stanford.prpl.phoneIdp.common.impl.ResponseImpl;
import edu.stanford.prpl.phoneIdp.server.api.AccountStore;
import edu.stanford.prpl.phoneIdp.server.api.Credential;
import edu.stanford.prpl.phoneIdp.server.api.Registrar;
import edu.stanford.prpl.phoneIdp.server.impl.CredentialImpl.Encoding;
import sun.misc.BASE64Encoder;
public class RegistrarImpl extends Registrar {
private static final Log log = LogFactory.getLog(RegistrarImpl.class);
public RegistrarImpl()
{
accountStore_ = AccountStoreImpl.getInstance();
}
@Override
public Credential createAccount(String name, String oid) {
byte[] sharedSecret = null;
try
{
KeyGenerator keyGen = KeyGenerator.getInstance("HmacSHA1");
SecretKey key = keyGen.generateKey();
byte[] tempKey = key.getEncoded();
sharedSecret = new byte[55];
for (int i=0; i< sharedSecret.length; ++i)
{
sharedSecret[i] = tempKey[i];
}
log.info("Shared secret format: " + key.getFormat());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
Credential c = null;
try
{
c = new CredentialImpl(name, oid, sharedSecret, false, Encoding.NONE);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
if (accountStore_.activate(c))
{
return c;
}
else
{
return null;
}
}
@Override
public boolean updateAccount(String oid) {
return accountStore_.update(oid);
}
/**
* @param args
*/
public static void main(String[] args) {
RegistrarImpl regImpl = new RegistrarImpl();
String name = "d1";
String oid = "http://localhost:8080/joid/user/d1";
Credential cred = regImpl.createAccount(name, oid);
System.out.println("SharedSecret: " + cred.getSharedSecret());
}
@Override
public boolean deleteAccount(String oid) {
return accountStore_.delete(oid);
}
}