1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.metadata.user;
19
20 import com.google.common.base.Objects;
21 import com.google.common.base.Strings;
22 import lombok.Getter;
23 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
24
25
26
27
28 public final class Grantee {
29
30 private static final String DELIMITER = "@";
31
32 private static final String HOST_WILDCARD = "%";
33
34 @Getter
35 private final String username;
36
37 @Getter
38 private final String hostname;
39
40 private final boolean isUnlimitedHost;
41
42 private final int hashCode;
43
44 private final String toString;
45
46 public Grantee(final String username, final String hostname) {
47 this.username = username;
48 this.hostname = Strings.isNullOrEmpty(hostname) ? HOST_WILDCARD : hostname;
49 isUnlimitedHost = HOST_WILDCARD.equals(this.hostname);
50 hashCode = Objects.hashCode(username.toUpperCase(), this.hostname.toUpperCase());
51 toString = username + DELIMITER + this.hostname;
52 }
53
54
55
56
57
58
59
60 @HighFrequencyInvocation
61 public boolean accept(final Grantee grantee) {
62 return grantee.username.equalsIgnoreCase(username) && isPermittedHost(grantee);
63 }
64
65 private boolean isPermittedHost(final Grantee grantee) {
66 return isUnlimitedHost || grantee.hostname.equalsIgnoreCase(hostname);
67 }
68
69 @Override
70 public boolean equals(final Object obj) {
71 if (obj instanceof Grantee) {
72 Grantee grantee = (Grantee) obj;
73 return grantee.username.equalsIgnoreCase(username) && grantee.hostname.equalsIgnoreCase(hostname);
74 }
75 return false;
76 }
77
78 @Override
79 public int hashCode() {
80 return hashCode;
81 }
82
83 @Override
84 public String toString() {
85 return toString;
86 }
87 }