details:   /erp/devel/pi/rev/5f83390cc5aa
changeset: 10210:5f83390cc5aa
user:      Stefan Hühner <stefan.huehner <at> openbravo.com>
date:      Fri Jan 28 17:40:28 2011 +0100
summary:   Add write/update support to new references for password fields
encrypt/hash password type fields when updating them.
Writes aredirected to a new virtual property <fieldName>.cleartext in the
json update used for the updated. Value of that property is used in the
JsonToDataConverter instead of the original one and its processed before
being saved.

diffstat:

 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
 |   6 +-
 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/PasswordUIDefinition.java
 |   2 +-
 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
              |   6 +
 
modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
              |  39 +++++++++-
 4 files changed, 50 insertions(+), 3 deletions(-)

diffs (134 lines):

diff -r 5b8be92551f9 -r 5f83390cc5aa 
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
--- 
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
   Fri Jan 28 16:41:41 2011 +0100
+++ 
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-formitem-widgets.js
   Fri Jan 28 17:40:28 2011 +0100
@@ -280,7 +280,11 @@
 isc.ClassFactory.defineClass('OBEncryptedItem', isc.PasswordItem);
 
 // add specific properties here
-isc.OBEncryptedItem.addProperties({});
+isc.OBEncryptedItem.addProperties({
+  changed : function(form,item,value) {
+       this.form.setValue(item.name + '.cleartext', value);
+  }
+});
 
 // == OBFormButton ==
 // The default form button.
diff -r 5b8be92551f9 -r 5f83390cc5aa 
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/PasswordUIDefinition.java
--- 
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/PasswordUIDefinition.java
   Fri Jan 28 16:41:41 2011 +0100
+++ 
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/PasswordUIDefinition.java
   Fri Jan 28 17:40:28 2011 +0100
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2010 Openbravo SLU 
+ * All portions are Copyright (C) 2011 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
diff -r 5b8be92551f9 -r 5f83390cc5aa 
modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
        Fri Jan 28 16:41:41 2011 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
        Fri Jan 28 17:40:28 2011 +0100
@@ -30,6 +30,8 @@
 import org.codehaus.jettison.json.JSONObject;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.Property;
+import org.openbravo.base.model.domaintype.EncryptedStringDomainType;
+import org.openbravo.base.model.domaintype.HashedStringDomainType;
 import org.openbravo.base.structure.ActiveEnabled;
 import org.openbravo.base.structure.BaseOBObject;
 import org.openbravo.dal.core.DalUtil;
@@ -225,6 +227,10 @@
       } else {
         return xmlDateFormat.format(value);
       }
+      // for the properties of type password -> do not return raw-value at all
+    } else if (property.getDomainType() instanceof HashedStringDomainType
+        || property.getDomainType() instanceof EncryptedStringDomainType) {
+      return "***";
     }
     return value;
   }
diff -r 5b8be92551f9 -r 5f83390cc5aa 
modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
--- 
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
        Fri Jan 28 16:41:41 2011 +0100
+++ 
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonToDataConverter.java
        Fri Jan 28 17:40:28 2011 +0100
@@ -31,6 +31,8 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.ServletException;
+
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
@@ -38,6 +40,8 @@
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.Property;
+import org.openbravo.base.model.domaintype.EncryptedStringDomainType;
+import org.openbravo.base.model.domaintype.HashedStringDomainType;
 import org.openbravo.base.provider.OBProvider;
 import org.openbravo.base.structure.BaseOBObject;
 import org.openbravo.base.structure.Traceable;
@@ -45,6 +49,8 @@
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
 import org.openbravo.model.common.enterprise.Organization;
+import org.openbravo.utils.CryptoUtility;
+import org.openbravo.utils.FormatUtilities;
 
 /**
  * Converts json data to Openbravo business object(s).
@@ -159,6 +165,26 @@
         return new BigDecimal(((Number) value).doubleValue());
       } else if (value instanceof String && ((String) value).trim().length() 
== 0) {
         return null;
+      } else if (value instanceof String
+          && property.getDomainType() instanceof HashedStringDomainType) {
+        String str = (String) value;
+        try {
+          return FormatUtilities.sha1Base64(str);
+        } catch (ServletException e) {
+          log.error("Error hashing password", e);
+          // TODO: translate error message
+          throw new Error("Could not encrypt password", e);
+        }
+      } else if (value instanceof String
+          && property.getDomainType() instanceof EncryptedStringDomainType) {
+        String str = (String) value;
+        try {
+          return CryptoUtility.encrypt(str);
+        } catch (ServletException e) {
+          log.error("Error encrypting password", e);
+          // TODO: translate error message
+          throw new Error("Could not encrypt password", e);
+        }
       }
       return value;
     } catch (Exception e) {
@@ -305,13 +331,24 @@
       // a foreign key
       final boolean multiPathProperty = keyName.contains(DOT);
       if (multiPathProperty) {
+        // TODO: handle passwords here also
         handleMultiPathProperty("", keyName, obObject, jsonObject, 
jsonObject.get(keyName));
       } else {
         if (!entity.hasProperty(keyName)) {
           continue;
         }
         final Property property = entity.getProperty(keyName);
-        setValue(obObject, property, jsonObject.get(keyName));
+        if (property.getDomainType() instanceof EncryptedStringDomainType
+            || property.getDomainType() instanceof HashedStringDomainType) {
+          if (jsonObject.has(keyName + ".cleartext")) {
+            Object valCleartext = jsonObject.get(keyName + ".cleartext");
+            setValue(obObject, property, valCleartext);
+          } else {
+            // no .cleartext value found -> skipping field
+          }
+        } else {
+          setValue(obObject, property, jsonObject.get(keyName));
+        }
       }
     }
   }

------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to