Skip to content

Commit

Permalink
Merge pull request #347 from solver-it-sro/fix/batch-pin-problems
Browse files Browse the repository at this point in the history
Fix password reset and batch sign pin problems
  • Loading branch information
celuchmarek authored Dec 4, 2023
2 parents 58c390e + 87d4289 commit 4dfb16d
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 50 deletions.
56 changes: 41 additions & 15 deletions src/main/java/digital/slovensko/autogram/core/Autogram.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import digital.slovensko.autogram.drivers.TokenDriver;
import digital.slovensko.autogram.ui.BatchUiResult;
import digital.slovensko.autogram.ui.UI;
import digital.slovensko.autogram.util.Logging;
import digital.slovensko.autogram.util.PDFUtils;
import eu.europa.esig.dss.model.DSSException;
import eu.europa.esig.dss.pdfa.PDFAStructureValidator;
Expand Down Expand Up @@ -89,22 +90,37 @@ public void startVisualization(SigningJob job) {
});
}

private void signCommonAndThen(SigningJob job, SigningKey signingKey, Consumer<SigningJob> callback) {
try {
job.signWithKeyAndRespond(signingKey);
if (batch == null || batch.isEnded() || batch.isAllProcessed())
passwordManager.reset();

callback.accept(job);
} catch (PINIncorrectException e) {
passwordManager.reset();
throw e;
} catch (AutogramException e) {
throw e;
} catch (DSSException e) {
throw AutogramException.createFromDSSException(e);
} catch (IllegalArgumentException e) {
throw AutogramException.createFromIllegalArgumentException(e);
} catch (Exception e) {
throw new UnrecognizedException(e);
}
}

