From 1b8dc5de5f9f6dd3a3dab0edca07c39bc688a671 Mon Sep 17 00:00:00 2001 From: Jens Date: Mon, 11 Dec 2023 22:50:07 +0100 Subject: [PATCH] Http method selectable --- .../java/com/jens/automation2/Action.java | 23 +++++--- .../ActivityManageActionTriggerUrl.java | 58 ++++++++++++++++--- .../com/jens/automation2/Miscellaneous.java | 38 ++++++++---- .../jens/automation2/XmlFileInterface.java | 2 +- .../activity_manage_action_trigger_url.xml | 28 +++++++++ app/src/main/res/values/strings.xml | 3 + 6 files changed, 124 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java index 0983fa9..b6cf8d8 100644 --- a/app/src/main/java/com/jens/automation2/Action.java +++ b/app/src/main/java/com/jens/automation2/Action.java @@ -648,6 +648,7 @@ public class Action { String username = null; String password = null; + String method = ActivityManageActionTriggerUrl.methodGet; String url; String[] components = getParameter2().split(";"); @@ -657,6 +658,9 @@ public class Action username = components[0]; password = components[1]; url = components[2]; + + if(components.length >= 4) + method = components[3]; } else // compatibility for very old versions which haven't upgraded, yet. url = components[0]; @@ -670,7 +674,7 @@ public class Action Miscellaneous.logEvent("i", "HTTP", "Attempting download of " + url, 4); //getResources().getString("attemptingDownloadOf"); if(this.getParameter1()) // use authentication - new DownloadTask().execute(url, username, password); + new DownloadTask().execute(url, username, password, methodnochindiesignaturaufnehmen); else new DownloadTask().execute(url, null, null); } @@ -692,16 +696,19 @@ public class Action String urlUsername = null; String urlPassword = null; + String method = ActivityManageActionTriggerUrl.methodGet; if(parameters.length >= 3) { - urlUsername=parameters[1]; - urlPassword=parameters[2]; + urlUsername = parameters[1]; + urlPassword = parameters[2]; + + if(parameters.length >= 4) + method = parameters[3]; } String response = "httpError"; - HttpGet post; - - if(Settings.httpAttempts < 1) + + if(Settings.httpAttempts < 1) Miscellaneous.logEvent("w", "HTTP Request", Miscellaneous.getAnyContext().getResources().getString(R.string.cantDownloadTooFewRequestsInSettings), 3); while(attempts <= Settings.httpAttempts && response.equals("httpError")) @@ -710,9 +717,9 @@ public class Action // Either thorough checking or no encryption if(!Settings.httpAcceptAllCertificates || !urlString.toLowerCase(Locale.getDefault()).contains("https")) - response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword); + response = Miscellaneous.downloadURL(urlString, urlUsername, urlPassword, method); else - response = Miscellaneous.downloadURLwithoutCertificateChecking(urlString, urlUsername, urlPassword); + response = Miscellaneous.downloadURLwithoutCertificateChecking(urlString, urlUsername, urlPassword, method); try { diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionTriggerUrl.java b/app/src/main/java/com/jens/automation2/ActivityManageActionTriggerUrl.java index 4f1dc64..3849ece 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionTriggerUrl.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionTriggerUrl.java @@ -13,6 +13,7 @@ import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ListView; +import android.widget.RadioButton; import android.widget.TableLayout; import android.widget.Toast; @@ -26,11 +27,15 @@ public class ActivityManageActionTriggerUrl extends Activity EditText etTriggerUrl, etTriggerUrlUsername, etTriggerUrlPassword; ListView lvTriggerUrlPostParameters; CheckBox chkTriggerUrlUseAuthentication; + RadioButton rbTriggerUrlMethodGet, rbTriggerUrlMethodPost; TableLayout tlTriggerUrlAuthentication; ArrayAdapter> lvTriggerUrlPostParametersAdapter; // private String existingUrl = ""; + + public static final String methodGet = "GET"; + public static final String methodPost = "POST"; public static boolean edit = false; public static Action resultingAction = null; @@ -49,6 +54,9 @@ public class ActivityManageActionTriggerUrl extends Activity lvTriggerUrlPostParameters = (ListView)findViewById(R.id.lvTriggerUrlPostParameters); tlTriggerUrlAuthentication = (TableLayout)findViewById(R.id.tlTriggerUrlAuthentication); bSaveTriggerUrl = (Button)findViewById(R.id.bSaveSpeakText); + rbTriggerUrlMethodGet = (RadioButton) findViewById(R.id.rbTriggerUrlMethodGet); + rbTriggerUrlMethodPost = (RadioButton) findViewById(R.id.rbTriggerUrlMethodPost); + bSaveTriggerUrl.setOnClickListener(new OnClickListener() { @Override @@ -59,6 +67,8 @@ public class ActivityManageActionTriggerUrl extends Activity if(resultingAction == null) { resultingAction = new Action(); + } + resultingAction.setAction(Action_Enum.triggerUrl); resultingAction.setParameter1(chkTriggerUrlUseAuthentication.isChecked()); @@ -70,13 +80,18 @@ public class ActivityManageActionTriggerUrl extends Activity if(password == null) password = ""; - + + String method = methodGet; + if(rbTriggerUrlMethodPost.isChecked()) + method = methodPost; + ActivityManageActionTriggerUrl.resultingAction.setParameter2( username + ";" + password + ";" + - etTriggerUrl.getText().toString().trim() + etTriggerUrl.getText().toString().trim() + ";" + + method ); - } + backToRuleManager(); } else @@ -84,16 +99,25 @@ public class ActivityManageActionTriggerUrl extends Activity } }); - chkTriggerUrlUseAuthentication.setOnCheckedChangeListener(new OnCheckedChangeListener() - { + { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) + { tlTriggerUrlAuthentication.setVisibility(View.VISIBLE); + rbTriggerUrlMethodGet.setChecked(false); + rbTriggerUrlMethodPost.setChecked(true); + rbTriggerUrlMethodGet.setEnabled(false); + rbTriggerUrlMethodPost.setEnabled(false); + } else + { tlTriggerUrlAuthentication.setVisibility(View.GONE); + rbTriggerUrlMethodGet.setEnabled(true); + rbTriggerUrlMethodPost.setEnabled(true); + } etTriggerUrlUsername.setEnabled(isChecked); etTriggerUrlPassword.setEnabled(isChecked); @@ -109,7 +133,6 @@ public class ActivityManageActionTriggerUrl extends Activity } }); updateListView(); - ActivityManageActionTriggerUrl.edit = getIntent().getBooleanExtra("edit", false); if(edit) @@ -123,6 +146,20 @@ public class ActivityManageActionTriggerUrl extends Activity chkTriggerUrlUseAuthentication.setChecked(ActivityManageActionTriggerUrl.resultingAction.getParameter1()); etTriggerUrlUsername.setText(components[0]); etTriggerUrlPassword.setText(components[1]); + + if(components.length >= 4) + { + switch(components[3]) + { + case methodPost: + rbTriggerUrlMethodPost.setChecked(true); + break; + case methodGet: + default: + rbTriggerUrlMethodGet.setChecked(true); + break; + } + } } else etTriggerUrl.setText(components[0]); @@ -141,13 +178,18 @@ public class ActivityManageActionTriggerUrl extends Activity if(password == null) password = ""; - + + String method = methodGet; + if(rbTriggerUrlMethodPost.isChecked()) + method = methodPost; + ActivityManageActionTriggerUrl.resultingAction.setParameter1(chkTriggerUrlUseAuthentication.isChecked()); ActivityManageActionTriggerUrl.resultingAction.setParameter2( username + ";" + password + ";" + - etTriggerUrl.getText().toString() + etTriggerUrl.getText().toString() + ";" + + method ); } diff --git a/app/src/main/java/com/jens/automation2/Miscellaneous.java b/app/src/main/java/com/jens/automation2/Miscellaneous.java index 4275f26..97bf03a 100644 --- a/app/src/main/java/com/jens/automation2/Miscellaneous.java +++ b/app/src/main/java/com/jens/automation2/Miscellaneous.java @@ -44,7 +44,10 @@ import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; @@ -120,7 +123,7 @@ public class Miscellaneous extends Service public static final String lineSeparator = System.getProperty("line.separator"); - public static String downloadURL(String url, String username, String password) + public static String downloadURL(String url, String username, String password, String method) { HttpClient httpclient = new DefaultHttpClient(); StringBuilder responseBody = new StringBuilder(); @@ -148,6 +151,8 @@ public class Miscellaneous extends Service connection.setDoOutput(true); connection.setRequestProperty ("Authorization", "Basic " + encodedCredentials); } + else if(method.equals(ActivityManageActionTriggerUrl.methodPost)) + connection.setRequestMethod("POST"); InputStream content = (InputStream)connection.getInputStream(); BufferedReader in = new BufferedReader (new InputStreamReader (content)); @@ -174,10 +179,8 @@ public class Miscellaneous extends Service } } - public static String downloadURLwithoutCertificateChecking(String url, String username, String password) + public static String downloadURLwithoutCertificateChecking(String url, String username, String password, String method) { -// HttpClient httpclient = new DefaultHttpClient(); -// StringBuilder responseBody = new StringBuilder(); boolean errorFound = false; try @@ -187,20 +190,33 @@ public class Miscellaneous extends Service HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpClient httpclient = new DefaultHttpClient(params); httpclient = Actions.getInsecureSslClient(httpclient); - - HttpPost httppost = new HttpPost(url); + + HttpEntityEnclosingRequestBase httpRequest; + switch (method) + { + case ActivityManageActionTriggerUrl.methodPost: + httpRequest = new HttpPost(url); + break; + case ActivityManageActionTriggerUrl.methodGet: + default: + httpRequest = new HttpEntityEnclosingRequestBase() + { + @Override + public String getMethod() + {somethingMissing + return null; + } + }; + } // Add http simple authentication if specified if(username != null && password != null) { String encodedCredentials = Base64.encodeToString(new String(username + ":" + password).getBytes(), Base64.DEFAULT); -// List nameValuePairs = new ArrayList(1); - httppost.addHeader("Authorization", "Basic " + encodedCredentials); -// nameValuePairs.add(new BasicNameValuePair("Authorization", "Basic " + encodedCredentials)); -// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); + httpRequest.addHeader("Authorization", "Basic " + encodedCredentials); } - HttpResponse response = httpclient.execute(httppost); + HttpResponse response = httpclient.execute(httpRequest); HttpEntity entity = response.getEntity(); if (entity != null) { diff --git a/app/src/main/java/com/jens/automation2/XmlFileInterface.java b/app/src/main/java/com/jens/automation2/XmlFileInterface.java index aa3bddb..4d48ee9 100644 --- a/app/src/main/java/com/jens/automation2/XmlFileInterface.java +++ b/app/src/main/java/com/jens/automation2/XmlFileInterface.java @@ -217,7 +217,7 @@ public class XmlFileInterface } serializer.endTag(null, "ProfileCollection"); - + serializer.startTag(null, "RuleCollection"); for(int i=0; i + + + + + + + + + + This trigger will be valid if you just disconnected from the wifi specified above OR while the service is still starting and if you\'re not connected to any wifi. If you want the trigger to fire only when you\'re explicitly disconnecting from a certain wifi, add another trigger \"service is not starting\". Class full name by startForegroundService() + Method + GET + POST \ No newline at end of file