summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ide/passwordSafe/impl')
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java72
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java21
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java37
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/EnterPasswordComponent.java6
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java67
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/ResetPasswordComponent.java2
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java27
-rw-r--r--platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java32
8 files changed, 95 insertions, 169 deletions
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java
index 11dc4d7d018b..34aee7aaad38 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java
@@ -22,42 +22,19 @@ import com.intellij.ide.passwordSafe.impl.providers.masterKey.MasterKeyPasswordS
import com.intellij.ide.passwordSafe.impl.providers.masterKey.PasswordDatabase;
import com.intellij.ide.passwordSafe.impl.providers.memory.MemoryPasswordSafe;
import com.intellij.ide.passwordSafe.impl.providers.nil.NilProvider;
+import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-/**
- * The implementation of password safe service
- */
public class PasswordSafeImpl extends PasswordSafe {
- /**
- * The logger instance
- */
private static final Logger LOG = Logger.getInstance(PasswordSafeImpl.class.getName());
- /**
- * The current settings
- */
private final PasswordSafeSettings mySettings;
- /**
- * The master key provider
- */
private final MasterKeyPasswordSafe myMasterKeyProvider;
- /**
- * The nil provider
- */
private final NilProvider myNilProvider;
- /**
- * The memory provider
- */
private final MemoryPasswordSafe myMemoryProvider;
- /**
- * The constructor
- *
- * @param settings the settings for the password safe
- * @param database the password database
- */
public PasswordSafeImpl(PasswordSafeSettings settings, PasswordDatabase database) {
mySettings = settings;
myMasterKeyProvider = new MasterKeyPasswordSafe(database);
@@ -89,21 +66,24 @@ public class PasswordSafeImpl extends PasswordSafe {
return p;
}
-
- /**
- * @return settings for the passwords safe
- */
public PasswordSafeSettings getSettings() {
return mySettings;
}
-
@Nullable
+ @Override
public String getPassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
+ return getPassword(project, requester, key, null);
+ }
+
+ @Nullable
+ @Override
+ public String getPassword(@Nullable Project project, @NotNull Class requester, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
if (mySettings.getProviderType().equals(PasswordSafeSettings.ProviderType.MASTER_PASSWORD)) {
- String password = getMemoryProvider().getPassword(project, requester, key);
+ String password = getMemoryProvider().getPassword(project, requester, key, modalityState);
if (password == null) {
- password = provider().getPassword(project, requester, key);
+ password = provider().getPassword(project, requester, key, modalityState);
if (password != null) {
// cache the password in memory as well for easier access during the session
getMemoryProvider().storePassword(project, requester, key, password);
@@ -111,27 +91,35 @@ public class PasswordSafeImpl extends PasswordSafe {
}
return password;
}
- return provider().getPassword(project, requester, key);
+ return provider().getPassword(project, requester, key, modalityState);
}
- /**
- * {@inheritDoc}
- */
- public void removePassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
+ @Override
+ public void removePassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
+ removePassword(project, requestor, key, null);
+ }
+
+ @Override
+ public void removePassword(@Nullable Project project, @NotNull Class requester, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
if (mySettings.getProviderType().equals(PasswordSafeSettings.ProviderType.MASTER_PASSWORD)) {
getMemoryProvider().removePassword(project, requester, key);
}
- provider().removePassword(project, requester, key);
+ provider().removePassword(project, requester, key, modalityState);
}
- /**
- * {@inheritDoc}
- */
- public void storePassword(@Nullable Project project, @NotNull Class requester, String key, String value) throws PasswordSafeException {
+ @Override
+ public void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value) throws PasswordSafeException {
+ storePassword(project, requestor, key, value, null);
+ }
+
+ @Override
+ public void storePassword(@Nullable Project project, @NotNull Class requester, String key, String value,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
if (mySettings.getProviderType().equals(PasswordSafeSettings.ProviderType.MASTER_PASSWORD)) {
getMemoryProvider().storePassword(project, requester, key, value);
}
- provider().storePassword(project, requester, key, value);
+ provider().storePassword(project, requester, key, value, modalityState);
}
/**
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java
index 18dee7c755f5..3a40d617e99b 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java
@@ -15,7 +15,11 @@
*/
package com.intellij.ide.passwordSafe.impl;
+import com.intellij.ide.passwordSafe.PasswordSafeException;
import com.intellij.ide.passwordSafe.PasswordStorage;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
/**
* The provider for password safe component
@@ -34,4 +38,21 @@ public abstract class PasswordSafeProvider implements PasswordStorage {
* @return the name of provider
*/
public abstract String getName();
+
+ @Nullable
+ @Override
+ public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
+ return getPassword(project, requestor, key, null);
+ }
+
+ @Override
+ public void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value) throws PasswordSafeException {
+ storePassword(project, requestor, key, value, null);
+ }
+
+ @Override
+ public void removePassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
+ removePassword(project, requestor, key, null);
+ }
+
}
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java
index c72c65d0d528..8c8f921f18b8 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java
@@ -43,16 +43,15 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
* @throws PasswordSafeException in case of problems with access to the password database.
* @throws IllegalStateException if the method is called from the read action.
*/
- protected abstract byte[] key(@Nullable Project project, @NotNull Class requestor) throws PasswordSafeException;
+ protected abstract byte[] key(@Nullable Project project, @NotNull Class requestor,
+ @Nullable ModalityState modalityState) throws PasswordSafeException;
- /**
- * {@inheritDoc}
- */
@Nullable
- public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
- byte[] k = dbKey(project, requestor, key);
+ public String getPassword(@Nullable Project project, @NotNull Class requestor, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
+ byte[] k = dbKey(project, requestor, key, modalityState);
byte[] ct = getEncryptedPassword(k);
- return ct == null ? null : EncryptionUtil.decryptText(key(project, requestor), ct);
+ return ct == null ? null : EncryptionUtil.decryptText(key(project, requestor, modalityState), ct);
}
/**
@@ -69,17 +68,17 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
* @param project
* @param requestor the requestor class
* @param key the key to use
+ * @param modalityState
* @return the key to use for map
*/
- private byte[] dbKey(@Nullable Project project, Class requestor, String key) throws PasswordSafeException {
- return EncryptionUtil.dbKey(key(project, requestor), requestor, key);
+ private byte[] dbKey(@Nullable Project project, @NotNull Class requestor, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
+ return EncryptionUtil.dbKey(key(project, requestor, modalityState), requestor, key);
}
- /**
- * {@inheritDoc}
- */
- public void removePassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
- byte[] k = dbKey(project, requester, key);
+ public void removePassword(@Nullable Project project, @NotNull Class requester, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
+ byte[] k = dbKey(project, requester, key, modalityState);
removeEncryptedPassword(k);
}
@@ -90,12 +89,10 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
*/
protected abstract void removeEncryptedPassword(byte[] key);
- /**
- * {@inheritDoc}
- */
- public void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value) throws PasswordSafeException {
- byte[] k = dbKey(project, requestor, key);
- byte[] ct = EncryptionUtil.encryptText(key(project, requestor), value);
+ public void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
+ byte[] k = dbKey(project, requestor, key, modalityState);
+ byte[] ct = EncryptionUtil.encryptText(key(project, requestor, modalityState), value);
storeEncryptedPassword(k, ct);
}
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/EnterPasswordComponent.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/EnterPasswordComponent.java
index 638e2e23c1f9..304b31e3bee1 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/EnterPasswordComponent.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/EnterPasswordComponent.java
@@ -16,6 +16,7 @@
package com.intellij.ide.passwordSafe.impl.providers.masterKey;
import com.intellij.ide.TypePresentationService;
+import com.intellij.ide.passwordSafe.HelpID;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -46,4 +47,9 @@ public class EnterPasswordComponent extends PasswordComponentBase {
String password = new String(myPasswordField.getPassword());
return mySafe.changeMasterPassword(password, password, myEncryptCheckBox.isSelected());
}
+
+ @Override
+ public String getHelpId() {
+ return HelpID.ENTER_PASSWORD;
+ }
}
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java
index 95fba48afabe..b74e51315cd5 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java
@@ -42,17 +42,8 @@ import java.util.concurrent.atomic.AtomicReference;
* The password safe that stores information in configuration file encrypted by master password
*/
public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
- /**
- * The test password key
- */
private static final String TEST_PASSWORD_KEY = "TEST_PASSWORD:";
- /**
- * The test password value
- */
private static final String TEST_PASSWORD_VALUE = "test password";
- /**
- * The password database instance
- */
final PasswordDatabase database;
/**
* The key to use to encrypt data
@@ -68,18 +59,10 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
}
};
- /**
- * The constructor
- *
- * @param database the password database
- */
public MasterKeyPasswordSafe(PasswordDatabase database) {
this.database = database;
}
- /**
- * @return true if the component is running in the test mode
- */
protected boolean isTestMode() {
return false;
}
@@ -130,7 +113,6 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
else {
return true;
}
-
}
/**
@@ -167,18 +149,13 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
}
- /**
- * The test key
- *
- * @param password the password for the test key
- * @return the test key
- */
private static String testKey(String password) {
return TEST_PASSWORD_KEY + password;
}
@Override
- protected byte[] key(@Nullable final Project project, @NotNull final Class requestor) throws PasswordSafeException {
+ protected byte[] key(@Nullable final Project project, @NotNull final Class requestor,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
Application application = ApplicationManager.getApplication();
if (!isTestMode() && application.isHeadlessEnvironment()) {
throw new MasterPasswordUnavailableException("The provider is not available in headless environment");
@@ -223,7 +200,7 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
}
}
}
- }, ModalityState.defaultModalityState());
+ }, modalityState == null ? ModalityState.defaultModalityState() : modalityState);
//noinspection ThrowableResultOfMethodCallIgnored
if (ex.get() != null) {
throw ex.get();
@@ -233,20 +210,15 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
return result.get();
}
- /**
- * {@inheritDoc}
- */
@Override
- public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
+ public String getPassword(@Nullable Project project, @NotNull Class requestor, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
if (database.isEmpty()) {
return null;
}
- return super.getPassword(project, requestor, key);
+ return super.getPassword(project, requestor, key, modalityState);
}
- /**
- * {@inheritDoc}
- */
@Override
public void removePassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
if (database.isEmpty()) {
@@ -255,50 +227,32 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
super.removePassword(project, requester, key);
}
- /**
- * {@inheritDoc}
- */
@Override
protected byte[] getEncryptedPassword(byte[] key) {
return database.get(key);
}
- /**
- * {@inheritDoc}
- */
@Override
protected void removeEncryptedPassword(byte[] key) {
database.remove(key);
}
- /**
- * {@inheritDoc}
- */
@Override
protected void storeEncryptedPassword(byte[] key, byte[] encryptedPassword) {
database.put(key, encryptedPassword);
}
- /**
- * {@inheritDoc}
- */
@Override
public boolean isSupported() {
return !ApplicationManager.getApplication().isHeadlessEnvironment();
}
- /**
- * {@inheritDoc}
- */
@Override
public String getDescription() {
return "This provider stores passwords in IDEA config and uses master password to encrypt other passwords. " +
"The passwords for the same resources are shared between different projects.";
}
- /**
- * {@inheritDoc}
- */
@Override
public String getName() {
return "Master Key PasswordSafe";
@@ -309,9 +263,6 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
return setMasterPassword("");
}
- /**
- * @return true, if OS protected passwords are supported for the current platform
- */
@SuppressWarnings({"MethodMayBeStatic"})
public boolean isOsProtectedPasswordSupported() {
// TODO extension point needed?
@@ -351,9 +302,6 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
}
}
- /**
- * @return true, if the password is currently encrypted in the database
- */
public boolean isPasswordEncrypted() {
if (!isOsProtectedPasswordSupported()) return false;
@@ -361,9 +309,6 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
return i != null && i.length > 0;
}
- /**
- * @return check if provider database is empty
- */
public boolean isEmpty() {
return database.isEmpty();
}
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/ResetPasswordComponent.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/ResetPasswordComponent.java
index ce75bdb2165a..faa36c121ec9 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/ResetPasswordComponent.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/ResetPasswordComponent.java
@@ -49,7 +49,7 @@ public class ResetPasswordComponent extends PasswordComponentBase {
@Override
public String getHelpId() {
- return HelpID.RESET_PASSWORD;
+ return myFirstTime ? HelpID.INIT_PASSWORD : HelpID.RESET_PASSWORD;
}
@Override
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java
index 5be4a25df859..da82bb986fdb 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java
@@ -19,10 +19,12 @@ import com.intellij.ide.passwordSafe.impl.PasswordSafeTimed;
import com.intellij.ide.passwordSafe.impl.providers.BasePasswordSafeProvider;
import com.intellij.ide.passwordSafe.impl.providers.ByteArrayWrapper;
import com.intellij.ide.passwordSafe.impl.providers.EncryptionUtil;
+import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.security.SecureRandom;
import java.util.Collections;
@@ -57,13 +59,8 @@ public class MemoryPasswordSafe extends BasePasswordSafeProvider {
return Registry.intValue("passwordSafe.memorySafe.ttl");
}
- /**
- * @param project the project to use
- * @param requestor
- * @return the secret key used by provider
- */
@Override
- protected byte[] key(Project project, @NotNull Class requestor) {
+ protected byte[] key(Project project, @NotNull Class requestor, @Nullable ModalityState modalityState) {
if (key.get() == null) {
byte[] rnd = new byte[EncryptionUtil.SECRET_KEY_SIZE_BYTES * 16];
new SecureRandom().nextBytes(rnd);
@@ -72,49 +69,31 @@ public class MemoryPasswordSafe extends BasePasswordSafeProvider {
return key.get();
}
- /**
- * {@inheritDoc}
- */
@Override
protected byte[] getEncryptedPassword(byte[] key) {
return database.get().get(new ByteArrayWrapper(key));
}
- /**
- * {@inheritDoc}
- */
@Override
protected void removeEncryptedPassword(byte[] key) {
database.get().remove(new ByteArrayWrapper(key));
}
- /**
- * {@inheritDoc}
- */
@Override
protected void storeEncryptedPassword(byte[] key, byte[] encryptedPassword) {
database.get().put(new ByteArrayWrapper(key), encryptedPassword);
}
- /**
- * {@inheritDoc}
- */
@Override
public boolean isSupported() {
return true;
}
- /**
- * {@inheritDoc}
- */
@Override
public String getDescription() {
return "Memory-based password safe provider. The passwords are stored only for the duration of IDEA process.";
}
- /**
- * {@inheritDoc}
- */
@Override
public String getName() {
return "Memory PasswordSafe";
diff --git a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java
index 581df18ea317..e3a77325b06e 100644
--- a/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java
+++ b/platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java
@@ -17,6 +17,7 @@ package com.intellij.ide.passwordSafe.impl.providers.nil;
import com.intellij.ide.passwordSafe.PasswordSafeException;
import com.intellij.ide.passwordSafe.impl.PasswordSafeProvider;
+import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -25,49 +26,38 @@ import org.jetbrains.annotations.Nullable;
* The most secure provider that does not store anything, so it cannot be cracked
*/
public final class NilProvider extends PasswordSafeProvider {
- /**
- * {@inheritDoc}
- */
+
@Override
public boolean isSupported() {
return true;
}
- /**
- * {@inheritDoc}
- */
@Override
public String getDescription() {
return "The provider that does not remembers password.";
}
- /**
- * {@inheritDoc}
- */
@Override
public String getName() {
return "Do not Store";
}
- /**
- * {@inheritDoc}
- */
- public String getPassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
+ @Nullable
+ public String getPassword(@Nullable Project project, @NotNull Class requester, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
// nothing is stored
return null;
}
- /**
- * {@inheritDoc}
- */
- public void removePassword(@Nullable Project project, @NotNull Class requester, String key) throws PasswordSafeException {
+ @Override
+ public void removePassword(@Nullable Project project, @NotNull Class requester, String key,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
// do nothing
}
- /**
- * {@inheritDoc}
- */
- public void storePassword(@Nullable Project project, @NotNull Class requester, String key, String value) throws PasswordSafeException {
+ @Override
+ public void storePassword(@Nullable Project project, @NotNull Class requester, String key, String value,
+ @Nullable ModalityState modalityState) throws PasswordSafeException {
// just forget about password
}
}