package org.ohmage.fragments;
import org.ohmage.R;
import org.ohmage.triggers.utils.TrigTextInput;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Base64;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class AdminDialogFragment extends DialogFragment {
public interface AdminCodeListener {
public void onAdminCodeEntered(boolean success);
}
protected static final String ADMIN_CODE = "buZMBBBnFVSjOFZYlr3Dgt42H6U3dcfU73RsS08bSKY=\n";
protected static final String SALT = "ohmage";
private AdminCodeListener mListener;
private boolean mSuccess = false;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (AdminCodeListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement AdminCodeListener");
}
}
@Override
public void onDismiss(DialogInterface dialogInterface) {
super.onDismiss(dialogInterface);
mListener.onAdminCodeEntered(mSuccess);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
TrigTextInput ti = new TrigTextInput(getActivity());
ti.setNumberMode(true);
ti.setPasswordMode(true);
ti.setAllowEmptyText(false);
ti.setPositiveButtonText(getString(R.string.ok));
ti.setNegativeButtonText(getString(R.string.cancel));
ti.setTitle(getActivity().getString(R.string.admin_dialog_title));
ti.setText("");
ti.setOnClickListener(new TrigTextInput.onClickListener() {
@Override
public void onClick(TrigTextInput ti, int which) {
if (which == TrigTextInput.BUTTON_POSITIVE) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
digest.update(SALT.getBytes());
byte[] input = digest.digest(String.valueOf(ti.getText()).getBytes("UTF-8"));
mSuccess = MessageDigest.isEqual(Base64.encode(input, 0), ADMIN_CODE.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(!mSuccess) {
Toast.makeText(getActivity(), R.string.admin_dialog_invalid_pin, Toast.LENGTH_SHORT).show();
}
}
}
});
return ti.createDialog();
}
}