/*
* *
* Copyright (C) 2014 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* /
*/
package org.anhonesteffort.flock;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import org.anhonesteffort.flock.util.guava.Optional;
import org.anhonesteffort.flock.auth.DavAccount;
import org.anhonesteffort.flock.crypto.KeyHelper;
import org.anhonesteffort.flock.crypto.MasterCipher;
import java.io.IOException;
/**
* Programmer: rhodey
*/
public class AccountAndKeyRequiredActivity extends Activity {
private static final String TAG = "org.anhonesteffort.flock.AccountAndKeyRequiredActivity";
protected DavAccount account;
protected MasterCipher masterCipher;
protected static DavAccount handleGetAccountOrFail(Activity activity) {
Intent nextIntent;
Optional<DavAccount> davAccount = DavAccountHelper.getAccount(activity);
if (!davAccount.isPresent()) {
if (!DavAccountHelper.isAccountRegistered(activity)) {
Log.w(TAG, "dav account missing and account not registered, directing to setup activity");
nextIntent = new Intent(activity, SetupActivity.class);
nextIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
else {
Log.w(TAG, "dav account missing and account is registered, directing to correct password");
nextIntent = new Intent(activity, CorrectPasswordActivity.class);
nextIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Toast.makeText(activity,
R.string.error_password_unavailable_please_login,
Toast.LENGTH_SHORT).show();
}
activity.startActivity(nextIntent);
activity.finish();
return null;
}
else
return davAccount.get();
}
protected static MasterCipher handleGetMasterCipherOrFail(Activity activity) {
try {
Optional<MasterCipher> cipher = KeyHelper.getMasterCipher(activity);
if (cipher.isPresent())
return cipher.get();
else {
Log.e(TAG, "master cipher is missing, fuck");
throw new IOException("Where did master chipher GO!?!?");
}
} catch (IOException e) {
// TODO: import account from scratch...
activity.finish();
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
account = handleGetAccountOrFail(this);
masterCipher = handleGetMasterCipherOrFail(this);
}
protected boolean accountAndKeyAvailable() {
return account != null && masterCipher != null;
}
}