Yipanic/app/src/main/java/org/bandie/yipanic/Command.java

135 lines
3.9 KiB
Java

package org.bandie.yipanic;
import android.content.Context;
import android.util.Log;
import android.view.View;
import androidx.security.crypto.EncryptedSharedPreferences;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.google.android.material.snackbar.Snackbar;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.security.GeneralSecurityException;
class Command {
private final Snackbar sbOk, sbNotSet, sbAccessDenied, sbFailed, sbNoServer;
private String server, k, s;
Command(View view, Context context) {
this.sbOk = Snackbar.make(view, "Sent. :)", 3000);
this.sbNotSet = Snackbar.make(view, "Command not set. :/", 3000);
this.sbAccessDenied = Snackbar.make(view, "Access denied. >:(", 3000);
this.sbFailed = Snackbar.make(view, "Failed. :C", 3000);
this.sbNoServer = Snackbar.make(view, "No server configured! :o", 3000);
try {
EncryptedSharedPreferences sharedPreferences = (EncryptedSharedPreferences) EncryptedSharedPreferences
.create(
"Yipanic",
"Yipanic",
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
this.server = sharedPreferences.getString("server", null);
this.k = sharedPreferences.getString("key", null);
this.s = sharedPreferences.getString("secret", null);
} catch (IOException | GeneralSecurityException e) {
if (e.getMessage() != null)
Log.e("Yipanic", e.getMessage());
else
Log.e("Yipanic", "[ No exception message ]");
}
}
private JsonObjectRequest requestHandler(String cmd) {
JSONObject json = new JSONObject();
try {
json.put("key", this.k);
json.put("secret", this.s);
json.put("cmd", cmd);
} catch (JSONException e) {
if (e.getMessage() != null)
Log.e("Yipanic", e.getMessage());
else
Log.e("Yipanic", "[ No exception message ]");
}
if (this.server == null) {
sbNoServer.show();
return null;
}
return new JsonObjectRequest
(Request.Method.POST, this.server, json, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
if (response.getBoolean("access")) {
switch (response.getInt("error")) {
case 0:
sbOk.show();
break;
case 1:
sbNotSet.show();
break;
case 2:
//Password required
break;
case 4:
//Password OK
break;
}
} else {
sbAccessDenied.show();
}
} catch (JSONException e) {
if (e.getMessage() != null)
Log.e("Yip", e.getMessage());
else
Log.e("Yip", "[ No exception message ]");
sbFailed.show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
if (e.getMessage() != null)
Log.e("Yip", e.getMessage());
else
Log.e("Yip", "[ No exception message ]");
sbFailed.show();
}
});
}
JsonObjectRequest lock() {
return requestHandler("lock");
}
JsonObjectRequest shutdown() {
return requestHandler("shutdown");
}
JsonObjectRequest panic() {
return requestHandler("panic");
}
JsonObjectRequest infraShutdown() {
return requestHandler("infraShutdown");
}
JsonObjectRequest infraPanic() {
return requestHandler("infraPanic");
}
}