123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package uprrp.tania.networking;
-
- import android.os.AsyncTask;
- import android.util.Log;
-
- import org.json.JSONException;
- import org.json.JSONObject;
-
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.UnsupportedEncodingException;
- import java.net.URL;
- import java.net.URLConnection;
- import java.net.URLEncoder;
-
- import uprrp.tania.utils.URLEventListener;
-
- public class SendAccountRecovery extends AsyncTask<String, String, String> {
-
- private static final String TAG = "SendAccountRecovery";
- private static final String loginBaseURL = "https://tania.uprrp.edu/recoverAccount.php";
- private final URLEventListener myCallback;
-
- public SendAccountRecovery(URLEventListener callback) {
- this.myCallback = callback;
- }
-
- private boolean validInputs(String... strings) {
-
- if(strings.length != 3) {
- Log.e(TAG, "Invalid string array length!");
- return false;
- }
-
- String deviceToken = strings[0];
- String email = strings[1];
- String password = strings[2];
-
- if(email == null) {
- Log.e(TAG, "Encountered null email!");
- return false;
- } else if (deviceToken == null) {
- Log.e(TAG, "Encountered null device token!");
- return false;
- } else if (password == null) {
- Log.e(TAG, "Encountered null password!");
- return false;
- }
-
- return true;
-
- }
-
- // TODO: instead of making a normal POST request with
- // the body data=<JSON>, we should just send the JSON itself
- // This is adding unnecessary layers of complexity when decoding AND encoding
- /*
- JSON format:
- {
- "email": String,
- "password": String,
- "token": String,
- }
- */
- @Override
- protected String doInBackground(String... strings) {
-
- // Validation
- if(!validInputs(strings)) {
- Log.e(TAG, "Invalid inputs given!");
- return null;
- }
-
- // Extract variables
- String deviceToken = strings[0];
- String email = strings[1];
- String password = strings[2];
-
- try {
-
- // Create JSON
- JSONObject accountRecoveryJSON = new JSONObject();
- accountRecoveryJSON.put("email", email);
- accountRecoveryJSON.put("password", password);
- accountRecoveryJSON.put("token", deviceToken);
- Log.d(TAG, "RecoveryJSON: " + accountRecoveryJSON.toString());
-
- // Encode data
- String encodedRequestBody = URLEncoder.encode("data", "UTF-8") + "=" + URLEncoder.encode(accountRecoveryJSON.toString(), "UTF-8");
-
- // Send POST data request
- URL url = new URL(loginBaseURL);
- URLConnection conn = url.openConnection();
- conn.setDoOutput(true);
- OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
- wr.write(encodedRequestBody);
- wr.flush();
-
- // Get the server response
- BufferedReader serverReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
- StringBuilder serverResponse = new StringBuilder();
-
- String line = "";
- while(line != null) {
- serverResponse.append(line);
- line = serverReader.readLine();
- }
-
- String response = serverResponse.toString();
- Log.d(TAG, "The server's response is: " + response);
- if(response.contains("Error")) {
- return null;
- } else {
- return response;
- }
-
- } catch (JSONException e) {
- Log.e(TAG, "Couldn't prepare accountRecoveryJSON!");
- e.printStackTrace();
- return null;
- } catch (UnsupportedEncodingException e) {
- Log.e(TAG, "Couldn't encode accountRecoveryJSON!");
- e.printStackTrace();
- return null;
- } catch(Exception e) {
- Log.e(TAG, "Couldn't communicate with server while recovering account!");
- e.printStackTrace();
- return null;
- }
-
- }
-
- @Override
- protected void onPostExecute(String response) {
-
- if(this.myCallback == null) {
- Log.e(TAG, "Callback wasn't initialized first!");
- return;
- }
-
- if(response == null) {
- this.myCallback.onFailure(new Exception("Error occurred during transaction!"));
- return;
- }
-
- this.myCallback.onSuccess(response);
-
- }
-
- }
|