public void sign(SigningJob job, SigningKey signingKey) {
ui.onWorkThreadDo(() -> {
try {
job.signWithKeyAndRespond(signingKey);
if (batch == null || batch.isEnded()) passwordManager.reset();
ui.onUIThreadDo(() -> ui.onSigningSuccess(job));
signCommonAndThen(job, signingKey, (jobNew) -> {
ui.onUIThreadDo(() -> ui.onSigningSuccess(jobNew));
});
} catch (ResponseNetworkErrorException e) {
onSigningFailed(e, job);
} catch (PINIncorrectException e) {
passwordManager.reset();
} catch (AutogramException e) {
onSigningFailed(e);
} catch (DSSException e) {
onSigningFailed(AutogramException.createFromDSSException(e));
} catch (IllegalArgumentException e) {
onSigningFailed(AutogramException.createFromIllegalArgumentException(e));
} catch (Exception e) {
onSigningFailed(new UnrecognizedException(e));
}
Expand Down Expand Up @@ -142,14 +158,24 @@ public void batchSign(SigningJob job, String batchId) {

ui.onWorkThreadDo(() -> {
try {
ui.signBatch(job, batch.getSigningKey());
} catch (PINIncorrectException e) {
ui.onUIThreadDo(() -> {
ui.cancelBatch(batch);
signCommonAndThen(job, batch.getSigningKey(), (jobNew) -> {
Logging.log("GUI: Signing batch job: " + job.hashCode() + " file " + job.getDocument().getName());
});

throw e;
} catch (AutogramException e) {
job.onDocumentSignFailed(e);
if (!e.batchCanContinue()) {
ui.onUIThreadDo(() -> {
ui.cancelBatch(batch);
});
throw e;
}
} catch (Exception e) {
AutogramException autogramException = new AutogramException("Document signing has failed", "", "", e);
job.onDocumentSignFailed(autogramException);
}
ui.onUIThreadDo(() -> {
ui.updateBatch();
});
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public char[] getContextSpecificPassword() {
public void reset() {
if (cachedPassword != null)
Arrays.fill(cachedPassword, '\0');

cachedPassword = null;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,9 @@ public class PINIncorrectException extends AutogramException {
public PINIncorrectException() {
super("Nastala chyba", "Zadali ste nesprávny bezpečnostný kód", "Pravdepodobne ste spravili chybu pri zadávaní bezpečnostného kódu.\n\nUistite sa, že zadávate správny bezpečnostný kód a skúste znova.");
}

@Override
public boolean batchCanContinue() {
return false;
}
}
4 changes: 2 additions & 2 deletions src/main/java/digital/slovensko/autogram/ui/UI.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ public interface UI {

void startBatch(Batch batch, Autogram autogram, Consumer<SigningKey> callback);

void signBatch(SigningJob job, SigningKey key);

void cancelBatch(Batch batch);

void showVisualization(Visualization visualization, Autogram autogram);
Expand Down Expand Up @@ -60,4 +58,6 @@ public interface UI {
char[] getKeystorePassword();

char[] getContextSpecificPassword();

public void updateBatch();
}
10 changes: 5 additions & 5 deletions src/main/java/digital/slovensko/autogram/ui/cli/CliUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,6 @@ public void startBatch(Batch batch, Autogram autogram, Consumer<SigningKey> call
// TODO Auto-generated method stub
}

@Override
public void signBatch(SigningJob job, SigningKey key) {
// TODO Auto-generated method stub
}

@Override
public void cancelBatch(Batch batch) {
// TODO Auto-generated method stub
Expand Down Expand Up @@ -278,4 +273,9 @@ public char[] getKeystorePassword() {
public char[] getContextSpecificPassword() {
return System.console().readPassword("Enter key password (hidden): ");
}

@Override
public void updateBatch() {
// TODO: no usage for this in CLI UI
}
}
25 changes: 1 addition & 24 deletions src/main/java/digital/slovensko/autogram/ui/gui/GUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
import digital.slovensko.autogram.drivers.TokenDriver;
import digital.slovensko.autogram.ui.BatchUiResult;
import digital.slovensko.autogram.ui.UI;
import digital.slovensko.autogram.util.Logging;
import eu.europa.esig.dss.model.DSSException;
import eu.europa.esig.dss.token.DSSPrivateKeyEntry;
import javafx.application.HostServices;
import javafx.application.Platform;
Expand Down Expand Up @@ -76,28 +74,7 @@ public void cancelBatch(Batch batch) {
enableSigningOnAllJobs();
}

@Override
public void signBatch(SigningJob job, SigningKey key) {
assertOnWorkThread();
try {
job.signWithKeyAndRespond(key);
Logging.log("GUI: Signing batch job: " + job.hashCode() + " file " + job.getDocument().getName());
} catch (AutogramException e) {
job.onDocumentSignFailed(e);
if (!e.batchCanContinue())
throw e;
} catch (DSSException e) {
job.onDocumentSignFailed(AutogramException.createFromDSSException(e));
} catch (Exception e) {
AutogramException autogramException = new AutogramException("Document signing has failed", "", "", e);
job.onDocumentSignFailed(autogramException);
}
onUIThreadDo(() -> {
updateBatch();
});
}

private void updateBatch() {
public void updateBatch() {
if (batchController == null)
return;
assertOnUIThread();
Expand Down
9 changes: 5 additions & 4 deletions src/test/java/digital/slovensko/autogram/AutogramTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,6 @@ public void startBatch(Batch batch, Autogram autogram, Consumer<SigningKey> call
public void cancelBatch(Batch batch) {
}

@Override
public void signBatch(SigningJob job, SigningKey key) {
}

@Override
public void pickTokenDriverAndThen(List<TokenDriver> drivers, Consumer<TokenDriver> callback) {
callback.accept(drivers.get(0));
Expand Down Expand Up @@ -281,6 +277,11 @@ public void onSignatureValidationCompleted(ValidationReports wrapper) {
public void onSignatureCheckCompleted(ValidationReports wrapper) {

}

@Override
public void updateBatch() {

}
}

private class TestSettings extends UserSettings {
Expand Down

0 comments on commit 4dfb16d

Please sign in to comment.