Skip to content

Commit ba63e30

Browse files
committed
feat(profile): sync isolated credential contracts
1 parent f43d706 commit ba63e30

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.github.easy4j.hermes.security;
2+
3+
import java.util.Objects;
4+
5+
/** Immutable binding between a named profile and a non-root credential provider. */
6+
public final class ProfileBinding {
7+
private final String profileId;
8+
private final String credentialIdentity;
9+
private final CredentialProvider credentialProvider;
10+
11+
private ProfileBinding(String profileId, String credentialIdentity,
12+
CredentialProvider credentialProvider) {
13+
this.profileId = requireText(profileId, "profileId");
14+
this.credentialIdentity = requireText(credentialIdentity, "credentialIdentity");
15+
this.credentialProvider = Objects.requireNonNull(credentialProvider, "credentialProvider");
16+
}
17+
18+
public static ProfileBinding of(String profileId, String credentialIdentity,
19+
CredentialProvider credentialProvider) {
20+
return new ProfileBinding(profileId, credentialIdentity, credentialProvider);
21+
}
22+
23+
public String getProfileId() { return profileId; }
24+
public String getCredentialIdentity() { return credentialIdentity; }
25+
public CredentialProvider getCredentialProvider() { return credentialProvider; }
26+
27+
private static String requireText(String value, String name) {
28+
Objects.requireNonNull(value, name);
29+
String normalized = value.trim();
30+
if (normalized.isEmpty()) throw new IllegalArgumentException(name + " must not be blank");
31+
return normalized;
32+
}
33+
34+
@Override
35+
public String toString() {
36+
return "ProfileBinding{profileId='" + profileId + "', credentialIdentity='"
37+
+ credentialIdentity + "'}";
38+
}
39+
}

0 commit comments

Comments
 (0)