Skip to content
This repository was archived by the owner on Aug 10, 2021. It is now read-only.

Commit 70dc0d5

Browse files
committed
Merge branch 'develop'
2 parents 34fc661 + 05d0554 commit 70dc0d5

File tree

95 files changed

+4224
-1028
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+4224
-1028
lines changed

doc/Configuration.md

Lines changed: 303 additions & 40 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<groupId>ee.ria.tara</groupId>
77
<artifactId>tara-server</artifactId>
88
<packaging>war</packaging>
9-
<version>1.1.2</version>
9+
<version>1.1.3</version>
1010

1111
<properties>
1212
<cas.version>5.1.9</cas.version>
@@ -151,6 +151,12 @@
151151
<artifactId>cas-server-core</artifactId>
152152
<version>${cas.version}</version>
153153
</dependency>
154+
<dependency>
155+
<groupId>org.apereo.cas</groupId>
156+
<artifactId>cas-server-core-audit</artifactId>
157+
<version>${cas.version}</version>
158+
<scope>provided</scope>
159+
</dependency>
154160
<dependency>
155161
<groupId>org.springframework</groupId>
156162
<artifactId>spring-aspects</artifactId>

src/main/java/ee/ria/sso/Constants.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ public final class Constants {
1616
public static final String ERROR_MESSAGE = "TARA_ERROR_MESSAGE";
1717
public static final String CREDENTIAL = "credential";
1818

19+
public static final String CAS_SERVICE_ATTRIBUTE_NAME = "service";
20+
1921
public static final String SMART_ID_VERIFICATION_CODE = "smartIdVerificationCode";
2022
public static final String SMART_ID_AUTHENTICATION_SESSION = "smartIdAuthenticationSession";
23+
24+
public static final String MESSAGE_KEY_GENERAL_ERROR = "message.general.error";
25+
26+
public static final String MDC_ATTRIBUTE_REQUEST_ID = "requestId";
27+
public static final String MDC_ATTRIBUTE_SESSION_ID = "sessionId";
2128
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ee.ria.sso.authentication;
2+
3+
public class AuthenticationFailedException extends RuntimeException {
4+
5+
private final String errorMessageKey;
6+
7+
public AuthenticationFailedException(String errorMessageKey, String exceptionMessage) {
8+
super(exceptionMessage);
9+
this.errorMessageKey = errorMessageKey;
10+
}
11+
12+
public AuthenticationFailedException(String errorMessageKey, String exceptionMessage, Throwable cause) {
13+
super(exceptionMessage, cause);
14+
this.errorMessageKey = errorMessageKey;
15+
}
16+
17+
public String getErrorMessageKey() {
18+
return errorMessageKey;
19+
}
20+
21+
public String getErrorMessageKeyOrDefault(String defaultMesageKey) {
22+
return (errorMessageKey != null) ? errorMessageKey : defaultMesageKey;
23+
}
24+
25+
}

src/main/java/ee/ria/sso/authentication/TaraAuthenticationHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public boolean supports(Credential credential) {
3434
* RESTRICTED METHODS
3535
*/
3636

37+
// TODO: this class extracts attributes from TaraCredential and inserts them into a map
38+
3739
@Override
3840
protected HandlerResult doAuthentication(Credential credential) throws GeneralSecurityException, PreventedException {
3941
final Map<String, Object> map = new LinkedHashMap<>();

src/main/java/ee/ria/sso/authentication/credential/TaraCredential.java

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import ee.ria.sso.authentication.AuthenticationType;
44
import ee.ria.sso.authentication.LevelOfAssurance;
5-
import ee.ria.sso.model.AuthenticationResult;
65
import org.apereo.cas.authentication.Credential;
76

87
/**
@@ -24,33 +23,6 @@ public TaraCredential() {
2423
this.type = AuthenticationType.Default;
2524
}
2625

27-
public TaraCredential(String principalCode, String firstName, String lastName) {
28-
this.type = AuthenticationType.IDCard;
29-
this.principalCode = principalCode;
30-
this.firstName = firstName;
31-
this.lastName = lastName;
32-
33-
}
34-
35-
public TaraCredential(String principalCode, String firstName, String lastName, String mobileNumber) {
36-
this.type = AuthenticationType.MobileID;
37-
this.principalCode = principalCode;
38-
this.firstName = firstName;
39-
this.lastName = lastName;
40-
this.mobileNumber = mobileNumber;
41-
}
42-
43-
public TaraCredential(AuthenticationResult authResult) {
44-
this.type = AuthenticationType.eIDAS;
45-
this.principalCode = getFormattedPersonIdentifier(authResult.getAttributes().get("PersonIdentifier"));
46-
this.firstName = authResult.getAttributes().get("FirstName");
47-
this.lastName = authResult.getAttributes().get("FamilyName");
48-
this.dateOfBirth = authResult.getAttributes().get("DateOfBirth");
49-
50-
String loa = authResult.getLevelOfAssurance();
51-
if (loa != null) this.levelOfAssurance = LevelOfAssurance.findByFormalName(loa);
52-
}
53-
5426
// TODO refacto needed: use specific credentials for each auth impl
5527
public TaraCredential(AuthenticationType authenticationType, String principalCode, String firstName, String lastName) {
5628
this.type = authenticationType;
@@ -138,8 +110,17 @@ public void setLevelOfAssurance(LevelOfAssurance levelOfAssurance) {
138110
this.levelOfAssurance = levelOfAssurance;
139111
}
140112

141-
private String getFormattedPersonIdentifier(String personIdentifier) {
142-
String[] parts = personIdentifier.split("/");
143-
return parts[0] + parts[2];
113+
@Override
114+
public String toString() {
115+
return "TaraCredential{" +
116+
"type=" + type +
117+
", principalCode='" + principalCode + '\'' +
118+
", firstName='" + firstName + '\'' +
119+
", lastName='" + lastName + '\'' +
120+
", mobileNumber='" + mobileNumber + '\'' +
121+
", country='" + country + '\'' +
122+
", dateOfBirth='" + dateOfBirth + '\'' +
123+
", levelOfAssurance=" + levelOfAssurance +
124+
'}';
144125
}
145126
}

src/main/java/ee/ria/sso/authentication/principal/TaraPrincipalFactory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import org.apereo.cas.authentication.principal.Principal;
88
import org.apereo.cas.authentication.principal.PrincipalFactory;
99

10-
import ee.ria.sso.authentication.TaraAuthenticationException;
11-
1210
/**
1311
* Created by Janar Rahumeel (CGI Estonia)
1412
*/

src/main/java/ee/ria/sso/common/AbstractService.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/main/java/ee/ria/sso/config/TaraConfiguration.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,17 @@
11
package ee.ria.sso.config;
22

3-
import com.nortal.banklink.authentication.AuthLink;
4-
import com.nortal.banklink.authentication.AuthLinkManager;
5-
import com.nortal.banklink.authentication.link.AuthLinkManagerImpl;
6-
import com.nortal.banklink.authentication.link.standard.IPizzaStandardAuthInfoParser;
7-
import com.nortal.banklink.authentication.link.standard.IPizzaStandardAuthLink;
8-
import com.nortal.banklink.link.BankLinkConfig;
93
import ee.ria.sso.InsecureTrustManager;
10-
import ee.ria.sso.authentication.BankEnum;
11-
import ee.ria.sso.service.banklink.HttpSessionNonceManager;
124
import org.apache.commons.lang.StringUtils;
13-
import org.apache.commons.lang3.text.WordUtils;
145
import org.apereo.cas.util.AsciiArtUtils;
156
import org.slf4j.Logger;
167
import org.slf4j.LoggerFactory;
178
import org.springframework.context.annotation.*;
18-
import org.springframework.core.io.ResourceLoader;
19-
import org.springframework.util.Assert;
209
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
2110

2211
import javax.annotation.PostConstruct;
23-
import javax.annotation.Resource;
2412
import javax.net.ssl.SSLContext;
2513
import javax.net.ssl.TrustManager;
2614
import java.security.*;
27-
import java.security.cert.Certificate;
28-
import java.util.Arrays;
2915

3016
/**
3117
* @author Janar Rahumeel (CGI Estonia)
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package ee.ria.sso.config;
2+
3+
import ee.ria.sso.logging.IncidentLoggingMDCServletFilter;
4+
import ee.ria.sso.logging.RequestContextAsFirstParameterResourceResolver;
5+
import org.apereo.cas.audit.spi.DefaultDelegatingAuditTrailManager;
6+
import org.apereo.cas.audit.spi.DelegatingAuditTrailManager;
7+
import org.apereo.cas.audit.spi.config.CasCoreAuditConfiguration;
8+
import org.apereo.cas.configuration.CasConfigurationProperties;
9+
import org.apereo.inspektr.audit.AuditActionContext;
10+
import org.apereo.inspektr.audit.spi.AuditResourceResolver;
11+
import org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager;
12+
import org.hjson.JsonObject;
13+
import org.hjson.Stringify;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
18+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
19+
import org.springframework.context.annotation.Bean;
20+
import org.springframework.context.annotation.Configuration;
21+
import org.springframework.core.Ordered;
22+
23+
import java.time.ZoneId;
24+
import java.time.format.DateTimeFormatter;
25+
import java.util.Collections;
26+
import java.util.Date;
27+
import java.util.HashMap;
28+
import java.util.Map;
29+
30+
@Configuration
31+
@EnableConfigurationProperties(CasConfigurationProperties.class)
32+
public class TaraLoggingConfiguration {
33+
34+
@Autowired
35+
private CasConfigurationProperties casProperties;
36+
37+
@Bean
38+
public DelegatingAuditTrailManager auditTrailManager() {
39+
final TaraSlf4jLoggingAuditTrailManager mgmr = new TaraSlf4jLoggingAuditTrailManager();
40+
mgmr.setUseSingleLine(casProperties.getAudit().isUseSingleLine());
41+
mgmr.setEntrySeparator(casProperties.getAudit().getSinglelineSeparator());
42+
mgmr.setAuditFormat(casProperties.getAudit().getAuditFormat());
43+
return new DefaultDelegatingAuditTrailManager(mgmr);
44+
}
45+
46+
@Bean
47+
public Map<String, AuditResourceResolver> auditResourceResolverMap() {
48+
final Map<String, AuditResourceResolver> map = new CasCoreAuditConfiguration().auditResourceResolverMap();
49+
map.put("TARA_AUTHENTICATION_RESOURCE_RESOLVER", new RequestContextAsFirstParameterResourceResolver());
50+
return map;
51+
}
52+
53+
@Bean
54+
public FilterRegistrationBean incidentLoggingMDCServletFilter() {
55+
final Map<String, String> initParams = new HashMap<>();
56+
final FilterRegistrationBean bean = new FilterRegistrationBean();
57+
bean.setFilter(new IncidentLoggingMDCServletFilter());
58+
bean.setUrlPatterns(Collections.singleton("/*"));
59+
bean.setInitParameters(initParams);
60+
bean.setName("incidentLoggingMDCServletFilter");
61+
bean.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
62+
return bean;
63+
}
64+
65+
private class TaraSlf4jLoggingAuditTrailManager extends Slf4jLoggingAuditTrailManager {
66+
67+
private final Logger log = LoggerFactory.getLogger("auditLog");
68+
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss,SSSZ");
69+
70+
public void record(final AuditActionContext auditActionContext) {
71+
72+
if (casProperties.getAudit().getAuditFormat() == AuditFormats.JSON)
73+
log.info(getJsonObjectForAudit(auditActionContext).toString(Stringify.PLAIN));
74+
else
75+
log.info(toString(auditActionContext));
76+
}
77+
78+
@Override
79+
protected JsonObject getJsonObjectForAudit(final AuditActionContext auditActionContext) {
80+
final JsonObject jsonObject = new JsonObject()
81+
.add("action", auditActionContext.getActionPerformed())
82+
.add("who", auditActionContext.getPrincipal())
83+
.add("what", auditActionContext.getResourceOperatedUpon())
84+
.add("when", dateTimeFormatter.format(auditActionContext.getWhenActionWasPerformed().toInstant().atZone(ZoneId.systemDefault())))
85+
.add("clientIpAddress", auditActionContext.getClientIpAddress())
86+
.add("serverIpAddress", auditActionContext.getServerIpAddress())
87+
.add("application", auditActionContext.getApplicationCode());
88+
return jsonObject;
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)