package org.hwbot.prime.tasks;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import org.apache.http.client.utils.URLEncodedUtils;
import org.hwbot.api.bench.dto.PersistentLoginDTO;
import org.hwbot.prime.MainActivity;
import org.hwbot.prime.TabFragmentAccount;
import org.hwbot.prime.service.BenchService;
import org.hwbot.prime.service.SecurityService;
import android.os.AsyncTask;
import android.util.Log;
import com.google.gson.Gson;
/**
* Represents an asynchronous login/registration task used to authenticate
* the user.
*/
public class UserLoginTask extends AsyncTask<Void, Void, PersistentLoginDTO> {
/**
*
*/
private final TabFragmentAccount tabFragmentAccount;
/**
* @param tabFragmentAccount
*/
public UserLoginTask(TabFragmentAccount tabFragmentAccount) {
this.tabFragmentAccount = tabFragmentAccount;
}
@Override
protected PersistentLoginDTO doInBackground(Void... params) {
URL login;
BufferedReader reader = null;
try {
login = new URL(BenchService.SERVER + "/api/login?username=" + URLEncoder.encode(this.tabFragmentAccount.mEmail, "UTF8") + "&password=" + URLEncoder.encode(this.tabFragmentAccount.mPassword, "UTF8"));
reader = new BufferedReader(new InputStreamReader(login.openStream()));
try {
PersistentLoginDTO loginToken = new Gson().fromJson(reader, PersistentLoginDTO.class);
return loginToken;
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(), "Login not succesful: " + e.getMessage());
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
}
} catch (UnknownHostException e) {
MainActivity.activity.showNetworkPopupOnce();
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(), "Failed to authenticate: " + e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(final PersistentLoginDTO persistentLogin) {
this.tabFragmentAccount.mAuthTask = null;
this.tabFragmentAccount.showProgress(false, true);
if (persistentLogin != null && persistentLogin.getToken() != null) {
SecurityService.getInstance().setCredentials(persistentLogin);
// Log.i(this.getClass().getSimpleName(), "Logged in " + SecurityService.getInstance().getCredentials().getToken());
this.tabFragmentAccount.prepareViewAsLoggedIn();
} else {
this.tabFragmentAccount.mPasswordView.setError(this.tabFragmentAccount.getString(org.hwbot.prime.R.string.error_incorrect_password));
this.tabFragmentAccount.mPasswordView.requestFocus();
}
}
@Override
protected void onCancelled() {
this.tabFragmentAccount.mAuthTask = null;
this.tabFragmentAccount.showProgress(false, true);
}
}