Skip to content

Commit b5497aa

Browse files
authored
Merge pull request #87 from norkator/ipm-cleartext-communication-support
IPM cleartext communication support
2 parents 1fc5a0f + dd767c9 commit b5497aa

File tree

11 files changed

+63
-9
lines changed

11 files changed

+63
-9
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
minSdkVersion 22
1111
targetSdkVersion 30
1212

13-
versionCode 50
14-
versionName "1.18.1" // Use Semver
13+
versionCode 51
14+
versionName "1.19.0" // Use Semver
1515
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1616
}
1717
buildTypes {

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
android:allowBackup="true"
1414
android:icon="@mipmap/logo"
1515
android:label="@string/app_name"
16+
android:networkSecurityConfig="@xml/network_security_config"
1617
android:roundIcon="@mipmap/logo_round"
1718
android:supportsRtl="true"
1819
android:theme="@style/AppTheme"

app/src/main/java/com/nitramite/apcupsdmonitor/ConnectorTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ ups.UPS_SERVER_ADDRESS, portStringToInteger(ups.UPS_SERVER_PORT),
174174
case ConnectionType.UPS_CONNECTION_TYPE_IPM:
175175
// Eaton IPM
176176
IPM ipm = new IPM(
177-
true, ups.UPS_SERVER_ADDRESS, ups.UPS_SERVER_PORT,
177+
ups.UPS_USE_HTTPS, ups.UPS_SERVER_ADDRESS, ups.UPS_SERVER_PORT,
178178
ups.UPS_SERVER_USERNAME, ups.UPS_SERVER_PASSWORD, ups.UPS_NODE_ID
179179
);
180180
ContentValues contentValues = new ContentValues();

app/src/main/java/com/nitramite/apcupsdmonitor/DatabaseHelper.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ public class DatabaseHelper extends SQLiteOpenHelper {
2525
private boolean upgrade = false;
2626

2727
// DATABASE VERSION
28-
private static final int DATABASE_VERSION = 6;
28+
private static final int DATABASE_VERSION = 7;
2929
// 1 = v1.1.5
3030
// 2 = v1.2.2, added ups load events boolean
3131
// 3 = v1.8.7, added ups_reachable boolean
3232
// 4 = v1.12.0, contributor bo0tzz added is_apc_nmc field
3333
// 5 = v1.15.0, added ups_node_id field for Eaton IPM use
3434
// 6 = v1.18.0, added ups_enabled to disable ups if needed
35+
// 7 = v1.19.0, added ups_use_https for http / https toggling cases
3536

3637

3738
// DATABASE NAME
@@ -65,6 +66,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
6566
static final String UPS_IS_APC_NMC = "is_apc_nmc";
6667
static final String UPS_NODE_ID = "ups_node_id"; // string node id
6768
static final String UPS_ENABLED = "ups_enabled";
69+
static final String UPS_USE_HTTPS = "ups_use_https";
6870

6971
// -------------------------------------------------------------------
7072

@@ -99,7 +101,8 @@ public void onCreate(SQLiteDatabase db) {
99101
db.execSQL("CREATE TABLE IF NOT EXISTS " + UPS_TABLE + "(id INTEGER PRIMARY KEY AUTOINCREMENT, ups_connection_type TEXT, server_address TEXT, server_port TEXT, server_username TEXT, " +
100102
"server_password TEXT, server_use_private_key_auth TEXT, server_private_key_password TEXT, server_private_key_path TEXT, server_strict_host_key_checking TEXT, " +
101103
"server_status_command TEXT, server_events_location TEXT, server_host_name TEXT, server_host_finger_print TEXT, server_host_key TEXT, " +
102-
"ups_status_str TEXT, ups_load_events TEXT, ups_reachable TEXT, is_apc_nmc INTEGER, ups_node_id TEXT, ups_enabled INTEGER DEFAULT 1)");
104+
"ups_status_str TEXT, ups_load_events TEXT, ups_reachable TEXT, is_apc_nmc INTEGER, ups_node_id TEXT, ups_enabled INTEGER DEFAULT 1, " +
105+
"ups_use_https INTEGER DEFAULT 1)");
103106

104107
// Create events data table
105108
db.execSQL("CREATE TABLE IF NOT EXISTS " + EVENTS_TABLE + "(id INTEGER PRIMARY KEY AUTOINCREMENT, ups_id TEXT, event_str TEXT)");
@@ -197,6 +200,7 @@ ArrayList<UPS> getAllUps(String upsId, boolean connectorTask) {
197200
ups.UPS_IS_APC_NMC = res.getInt(18) != 0;
198201
ups.UPS_NODE_ID = res.getString(19);
199202
ups.UPS_ENABLED = res.getInt(20) == 1;
203+
ups.UPS_USE_HTTPS = res.getInt(21) == 1;
200204
upsArrayList.add(ups);
201205
}
202206
res.close();

app/src/main/java/com/nitramite/apcupsdmonitor/IPM.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.nitramite.apcupsdmonitor;
22

33
import android.annotation.SuppressLint;
4-
import android.content.Context;
54
import android.util.Log;
65

76
import org.json.JSONArray;

app/src/main/java/com/nitramite/apcupsdmonitor/UPS.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class UPS {
3434
public boolean UPS_IS_APC_NMC = false;
3535
public String UPS_NODE_ID = null; // IPM this is serial number of your device
3636
public boolean UPS_ENABLED = true; // cab disable ups momentarily if user wants so
37+
public boolean UPS_USE_HTTPS = true;
3738

3839
// Variables | status and event strings
3940
private String UPS_STATUS_STR = null;

app/src/main/java/com/nitramite/apcupsdmonitor/UpsEditor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class UpsEditor extends AppCompatActivity {
4949

5050
// View elements
5151
private EditText privateKeyLocationET;
52-
private LinearLayout credentialOptionsLayout, sshOptionsLayout, ipmOptionsLayout;
52+
private LinearLayout credentialOptionsLayout, sshOptionsLayout, ipmOptionsLayout, httpHttpsOptionsLayout;
5353
private RadioButton sshRB;
5454
private RadioButton nisRB;
5555
private RadioButton ipmRB;
@@ -88,6 +88,7 @@ protected void onCreate(Bundle savedInstanceState) {
8888
final EditText eventsLocationET = findViewById(R.id.eventsLocationET);
8989
final EditText nodeIdET = findViewById(R.id.nodeIdET);
9090
final Switch upsEnabledSwitch = findViewById(R.id.upsEnabledSwitch);
91+
final Switch httpsEnabledSwitch = findViewById(R.id.httpsEnabledSwitch);
9192

9293

9394
final Spinner cmdPresetSelection = findViewById(R.id.cmdPresetSelection);
@@ -143,25 +144,29 @@ public void onNothingSelected(AdapterView<?> parent) {
143144
sshOptionsLayout = findViewById(R.id.sshOptionsLayout);
144145
credentialOptionsLayout = findViewById(R.id.credentialOptionsLayout);
145146
ipmOptionsLayout = findViewById(R.id.ipmOptionsLayout);
147+
httpHttpsOptionsLayout = findViewById(R.id.httpHttpsOptionsLayout);
146148

147149
sshRB.setOnClickListener(v -> {
148150
sshOptionsLayout.setVisibility(View.VISIBLE);
149151
credentialOptionsLayout.setVisibility(View.VISIBLE);
150152
ipmOptionsLayout.setVisibility(View.GONE);
153+
httpHttpsOptionsLayout.setVisibility(View.GONE);
151154
nisRB.setChecked(false);
152155
ipmRB.setChecked(false);
153156
});
154157
nisRB.setOnClickListener(v -> {
155158
sshOptionsLayout.setVisibility(View.GONE);
156159
credentialOptionsLayout.setVisibility(View.GONE);
157160
ipmOptionsLayout.setVisibility(View.GONE);
161+
httpHttpsOptionsLayout.setVisibility(View.GONE);
158162
sshRB.setChecked(false);
159163
ipmRB.setChecked(false);
160164
});
161165
ipmRB.setOnClickListener(v -> {
162166
sshOptionsLayout.setVisibility(View.GONE);
163167
credentialOptionsLayout.setVisibility(View.VISIBLE);
164168
ipmOptionsLayout.setVisibility(View.VISIBLE);
169+
httpHttpsOptionsLayout.setVisibility(View.VISIBLE);
165170
nisRB.setChecked(false);
166171
sshRB.setChecked(false);
167172
});
@@ -222,6 +227,7 @@ public void onNothingSelected(AdapterView<?> parent) {
222227
loadUpsEventsSwitch.setChecked(ups.getUpsLoadEvents());
223228
nodeIdET.setText(ups.UPS_NODE_ID);
224229
upsEnabledSwitch.setChecked(ups.UPS_ENABLED);
230+
httpsEnabledSwitch.setChecked(ups.UPS_USE_HTTPS);
225231
}
226232

227233

@@ -264,6 +270,7 @@ public void onNothingSelected(AdapterView<?> parent) {
264270
contentValues.put(DatabaseHelper.UPS_LOAD_EVENTS, loadUpsEventsSwitch.isChecked() ? "1" : "0");
265271
contentValues.put(DatabaseHelper.UPS_NODE_ID, nodeIdET.getText().toString());
266272
contentValues.put(DatabaseHelper.UPS_ENABLED, upsEnabledSwitch.isChecked() ? 1 : 0);
273+
contentValues.put(DatabaseHelper.UPS_USE_HTTPS, httpsEnabledSwitch.isChecked() ? 1 : 0);
267274
databaseHelper.insertUpdateUps(null, upsId, contentValues);
268275
Toast.makeText(UpsEditor.this, R.string.saved, Toast.LENGTH_SHORT).show();
269276
UpsEditor.this.finish();

app/src/main/res/layout/activity_ups_editor.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,39 @@
128128
android:inputType="number" />
129129

130130

131+
132+
<LinearLayout
133+
android:id="@+id/httpHttpsOptionsLayout"
134+
android:layout_width="match_parent"
135+
android:layout_height="wrap_content"
136+
android:orientation="vertical">
137+
138+
<TextView
139+
android:layout_width="wrap_content"
140+
android:layout_height="wrap_content"
141+
android:layout_marginTop="30dp"
142+
android:text="@string/use_https"
143+
android:textSize="18sp" />
144+
145+
<TextView
146+
android:layout_width="wrap_content"
147+
android:layout_height="wrap_content"
148+
android:text="@string/http_https_connection_description"
149+
android:textSize="12sp" />
150+
151+
<Switch
152+
android:id="@+id/httpsEnabledSwitch"
153+
android:layout_width="wrap_content"
154+
android:layout_height="wrap_content"
155+
android:layout_marginTop="5dp"
156+
android:singleLine="true"
157+
android:checked="true"
158+
tools:ignore="UseSwitchCompatOrMaterialXml,UseSwitchOrMaterialXml" />
159+
160+
</LinearLayout>
161+
162+
163+
131164
<LinearLayout
132165
android:id="@+id/credentialOptionsLayout"
133166
android:layout_width="match_parent"

app/src/main/res/values-ru/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<string name="server_address">Адрес сервера</string>
4747
<string name="server_ip_or_domain_address">IP-адрес сервера или адрес домена</string>
4848
<string name="server_port">Порт сервера</string>
49-
<string name="ssh_default_port_is_22_apcupsd_default_tcp_port_is_3551">Порт SSH по умолчанию - 22. Порт TCP по умолчанию APCUPSD - 3551. Eaton IPM 4680.</string>
49+
<string name="ssh_default_port_is_22_apcupsd_default_tcp_port_is_3551">Порт SSH по умолчанию - 22. Порт TCP по умолчанию APCUPSD - 3551. Eaton IPM HTTPS 4680 а также HTTP 4679.</string>
5050
<string name="port_to_use_for_connection">Порт для подключения</string>
5151
<string name="server_username_ssh">Имя пользователя сервера (SSH)</string>
5252
<string name="ssh_server_username">Имя пользователя</string>
@@ -76,6 +76,8 @@
7676
<string name="private_key_file_imported_failed">Не удалось импортировать файл закрытого ключа.</string>
7777
<string name="ups_enabled">ИБП Включено</string>
7878
<string name="ups_enable_toggle_description">ИБП можно на мгновение отключить, если он не подключен. Затем процесс обновления пропустит этот ИБП.</string>
79+
<string name="use_https">Использовать HTTPS</string>
80+
<string name="http_https_connection_description">HTTPS использует безопасный зашифрованный канал связи, что рекомендуется. Для HTTPS вам понадобится действующий сертификат. Использовать открытый текст HTTP только как последний вариант.</string>
7981

8082
<!-- UpsViewer -->
8183
<string name="m">M</string>

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<string name="server_address">Server address</string>
4747
<string name="server_ip_or_domain_address">Server ip or domain address</string>
4848
<string name="server_port">Server port</string>
49-
<string name="ssh_default_port_is_22_apcupsd_default_tcp_port_is_3551">SSH default port is 22. APCUPSD default tcp port is 3551. Eaton IPM 4680.</string>
49+
<string name="ssh_default_port_is_22_apcupsd_default_tcp_port_is_3551">SSH default port is 22. APCUPSD default tcp port is 3551. Eaton IPM HTTPS 4680 and HTTP 4679.</string>
5050
<string name="port_to_use_for_connection">Port to use for connection</string>
5151
<string name="server_username_ssh">Server username</string>
5252
<string name="ssh_server_username">Server username (SSH, IPM etc)</string>
@@ -76,6 +76,8 @@
7676
<string name="private_key_file_imported_failed">Failed to import private key file.</string>
7777
<string name="ups_enabled">UPS Enabled</string>
7878
<string name="ups_enable_toggle_description">UPS can be disabled momentarily if its not connected. Update process will then skip this UPS.</string>
79+
<string name="use_https">Use HTTPS</string>
80+
<string name="http_https_connection_description">HTTPS uses secure encrypted communication channel which is recommended way. With HTTPS you will need valid certificate. Use cleartext HTTP only as last option.</string>
7981

8082
<!-- UpsViewer -->
8183
<string name="m">M</string>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<network-security-config xmlns:tools="http://schemas.android.com/tools">
3+
<base-config cleartextTrafficPermitted="true"
4+
tools:ignore="InsecureBaseConfiguration" />
5+
</network-security-config>

0 commit comments

Comments
 (0)