Skip to content

Commit 3b8563b

Browse files
authored
v4.0.0
With this version of pricing4java, the management of the pricing evaluation context token has changed. Now, it is isolated from the auth configuration, and is passed through the Pricing-Token header.
2 parents da5effb + 87287ea commit 3b8563b

7 files changed

Lines changed: 27 additions & 44 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>io.github.isa-group</groupId>
99
<artifactId>Pricing4Java</artifactId>
10-
<version>3.2.0</version>
10+
<version>4.0.0</version>
1111

1212
<name>${project.groupId}:${project.artifactId}</name>
1313
<description>A pricing driven feature toggling library for java</description>

src/main/java/io/github/isagroup/PricingContext.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,6 @@ public Boolean userAffectedByPricing(){
7878
*/
7979
public abstract String getUserPlan();
8080

81-
/**
82-
* This method should return the object used inside the application to determine
83-
* the authority of the user inside the JWT.
84-
*
85-
* @return Current user's authorities object
86-
*/
87-
public abstract Object getUserAuthorities();
88-
8981
/**
9082
* This method returns the plan context of the current user, represented by a
9183
* {@link Map}. It's used to evaluate the pricing plan.

src/main/java/io/github/isagroup/PricingEvaluatorUtil.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ public PricingEvaluatorUtil(PricingContext pricingContext) {
5050
public String generateUserToken() {
5151

5252
Map<String, Object> claims = new HashMap<>();
53-
54-
claims.put("authorities", pricingContext.getUserAuthorities());
5553

5654
String subject = "Default";
5755

@@ -176,7 +174,6 @@ private String buildJwtToken(Map<String, Map<String, Object>> features, String s
176174

177175
Map<String, Object> claims = new HashMap<>();
178176

179-
claims.put("authorities", pricingContext.getUserAuthorities());
180177
claims.put("features", features);
181178
claims.put("userContext", pricingContext.getUserContext());
182179
claims.put("planContext", pricingContext.getPlanContext());

src/main/java/io/github/isagroup/filters/RenewTokenFilter.java

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import io.github.isagroup.PricingEvaluatorUtil;
1717
import io.github.isagroup.services.jwt.PricingJwtUtils;
1818

19+
import java.util.Map;
20+
1921
public class RenewTokenFilter extends OncePerRequestFilter {
2022

2123
@Autowired
@@ -34,29 +36,38 @@ public class RenewTokenFilter extends OncePerRequestFilter {
3436
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
3537
throws ServletException, IOException {
3638

37-
try {
38-
String jwt = parseJwt(request);
39-
40-
if (jwt != null && jwtUtils.validateJwtToken(jwt) && pricingContext.userAffectedByPricing()) {
41-
42-
String newToken = pricingEvaluatorUtil.generateUserToken();
39+
String pricingJwt = parsePricingJwt(request);
40+
String authJwt = parseAuthJwt(request);
4341

44-
String newTokenFeatures = jwtUtils.getFeaturesFromJwtToken(newToken).toString();
45-
String jwtFeatures = jwtUtils.getFeaturesFromJwtToken(jwt).toString();
42+
if (authJwt != null && jwtUtils.validateJwtToken(authJwt) && pricingContext.userAffectedByPricing()) {
43+
44+
String newToken = pricingEvaluatorUtil.generateUserToken();
4645

47-
if (!newTokenFeatures.equals(jwtFeatures)) {
48-
response.addHeader("New-Token", newToken);
49-
}
46+
String newTokenFeatures = jwtUtils.getFeaturesFromJwtToken(newToken).toString();
47+
String jwtFeatures = "";
48+
49+
if (pricingJwt != null && !pricingJwt.equals("null")) jwtFeatures = jwtUtils.getFeaturesFromJwtToken(pricingJwt).toString();
50+
51+
if (!newTokenFeatures.equals(jwtFeatures)) {
52+
response.addHeader("Pricing-Token", newToken);
5053
}
51-
} catch (Exception e) {
52-
logger.error("Cannot set user authentication: {}", e);
53-
logger.info("Anonymous user logged");
54+
5455
}
5556

5657
filterChain.doFilter(request, response);
5758
}
5859

59-
private String parseJwt(HttpServletRequest request) {
60+
private String parsePricingJwt(HttpServletRequest request) {
61+
String headerPricing = request.getHeader("Pricing-Token");
62+
63+
if (StringUtils.hasText(headerPricing)) {
64+
return headerPricing;
65+
}
66+
67+
return null;
68+
}
69+
70+
private String parseAuthJwt(HttpServletRequest request) {
6071
String headerAuth = request.getHeader("Authorization");
6172

6273
if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) {

src/main/java/io/github/isagroup/services/jwt/PricingJwtUtils.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public String getSubjectFromJwtToken(String token) {
5252
*/
5353
public String generateTokenFromUsername(String username) {
5454
Map<String, Object> claims = new HashMap<>();
55-
claims.put("authorities", pricingContext.getUserAuthorities());
5655
return Jwts.builder().setClaims(claims).setSubject(username).setIssuedAt(new Date())
5756
.setExpiration(new Date((new Date()).getTime() + pricingContext.getJwtExpiration()))
5857
.signWith(SignatureAlgorithm.HS512, pricingContext.getJwtSecret()).compact();

src/test/java/io/github/isagroup/PricingContextTestImpl.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,6 @@ public void setUserPlan(String userPlan) {
6161
this.userPlan = userPlan;
6262
}
6363

64-
@Override
65-
public Object getUserAuthorities() {
66-
67-
return this.userAuthorities;
68-
}
69-
7064
public void setUserAuthorities(Map<String, Object> userAuthorities) {
7165
this.userAuthorities = userAuthorities;
7266
}

src/test/java/io/github/isagroup/PricingPlanAwareTests.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,6 @@ public String getUserPlan() {
9898
return "BASIC";
9999
}
100100

101-
@Override
102-
public Object getUserAuthorities() {
103-
Map<String, String> userAuthorities = new HashMap<>();
104-
userAuthorities.put("role", "admin");
105-
userAuthorities.put("username", "admin1");
106-
userAuthorities.put("password", "4dm1n");
107-
108-
return userAuthorities;
109-
}
110-
111101
}
112102

113103
}

0 commit comments

Comments
 (0)