Skip to content

Commit

Permalink
Merge commit '048bdcffa3a218b87aa37bae39d51c2cd6ed7fed'
Browse files Browse the repository at this point in the history
  • Loading branch information
naramski committed Jun 6, 2018
2 parents 242a07f + 048bdcf commit 70c8663
Show file tree
Hide file tree
Showing 42 changed files with 501 additions and 161 deletions.
10 changes: 9 additions & 1 deletion nexu-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>lu.nowina.apps</groupId>
<artifactId>nexu</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.14</version>
</parent>
<artifactId>nexu-api</artifactId>

Expand All @@ -19,6 +19,14 @@
<artifactId>dss-spi</artifactId>
<version>${dss.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;

import eu.europa.esig.dss.DigestAlgorithm;
import eu.europa.esig.dss.token.PasswordInputCallback;
Expand All @@ -33,6 +34,14 @@ public AbstractCardProductAdapter() {
super();
}

private void setPasswordPrompt(final PasswordInputCallback callback) {
if(callback instanceof NexuPasswordInputCallback) {
final ResourceBundle resources = ResourceBundle.getBundle("bundles/nexu-api");
((NexuPasswordInputCallback) callback).setPasswordPrompt(
resources.getString("card.product.adapter.password.prompt"));
}
}

@Override
public final boolean accept(Product product) {
return (product instanceof DetectedCard) && accept((DetectedCard) product);
Expand All @@ -42,13 +51,15 @@ public final boolean accept(Product product) {

@Override
public String getLabel(NexuAPI api, Product product, PasswordInputCallback callback) {
setPasswordPrompt(callback);
return getLabel(api, (DetectedCard) product, callback);
}

protected abstract String getLabel(NexuAPI api, DetectedCard card, PasswordInputCallback callback);

@Override
public String getLabel(NexuAPI api, Product product, PasswordInputCallback callback, MessageDisplayCallback messageCallback) {
setPasswordPrompt(callback);
return getLabel(api, (DetectedCard) product, callback, messageCallback);
}

Expand All @@ -63,6 +74,7 @@ public final boolean supportMessageDisplayCallback(Product product) {

@Override
public final SignatureTokenConnection connect(NexuAPI api, Product product, PasswordInputCallback callback) {
setPasswordPrompt(callback);
return connect(api, (DetectedCard) product, callback);
}

Expand All @@ -71,6 +83,7 @@ public final SignatureTokenConnection connect(NexuAPI api, Product product, Pass
@Override
public final SignatureTokenConnection connect(NexuAPI api, Product product, PasswordInputCallback callback,
MessageDisplayCallback messageCallback) {
setPasswordPrompt(callback);
return connect(api, (DetectedCard) product, callback, messageCallback);
}

Expand Down
15 changes: 14 additions & 1 deletion nexu-api/src/main/java/lu/nowina/nexu/api/AppConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ public class AppConfig {
private static final String BINDING_PORTS_HTTPS = "binding_ports_https";

private static final String ENABLE_DATABASE_WEB_LOADER = "enable_database_web_loader";


private static final String ENABLE_SYSTRAY_MENU = "enable_systray_menu";

private static final Logger logger = LoggerFactory.getLogger(AppConfig.class.getName());

private String bindingIP;
Expand Down Expand Up @@ -113,6 +115,8 @@ public class AppConfig {

private boolean enableDatabaseWebLoader;

private boolean enableSystrayMenu;

public AppConfig() {
try {
final URL versionResourceURL = this.getClass().getResource("/version.txt");
Expand Down Expand Up @@ -341,6 +345,14 @@ public void setEnableDatabaseWebLoader(boolean enableDatabaseWebLoader) {
this.enableDatabaseWebLoader = enableDatabaseWebLoader;
}

public boolean isEnableSystrayMenu() {
return enableSystrayMenu;
}

public void setEnableSystrayMenu(boolean enableSystrayMenu) {
this.enableSystrayMenu = enableSystrayMenu;
}

public File getNexuHome() {
if (nexuHome != null) {
return nexuHome;
Expand Down Expand Up @@ -397,6 +409,7 @@ public void loadFromProperties(final Properties props) {
}

setEnableDatabaseWebLoader(Boolean.parseBoolean(props.getProperty(ENABLE_DATABASE_WEB_LOADER, "true")));
setEnableSystrayMenu(Boolean.parseBoolean(props.getProperty(ENABLE_SYSTRAY_MENU, "true")));
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* © Nowina Solutions, 2015-2017
*
* Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la Commission européenne - versions ultérieures de l’EUPL (la «Licence»).
* Vous ne pouvez utiliser la présente œuvre que conformément à la Licence.
* Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
*
* http://ec.europa.eu/idabc/eupl5
*
* Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la Licence est distribué «en l’état»,
* SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou implicites.
* Consultez la Licence pour les autorisations et les restrictions linguistiques spécifiques relevant de la Licence.
*/
package lu.nowina.nexu.api;

import eu.europa.esig.dss.token.PasswordInputCallback;

/**
* {@link PasswordInputCallback} whose password prompt can be modified.
*
* @author Jean Lepropre ([email protected])
*/
public interface NexuPasswordInputCallback extends PasswordInputCallback {

/**
* Sets the password prompt of this {@link PasswordInputCallback}.
* @param passwordPrompt The new password prompt.
*/
void setPasswordPrompt(String passwordPrompt);

}
13 changes: 13 additions & 0 deletions nexu-api/src/main/resources/bundles/nexu-api.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# © Nowina Solutions, 2015-2017
#
# Concédée sous licence EUPL, version 1.1 ou - dès leur approbation par la Commission européenne - versions ultérieures de l'EUPL (la «Licence»).
# Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
# Vous pouvez obtenir une copie de la Licence à l'adresse suivante:
#
# http://ec.europa.eu/idabc/eupl5
#
# Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la Licence est distribué «en l'état»,
# SANS GARANTIES OU CONDITIONS QUELLES QU'ELLES SOIENT, expresses ou implicites.
# Consultez la Licence pour les autorisations et les restrictions linguistiques spécifiques relevant de la Licence.

card.product.adapter.password.prompt=PIN code
13 changes: 13 additions & 0 deletions nexu-api/src/main/resources/bundles/nexu-api_fr.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# © Nowina Solutions, 2015-2017
#
# Concédée sous licence EUPL, version 1.1 ou - dès leur approbation par la Commission européenne - versions ultérieures de l'EUPL (la «Licence»).
# Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
# Vous pouvez obtenir une copie de la Licence à l'adresse suivante:
#
# http://ec.europa.eu/idabc/eupl5
#
# Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la Licence est distribué «en l'état»,
# SANS GARANTIES OU CONDITIONS QUELLES QU'ELLES SOIENT, expresses ou implicites.
# Consultez la Licence pour les autorisations et les restrictions linguistiques spécifiques relevant de la Licence.

card.product.adapter.password.prompt=Code PIN
13 changes: 13 additions & 0 deletions nexu-api/src/main/resources/bundles/nexu-api_nl.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# © Nowina Solutions, 2015-2017
#
# Concédée sous licence EUPL, version 1.1 ou - dès leur approbation par la Commission européenne - versions ultérieures de l'EUPL (la «Licence»).
# Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
# Vous pouvez obtenir une copie de la Licence à l'adresse suivante:
#
# http://ec.europa.eu/idabc/eupl5
#
# Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la Licence est distribué «en l'état»,
# SANS GARANTIES OU CONDITIONS QUELLES QU'ELLES SOIENT, expresses ou implicites.
# Consultez la Licence pour les autorisations et les restrictions linguistiques spécifiques relevant de la Licence.

card.product.adapter.password.prompt=Pincode
2 changes: 1 addition & 1 deletion nexu-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>lu.nowina.apps</groupId>
<artifactId>nexu</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.14</version>
</parent>
<artifactId>nexu-app</artifactId>

Expand Down
4 changes: 2 additions & 2 deletions nexu-bundle/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>lu.nowina.apps</groupId>
<artifactId>nexu</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.14</version>
</parent>
<artifactId>nexu-bundle</artifactId>
<packaging>pom</packaging>
Expand All @@ -16,7 +16,7 @@
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>jre-win32</artifactId>
<artifactId>jre-x86</artifactId>
<version>8.0.45</version>
<type>zip</type>
</dependency>
Expand Down
2 changes: 1 addition & 1 deletion nexu-bundle/src/main/assembly/assembly.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Consultez la Licence pour les autorisations et les restrictions linguistiques sp
<dependencySet>
<unpack>true</unpack>
<includes>
<include>com.oracle:jre-win32:zip</include>
<include>com.oracle:jre-x86:zip</include>
</includes>
<outputDirectory>java</outputDirectory>
<fileMode>0644</fileMode>
Expand Down
6 changes: 3 additions & 3 deletions nexu-bundle/src/main/resources/NexU-Startup.bat
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ rem Vous pouvez obtenir une copie de la Licence à l’adresse suivante
rem
rem http://ec.europa.eu/idabc/eupl5
rem
rem Sauf obligation le�gale ou contractuelle e�crite, le logiciel distribue� sous la Licence est distribue� «en l’e�tat»,
rem SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou implicites.
rem Consultez la Licence pour les autorisations et les restrictions linguistiques spe�cifiques relevant de la Licence.
rem Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la Licence est distribué «en l’état»,
rem SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou implicites.
rem Consultez la Licence pour les autorisations et les restrictions linguistiques spécifiques relevant de la Licence.

@echo off
start .\java\bin\javaw -Djavafx.preloader=lu.nowina.nexu.NexUPreLoader -Dglass.accessible.force=false -jar nexu.jar
2 changes: 1 addition & 1 deletion nexu-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>lu.nowina.apps</groupId>
<artifactId>nexu</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.14</version>
</parent>
<artifactId>nexu-core</artifactId>

Expand Down
10 changes: 8 additions & 2 deletions nexu-core/src/main/java/lu/nowina/nexu/CardDetector.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -51,6 +52,9 @@
@SuppressWarnings("restriction")
public class CardDetector {

private static final List<String> RESET_CONTEXT_ERRORS = Arrays.asList(
"SCARD_E_SERVICE_STOPPED", "WINDOWS_ERROR_INVALID_HANDLE", "SCARD_E_INVALID_HANDLE");

private static final Logger logger = LoggerFactory.getLogger(CardDetector.class.getSimpleName());

private CardTerminals cardTerminals;
Expand Down Expand Up @@ -102,8 +106,10 @@ private List<CardTerminal> getCardTerminals() {
return cardTerminals.list();
} catch(final CardException e) {
final Throwable cause = e.getCause();
if((cause != null) && "SCARD_E_SERVICE_STOPPED".equals(cause.getMessage()) && !cardTerminalsCreated) {
logger.debug("Service stopped. Re-establish a new connection.");
if((cause != null) && RESET_CONTEXT_ERRORS.contains(cause.getMessage()) && !cardTerminalsCreated) {
logger.debug("Error class: " + cause.getClass().getName() +
". Message: " + cause.getMessage() +
". Re-establish a new connection.");
try {
closeCardTerminals();
} catch(final Exception e1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,8 @@ private void initSignatureTokenConnection() {
try {
switch(configuredKeystore.getType()) {
case PKCS12:
proxied = new Pkcs12SignatureToken(new String(callback.getPassword()),
new URL(configuredKeystore.getUrl()).openStream());
proxied = new Pkcs12SignatureToken(new URL(configuredKeystore.getUrl()).openStream(),
new String(callback.getPassword()));
break;
case JKS:
proxied = new JKSSignatureToken(new URL(configuredKeystore.getUrl()).openStream(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import eu.europa.esig.dss.DSSASN1Utils;
import eu.europa.esig.dss.token.DSSPrivateKeyEntry;
import eu.europa.esig.dss.x509.CertificateToken;
import javafx.collections.FXCollections;
Expand Down Expand Up @@ -84,7 +85,7 @@ public void initialize(URL location, ResourceBundle resources) {
protected void updateItem(DSSPrivateKeyEntry k, boolean bln) {
super.updateItem(k, bln);
if (k != null) {
setText(k.getCertificate().getSubjectShortName());
setText(DSSASN1Utils.getSubjectCommonName(k.getCertificate()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,11 @@ public class MessageController extends AbstractUIOperationController<Void> imple

@Override
public void initialize(URL location, ResourceBundle resources) {
ok.setOnAction((e) -> {
signalEnd(null);
});
if(ok != null) {
ok.setOnAction((e) -> {
signalEnd(null);
});
}
defaultErrorText = resources.getString("error");
this.resources = resources;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@
import java.net.URL;
import java.util.ResourceBundle;

import org.apache.commons.lang.StringUtils;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import lu.nowina.nexu.view.core.AbstractUIOperationController;

Expand All @@ -32,6 +35,9 @@ public class PasswordInputController extends AbstractUIOperationController<char[
@FXML
private Button cancel;

@FXML
private Label passwordPrompt;

@FXML
private PasswordField password;

Expand All @@ -47,4 +53,11 @@ public void initialize(URL location, ResourceBundle resources) {
});
}

@Override
public void init(Object... params) {
final String passwordPrompt = (String) params[0];
if(StringUtils.isNotEmpty(passwordPrompt)) {
this.passwordPrompt.setText(passwordPrompt);
}
}
}
2 changes: 1 addition & 1 deletion nexu-core/src/main/resources/bundles/nexu.properties
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ product.selection.detected.card.button.label=Smartcard in terminal {0}\n{1}\nATR
product.selection.configured.keystore.button.label={0} keystore\n{1}

# Message display callback
message.display.callback.input.pinpad=Please enter your PIN code on the secure PIN pad reader. Press OK at the end.
message.display.callback.input.pinpad=Please enter your PIN code on the secure PIN pad reader. Press OK/Enter at the end.
message.display.callback.pin.locked=Your PIN code is blocked!

# Table view
Expand Down
2 changes: 1 addition & 1 deletion nexu-core/src/main/resources/bundles/nexu_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ product.selection.detected.card.button.label=Carte
product.selection.configured.keystore.button.label=Magasin de clés {0}\n{1}

# Message display callback
message.display.callback.input.pinpad=Veuillez introduire votre code PIN sur le clavier PIN sécurisé. Appuyez sur OK à la fin.
message.display.callback.input.pinpad=Veuillez introduire votre code PIN sur le clavier PIN sécurisé. Appuyez sur OK/Entrée à la fin.
message.display.callback.pin.locked=Votre code PIN est bloqué !

# Table view
Expand Down
2 changes: 1 addition & 1 deletion nexu-core/src/main/resources/bundles/nexu_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ product.selection.detected.card.button.label=Smartcard in de lezer {0}\n{1}\nATR
product.selection.configured.keystore.button.label={0} keystore\n{1}

# Message display callback
message.display.callback.input.pinpad=Voer uw pincode in via het beveiligde cijfertoetsenbord. Druk op OK als u klaar bent.
message.display.callback.input.pinpad=Voer uw pincode in via het beveiligde cijfertoetsenbord. Druk op OK/Enter als u klaar bent.
message.display.callback.pin.locked=Uw pincode is geblokkeerd!

# Table view
Expand Down
Loading

0 comments on commit 70c8663

Please sign in to comment.