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