cleanup
authorVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Tue, 12 Jul 2016 14:43:09 +0000 (16:43 +0200)
committerVladimir Krivosheev <vladimir.krivosheev@jetbrains.com>
Wed, 13 Jul 2016 05:36:41 +0000 (07:36 +0200)
platform/platform-api/src/com/intellij/ide/passwordSafe/MasterPasswordUnavailableException.java
platform/platform-api/src/com/intellij/ide/passwordSafe/PasswordSafeException.java
platform/platform-api/src/com/intellij/ide/passwordSafe/PasswordStorage.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeImpl.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/PasswordSafeProvider.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/BasePasswordSafeProvider.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/EncryptionUtil.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/masterKey/MasterKeyPasswordSafe.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/memory/MemoryPasswordSafe.java
platform/platform-impl/src/com/intellij/ide/passwordSafe/impl/providers/nil/NilProvider.java

index 2c2d22b287216ed7d7fa4ba4048ec878f05c2a01..2757e23040776b4b07151910d1839923834e97e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,11 +19,6 @@ package com.intellij.ide.passwordSafe;
  * This exception is thrown when master password is not available (process of entering password is cancelled, or IDEA is running headless mode)
  */
 public class MasterPasswordUnavailableException extends PasswordSafeException {
-  
-  public MasterPasswordUnavailableException(String message, Throwable cause) {
-    super(message, cause);
-  }
-
   public MasterPasswordUnavailableException(String message) {
     super(message);
   }
index 64b0ff9b61c3afb54e411c9560def9a3cc5b426d..74bdd1902c569e09160e5aa3a094a0b6f0db75d8 100644 (file)
@@ -18,8 +18,7 @@ package com.intellij.ide.passwordSafe;
 /**
  * The exception that is thrown when password safe is not available (unable to ask for master password)
  */
-public class PasswordSafeException extends Exception {
-
+public class PasswordSafeException extends RuntimeException {
   private static final long MIN_INTERVAL = 1000L;
 
   private long myTimeMillis = System.currentTimeMillis();
@@ -32,10 +31,6 @@ public class PasswordSafeException extends Exception {
     super(message);
   }
 
-  public long getTimeMillis() {
-    return myTimeMillis;
-  }
-
   public boolean justHappened() {
     long timeMillis = System.currentTimeMillis();
     if (timeMillis - myTimeMillis < MIN_INTERVAL) {
index 677e5234f99f0ddc56f6d1e72ed04a62cc7a7829..7ee62a58cb7f43a4effea7dfb3680eaf25a47ffd 100644 (file)
@@ -43,17 +43,18 @@ public interface PasswordStorage {
    * @throws IllegalStateException if the method is called from the read action.
    */
   @Nullable
-  String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException;
+  String getPassword(@Nullable Project project, @NotNull Class requestor, String key);
+
   /**
    * Remove password stored in a password safe
    *
    * @param project   the project, that is used to ask for the master password if this is the first access to password safe
    * @param requestor the requestor class
    * @param key       the key for the password
-   * @return the plugin key
    * @throws PasswordSafeException if password safe cannot be accessed
    */
-  void removePassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException;
+  void removePassword(@Nullable Project project, @NotNull Class requestor, String key);
+
   /**
    * Store password in password safe
    *
@@ -63,5 +64,5 @@ public interface PasswordStorage {
    * @param value     the value to store
    * @throws PasswordSafeException if password safe cannot be accessed
    */
-  void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value) throws PasswordSafeException;
+  void storePassword(@Nullable Project project, @NotNull Class requestor, String key, String value);
 }
index 6d5127b376adab5a5aaa3477dc81553fac692d7d..39efd68b011322f25ce671796667afded4215e0d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,8 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 public class PasswordSafeImpl extends PasswordSafe {
-  private static final Logger LOG = Logger.getInstance(PasswordSafeImpl.class.getName());
+  private static final Logger LOG = Logger.getInstance(PasswordSafeImpl.class);
+
   private final PasswordSafeSettings mySettings;
   private final MasterKeyPasswordSafe myMasterKeyProvider;
   private final NilProvider myNilProvider;
@@ -59,7 +60,7 @@ public class PasswordSafeImpl extends PasswordSafe {
       default:
         LOG.error("Unknown provider type: " + mySettings.getProviderType());
     }
-    if (p == null || !p.isSupported()) {
+    if (!p.isSupported()) {
       p = myMemoryProvider;
     }
     return p;
index 18dee7c755f5cfaac68d5564cc3fc099a4c30a7e..26ef98ec1ed3f3ebe76187a987d6391d1bb9ecfe 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,7 +24,9 @@ public abstract class PasswordSafeProvider implements PasswordStorage {
   /**
    * @return true, the implementation is supported in the current environment
    */
-  public abstract boolean isSupported();
+  public boolean isSupported() {
+    return true;
+  }
   /**
    * @return the description of the provider
    */
index 8bfa859d5ceb4340e5890ccf0db59c7f72efb72e..cde1dd1288d87046f28a7c4b0f858778f861da8f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,12 +44,11 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
    * @throws IllegalStateException if the method is called from the read action.
    */
   @NotNull
-  protected abstract byte[] key(@Nullable Project project, @NotNull Class requestor) throws PasswordSafeException;
+  protected abstract byte[] key(@Nullable Project project, @NotNull Class requestor);
 
   @Nullable
-  public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
-    byte[] k = dbKey(project, requestor, key);
-    byte[] ct = getEncryptedPassword(k);
+  public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) {
+    byte[] ct = getEncryptedPassword(dbKey(project, requestor, key));
     return ct == null ? null : EncryptionUtil.decryptText(key(project, requestor), ct);
   }
 
@@ -59,7 +58,7 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
    * @param key the key to get
    * @return the encrypted password
    */
-  protected abstract byte[] getEncryptedPassword(byte[] key);
+  protected abstract byte[] getEncryptedPassword(@NotNull byte[] key);
 
   /**
    * Get database key
@@ -69,7 +68,8 @@ public abstract class BasePasswordSafeProvider extends PasswordSafeProvider {
    * @param key       the key to use
    * @return the key to use for map
    */
-  private byte[] dbKey(@Nullable Project project, Class requestor, String key) throws PasswordSafeException {
+  @NotNull
+  private byte[] dbKey(@Nullable Project project, Class requestor, String key) {
     return EncryptionUtil.dbKey(key(project, requestor), requestor, key);
   }
 
index 37b049c48eb0f9e3d534488817e4da07f8c37ce0..35c1ee376eea1b0c43c7b46fe3b83b2b0bb88d46 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -117,6 +117,7 @@ public class EncryptionUtil {
    * @param rawKey   the raw key to encrypt
    * @return the encrypted key
    */
+  @NotNull
   public static byte[] encryptKey(@NotNull byte[] password, byte[] rawKey) {
     try {
       Cipher c = Cipher.getInstance(ENCRYPT_KEY_ALGORITHM);
@@ -124,7 +125,7 @@ public class EncryptionUtil {
       return c.doFinal(rawKey);
     }
     catch (GeneralSecurityException e) {
-      throw new IllegalStateException(e.getMessage(), e);
+      throw new IllegalStateException(e);
     }
   }
 
@@ -136,11 +137,11 @@ public class EncryptionUtil {
    * @param key       the key within requestor
    * @return the key to use in the database
    */
+  @NotNull
   public static byte[] dbKey(@NotNull byte[] password, Class requestor, String key) {
     return encryptKey(password, rawKey(requestor, key));
   }
 
-
   /**
    * Decrypt key (does not use salting, so the encryption result is the same for the same input)
    *
@@ -218,6 +219,7 @@ public class EncryptionUtil {
    * @param data     the bytes to decrypt
    * @return encrypted text
    */
+  @NotNull
   public static String decryptText(byte[] password, byte[] data) {
     byte[] plain = decryptData(password, data);
     int len = ((plain[0] & 0xff) << 24) + ((plain[1] & 0xff) << 16) + ((plain[2] & 0xff) << 8) + (plain[3] & 0xff);
index 852b57204ee13cd05c1a155070f87d0c03fe12bc..d72e1b21605f6f6f858128aee36af6ae5485abb4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -155,8 +155,12 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
   @Override
   protected byte[] key(@Nullable final Project project, @NotNull final Class requestor) throws PasswordSafeException {
     Object key = myKey.get().get();
-    if (key instanceof byte[]) return (byte[])key;
-    if (key instanceof PasswordSafeException && ((PasswordSafeException)key).justHappened()) throw (PasswordSafeException)key;
+    if (key instanceof byte[]) {
+      return (byte[])key;
+    }
+    if (key instanceof PasswordSafeException && ((PasswordSafeException)key).justHappened()) {
+      throw (PasswordSafeException)key;
+    }
 
     if (isPasswordEncrypted()) {
       try {
@@ -180,12 +184,12 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
       }
       try {
         if (myDatabase.isEmpty()) {
-          if (!MasterPasswordDialog.resetMasterPasswordDialog(project, MasterKeyPasswordSafe.this, requestor).showAndGet()) {
+          if (!MasterPasswordDialog.resetMasterPasswordDialog(project, this, requestor).showAndGet()) {
             throw new MasterPasswordUnavailableException("Master password is required to store passwords in the database.");
           }
         }
         else {
-          MasterPasswordDialog.askPassword(project, MasterKeyPasswordSafe.this, requestor);
+          MasterPasswordDialog.askPassword(project, this, requestor);
         }
       }
       catch (PasswordSafeException e) {
@@ -251,10 +255,7 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
 
   @Override
   public String getPassword(@Nullable Project project, @NotNull Class requestor, String key) throws PasswordSafeException {
-    if (myDatabase.isEmpty()) {
-      return null;
-    }
-    return super.getPassword(project, requestor, key);
+    return myDatabase.isEmpty() ? null : super.getPassword(project, requestor, key);
   }
 
   @Override
@@ -266,7 +267,7 @@ public class MasterKeyPasswordSafe extends BasePasswordSafeProvider {
   }
 
   @Override
-  protected byte[] getEncryptedPassword(byte[] key) {
+  protected byte[] getEncryptedPassword(@NotNull byte[] key) {
     return myDatabase.get(key);
   }
 
index a3a0432bbf7006f5411e8ab8b81694adf605f809..fc0a57441688f7dc780701fe1cc5877e84314bc9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2015 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -70,7 +70,7 @@ public class MemoryPasswordSafe extends BasePasswordSafeProvider {
   }
 
   @Override
-  protected byte[] getEncryptedPassword(byte[] key) {
+  protected byte[] getEncryptedPassword(@NotNull byte[] key) {
     return database.get().get(new ByteArrayWrapper(key));
   }
 
@@ -84,11 +84,6 @@ public class MemoryPasswordSafe extends BasePasswordSafeProvider {
     database.get().put(new ByteArrayWrapper(key), encryptedPassword);
   }
 
-  @Override
-  public boolean isSupported() {
-    return true;
-  }
-
   @Override
   public String getDescription() {
     return "Memory-based password safe provider. The passwords are stored only for the duration of IDEA process.";
index 4bf024d697c2680d909fcdf49aa968dba5702275..ed63e3691cbbfa915cdeed343059454b74bb64a5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,12 +25,6 @@ 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 {
-
-  @Override
-  public boolean isSupported() {
-    return true;
-  }
-
   @Override
   public String getDescription() {
     return "The provider that does not remembers password.";