diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStore.java index 7ae87e54d..c040af7ba 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityStore.java @@ -33,4 +33,6 @@ public abstract class IdentityStore implements SelfReferentialStore, DataStore { getSshIdentity().checkComplete(); } } + + public abstract String getName(); } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java index e97936971..928623298 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/IdentityValue.java @@ -99,16 +99,22 @@ public interface IdentityValue { List> getDependencies(); default void checkCompleteUser() throws ValidationException { - Validators.nonNull(unwrap().getUsername().hasUser() ? new Object() : null, "Identity username"); + var n = unwrap().getName(); + var msg = n != null ? "Username of identity " + n : "Identity username"; + Validators.nonNull(unwrap().getUsername().hasUser() ? new Object() : null, msg); } default void checkCompletePassword() throws ValidationException { - Validators.nonNull(unwrap().getPassword(), "Identity password"); + var n = unwrap().getName(); + var msg = n != null ? "Password of identity " + n : "Identity password"; + Validators.nonNull(unwrap().getPassword(), msg); unwrap().getPassword().checkComplete(); } default void checkCompleteSshIdentity() throws ValidationException { - Validators.nonNull(unwrap().getSshIdentity(), "Identity ssh key"); + var n = unwrap().getName(); + var msg = n != null ? "SSH key of identity " + n : "Identity SSH key"; + Validators.nonNull(unwrap().getSshIdentity(), msg); unwrap().getSshIdentity().checkComplete(); } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStore.java index 4d43e1fee..f314505c3 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/LocalIdentityStore.java @@ -4,6 +4,7 @@ import io.xpipe.app.cred.SshIdentityStrategy; import io.xpipe.app.cred.UsernameStrategy; import io.xpipe.app.secret.EncryptedValue; import io.xpipe.app.secret.SecretRetrievalStrategy; +import io.xpipe.app.storage.DataStoreEntry; import io.xpipe.app.storage.DataStoreEntryRef; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -41,6 +42,12 @@ public class LocalIdentityStore extends IdentityStore { return sshIdentity != null ? sshIdentity.getValue() : null; } + @Override + public String getName() { + var inStorage = hasSelfEntry(); + return inStorage ? getSelfEntry().getName() : null; + } + EncryptedValue getEncryptedPassword() { return password; } diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/MultiIdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/MultiIdentityStore.java index 5f8290c37..acc3d3188 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/MultiIdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/MultiIdentityStore.java @@ -32,6 +32,11 @@ public class MultiIdentityStore extends IdentityStore List identities; boolean perUser; + @Override + public String getName() { + return getSelected().map(ref -> ref.getStore().getName()).orElse(null); + } + public List> getAvailableIdentities() { return identities.stream() .map(uuid -> DataStorage.get().getStoreEntryIfPresent(uuid)) diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java index 779982b01..2f620bc46 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/PasswordManagerIdentityStore.java @@ -41,6 +41,11 @@ public class PasswordManagerIdentityStore extends IdentityStore PasswordManagerAgentStrategy sshKey; boolean perUser; + @Override + public String getName() { + return getSelfEntry().getName(); + } + private boolean checkOutdatedOrRefresh() { var instant = getCache("lastQueried", Instant.class, null); if (instant != null) { diff --git a/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStore.java b/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStore.java index fbed273bf..f896ad2f1 100644 --- a/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStore.java +++ b/ext/base/src/main/java/io/xpipe/ext/base/identity/SyncedIdentityStore.java @@ -33,6 +33,11 @@ public class SyncedIdentityStore extends IdentityStore implements UserScopeStore EncryptedValue.VaultKey sshIdentity; boolean perUser; + @Override + public String getName() { + return getSelfEntry().getName(); + } + public UsernameStrategy.Fixed getUsername() { return new UsernameStrategy.Fixed(username); }