package org.hwbot.prime.tasks; import android.os.AsyncTask; import android.util.Log; import com.google.gson.Gson; import org.hwbot.api.bench.dto.PersistentLoginDTO; import org.hwbot.api.bench.dto.UserStatsDTO; import org.hwbot.prime.MainActivity; import org.hwbot.prime.TabFragmentAccount; import org.hwbot.prime.service.BenchService; import org.hwbot.prime.service.SecurityService; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLEncoder; import java.net.UnknownHostException; /** * Represents an asynchronous login/registration task used to authenticate * the user. */ public class UserRegisterTask extends AsyncTask<Void, Void, PersistentLoginDTO> { /** * */ private final TabFragmentAccount tabFragmentAccount; /** * @param tabFragmentAccount */ public UserRegisterTask(TabFragmentAccount tabFragmentAccount) { this.tabFragmentAccount = tabFragmentAccount; } @Override protected PersistentLoginDTO doInBackground(Void... params) { URL login; BufferedReader reader = null; try { login = new URL(BenchService.SERVER + "/api/register?userName=" + URLEncoder.encode(this.tabFragmentAccount.mRegisterUserName, "UTF8") +"&email="+URLEncoder.encode(this.tabFragmentAccount.mRegisterEmail, "UTF8")+ "&password=" + URLEncoder.encode(this.tabFragmentAccount.mRegisterPassword, "UTF8")); reader = new BufferedReader(new InputStreamReader(login.openStream())); try { PersistentLoginDTO loginToken = new Gson().fromJson(reader, PersistentLoginDTO.class); MainActivity.getActivity().storeUserStats(new UserStatsDTO()); 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.mRegisterTask = null; this.tabFragmentAccount.showProgress(false, false); if (persistentLogin != null && persistentLogin.getToken() != null) { SecurityService.getInstance().setCredentials(persistentLogin); // Log.i(this.getClass().getSimpleName(), "Logged in " + SecurityService.getInstance().getCredentials().getToken()); MainActivity.activity.loggedIn(); } else { this.tabFragmentAccount.mRegisterEmailView.setError(this.tabFragmentAccount.getString(org.hwbot.prime.R.string.error_registration_failed)); this.tabFragmentAccount.mRegisterEmailView.requestFocus(); } } @Override protected void onCancelled() { this.tabFragmentAccount.mAuthTask = null; this.tabFragmentAccount.showProgress(false, false); } }