1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.internal.mirror.credential;
18
19 import static com.linecorp.centraldogma.internal.Util.requireNonNullElements;
20 import static java.util.Objects.requireNonNull;
21
22 import java.net.URI;
23 import java.util.Optional;
24 import java.util.Set;
25 import java.util.regex.Pattern;
26 import java.util.stream.Collectors;
27
28 import javax.annotation.Nullable;
29
30 import com.google.common.base.MoreObjects;
31 import com.google.common.base.MoreObjects.ToStringHelper;
32 import com.google.common.collect.ImmutableSet;
33
34 import com.linecorp.centraldogma.server.mirror.MirrorCredential;
35
36 abstract class AbstractMirrorCredential implements MirrorCredential {
37
38 @Nullable
39 private final String id;
40 private final Set<Pattern> hostnamePatterns;
41 private final Set<String> hostnamePatternStrings;
42
43 AbstractMirrorCredential(@Nullable String id, @Nullable Iterable<Pattern> hostnamePatterns) {
44 this.id = id;
45 this.hostnamePatterns = validateHostnamePatterns(hostnamePatterns);
46 hostnamePatternStrings = this.hostnamePatterns.stream().map(Pattern::pattern)
47 .collect(Collectors.toSet());
48 }
49
50 private static Set<Pattern> validateHostnamePatterns(@Nullable Iterable<Pattern> hostnamePatterns) {
51 if (hostnamePatterns == null) {
52 return ImmutableSet.of();
53 }
54
55 return ImmutableSet.copyOf(
56 requireNonNullElements(hostnamePatterns, "hostnamePatterns"));
57 }
58
59 @Override
60 public final Optional<String> id() {
61 return Optional.ofNullable(id);
62 }
63
64 @Override
65 public final Set<Pattern> hostnamePatterns() {
66 return hostnamePatterns;
67 }
68
69 @Override
70 public final boolean matches(URI uri) {
71 requireNonNull(uri, "uri");
72
73 final String host = uri.getHost();
74 return host != null && hostnamePatterns.stream().anyMatch(p -> p.matcher(host).matches());
75 }
76
77 @Override
78 public boolean equals(Object o) {
79 if (this == o) {
80 return true;
81 }
82
83 if (o == null || getClass() != o.getClass()) {
84 return false;
85 }
86
87 final AbstractMirrorCredential that = (AbstractMirrorCredential) o;
88 return hostnamePatternStrings.equals(that.hostnamePatternStrings);
89 }
90
91 @Override
92 public int hashCode() {
93 return hostnamePatternStrings.hashCode();
94 }
95
96 @Override
97 public final String toString() {
98 final ToStringHelper helper = MoreObjects.toStringHelper(this);
99 if (id != null) {
100 helper.add("id", id);
101 }
102 if (!hostnamePatterns.isEmpty()) {
103 helper.add("hostnamePatterns", hostnamePatterns);
104 }
105
106 addProperties(helper);
107 return helper.toString();
108 }
109
110 abstract void addProperties(ToStringHelper helper);
111 }