View Javadoc

1   package com.atlassian.asap.service.core.impl;
2   
3   import com.atlassian.asap.api.Jwt;
4   import com.atlassian.asap.service.api.ValidationResult;
5   import com.google.common.base.MoreObjects;
6   import org.slf4j.Logger;
7   import org.slf4j.LoggerFactory;
8   
9   import javax.annotation.Nullable;
10  import java.util.Optional;
11  
12  import static java.util.Objects.requireNonNull;
13  
14  final class ValidationResultImpl implements ValidationResult {
15      private static final Logger logger = LoggerFactory.getLogger(ValidationResultImpl.class);
16  
17      private final Decision decision;
18      private final Optional<Jwt> token;
19      private final Optional<String> untrustedIssuer;
20  
21      private ValidationResultImpl(Decision decision, @Nullable Jwt token, @Nullable String untrustedIssuer) {
22          this.decision = requireNonNull(decision, "decision");
23          this.token = Optional.ofNullable(token);
24          this.untrustedIssuer = Optional.ofNullable(untrustedIssuer);
25  
26          logger.debug("ASAP authentication result: decision={}; issuer={}",
27                  decision,
28                  (token != null) ? token.getClaims().getIssuer() : untrustedIssuer);
29  
30      }
31  
32      @Override
33      public Decision decision() {
34          return decision;
35      }
36  
37      @Override
38      public Optional<Jwt> token() {
39          return token;
40      }
41  
42      @Override
43      public Optional<String> untrustedIssuer() {
44          return untrustedIssuer;
45      }
46  
47      static ValidationResult notAuthenticated() {
48          return new ValidationResultImpl(Decision.NOT_AUTHENTICATED, null, null);
49      }
50  
51      static ValidationResult notVerified(String untrustedIssuer) {
52          return new ValidationResultImpl(Decision.NOT_VERIFIED, null, untrustedIssuer);
53      }
54  
55      static ValidationResult notAuthorized(String untrustedIssuer) {
56          return new ValidationResultImpl(Decision.NOT_AUTHORIZED, null, untrustedIssuer);
57      }
58  
59      static ValidationResult authorized(Jwt token) {
60          requireNonNull(token, "token");
61          return new ValidationResultImpl(Decision.AUTHORIZED, token, null);
62      }
63  
64      static ValidationResult rejected(String untrustedIssuer) {
65          return new ValidationResultImpl(Decision.REJECTED, null, untrustedIssuer);
66      }
67  
68      static ValidationResult abstain() {
69          return new ValidationResultImpl(Decision.ABSTAIN, null, null);
70      }
71  
72      @Override
73      public String toString() {
74          return MoreObjects.toStringHelper(this)
75                  .add("decision", decision)
76                  .add("token", token.isPresent() ? "present" : "empty")
77                  .add("untrustedIssuer", untrustedIssuer)
78                  .toString();
79      }
80  }
81