Skip to content

Commit 0b14ffa

Browse files
committed
view: error explanation string for failed SSL server cert verification
1 parent d108a5b commit 0b14ffa

2 files changed

Lines changed: 20 additions & 14 deletions

File tree

src/main/java/org/kontalk/misc/KonException.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,20 @@ public enum Error {
4848
}
4949

5050
private final Error mError;
51-
private final Class<?> mExceptionClass;
5251

5352
public KonException(Error error, Exception ex) {
54-
super();
53+
super(ex);
5554
mError = error;
56-
mExceptionClass = ex.getClass();
5755
}
5856

5957
public KonException(Error error) {
6058
super();
6159
mError = error;
62-
mExceptionClass = this.getClass();
6360
}
6461

65-
public Class<?> getExceptionClass() {
66-
return mExceptionClass;
62+
public Class<?> getCauseClass() {
63+
Throwable cause = this.getCause();
64+
return cause == null ? this.getClass() : cause.getClass();
6765
}
6866

6967
public Error getError() {

src/main/java/org/kontalk/view/Utils.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,10 +268,10 @@ static String getErrorText(KonException ex) {
268268
break;
269269
case IMPORT_KEY:
270270
errorText = Tr.tr("Can't create personal key from key files.") + " ";
271-
if (ex.getExceptionClass().equals(IOException.class)) {
271+
if (ex.getCauseClass().equals(IOException.class)) {
272272
errorText += eol + Tr.tr("Is the public key file valid?");
273273
}
274-
if (ex.getExceptionClass().equals(CertificateException.class)) {
274+
if (ex.getCauseClass().equals(CertificateException.class)) {
275275
errorText += eol + Tr.tr("Are all key files valid?");
276276
}
277277
break;
@@ -299,19 +299,27 @@ static String getErrorText(KonException ex) {
299299
break;
300300
case CLIENT_CONNECT:
301301
errorText = Tr.tr("Can't connect to server.");
302-
if (ex.getExceptionClass().equals(SmackException.ConnectionException.class)) {
302+
303+
if (ex.getCauseClass().equals(SmackException.ConnectionException.class)) {
303304
errorText += eol + Tr.tr("Is the server address correct?");
304-
}
305-
if (ex.getExceptionClass().equals(SSLHandshakeException.class)) {
305+
} else if (ex.getCauseClass().equals(SSLHandshakeException.class)) {
306306
errorText += eol + Tr.tr("The server rejects the key.");
307-
}
308-
if (ex.getExceptionClass().equals(SmackException.NoResponseException.class)) {
307+
} else if (ex.getCauseClass().equals(SmackException.NoResponseException.class)) {
309308
errorText += eol + Tr.tr("The server does not respond.");
309+
} else {
310+
Throwable cause = ex.getCause();
311+
if (cause != null) {
312+
Throwable causeCause = cause.getCause();
313+
if (causeCause != null &&
314+
causeCause.getClass().equals(SSLHandshakeException.class)) {
315+
errorText += eol + Tr.tr("The server certificate could not be validated.");
316+
}
317+
}
310318
}
311319
break;
312320
case CLIENT_LOGIN:
313321
errorText = Tr.tr("Can't login to server.");
314-
if (ex.getExceptionClass().equals(SASLErrorException.class)) {
322+
if (ex.getCauseClass().equals(SASLErrorException.class)) {
315323
errorText += eol + Tr.tr("The server rejects the account. Is the specified server correct and the account valid?");
316324
}
317325
break;

0 commit comments

Comments
 (0)