svn commit: r1224876 - in /ofbiz/trunk/specialpurpose/ecommerce: ./ config/ src/org/ofbiz/ecommerce/janrain/ webapp/ecommerce/ webapp/ecommerce/WEB-INF/ webapp/ecommerce/WEB-INF/actions/customer/ webapp/ecommerce/customer/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1224876 - in /ofbiz/trunk/specialpurpose/ecommerce: ./ config/ src/org/ofbiz/ecommerce/janrain/ webapp/ecommerce/ webapp/ecommerce/WEB-INF/ webapp/ecommerce/WEB-INF/actions/customer/ webapp/ecommerce/customer/

hansbak-2
Author: hansbak
Date: Tue Dec 27 07:39:43 2011
New Revision: 1224876

URL: http://svn.apache.org/viewvc?rev=1224876&view=rev
Log:
implement the basic janrain package, which enables the login via most social sites, but can not recognize if the same user if logged in from 2 different sites. By default this function is disabled and will not change the functionality of the OFBiz login procedure in any way

Added:
    ofbiz/trunk/specialpurpose/ecommerce/README   (with props)
    ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/
    ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java   (with props)
Modified:
    ofbiz/trunk/specialpurpose/ecommerce/build.xml
    ofbiz/trunk/specialpurpose/ecommerce/config/ecommerce.properties
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/customer/NewCustomer.groovy
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/newcustomer.ftl
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/login.ftl

Added: ofbiz/trunk/specialpurpose/ecommerce/README
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/README?rev=1224876&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/README (added)
+++ ofbiz/trunk/specialpurpose/ecommerce/README Tue Dec 27 07:39:43 2011
@@ -0,0 +1,31 @@
+How to use Janrain Engage Social Login.
+======================================
+
+1.Get API Key from http://www.janrain.com/products/engage/social-login.
+2.Configure file setting : ecommerce.properties you can put it
+          Example:
+          --------------------------------------------------------------------------------
+            # -- Enable janrain engage (Y/ N) default N
+            janrain.enabled=N
+            
+            # -- Janrain api key (secret)
+            janrain.apiKey=exampleKey
+            
+            # -- Janrain application domain
+            janrain.baseUrl=https://example.rpxnow.com
+            
+            # -- Janrain application name
+            janrain.appName=exampleAppName
+          --------------------------------------------------------------------------------
+3.Restart the server.
+
+
+How to test Janrain Engage Social Login.
+=======================================
+
+1. Go to Login screen.
+2. Look the Social Login Widget and you can use these existing accounts to sign-in to your website.
+3. First time if account does not exists then system will create new account.
+4. After account existing in the system you can use "Social Login Widget" to login account.
+
+===================================================================================================

Propchange: ofbiz/trunk/specialpurpose/ecommerce/README
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/ecommerce/README
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/specialpurpose/ecommerce/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/build.xml?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/build.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/build.xml Tue Dec 27 07:39:43 2011
@@ -41,10 +41,12 @@ under the License.
         <fileset dir="../../framework/service/build/lib" includes="*.jar"/>
         <fileset dir="../../framework/minilang/build/lib" includes="*.jar"/>
         <fileset dir="../../framework/common/build/lib" includes="*.jar"/>
+        <fileset dir="../../framework/webapp/build/lib" includes="*.jar"/>
         <fileset dir="../../applications/party/build/lib" includes="*.jar"/>
         <fileset dir="../../applications/product/build/lib" includes="*.jar"/>
         <fileset dir="../../applications/marketing/build/lib" includes="*.jar"/>
         <fileset dir="../../applications/order/build/lib" includes="*.jar"/>
         <fileset dir="../../applications/accounting/build/lib" includes="*.jar"/>
+        <fileset dir="../../applications/securityext/build/lib" includes="*.jar"/>
     </path>
 </project>

Modified: ofbiz/trunk/specialpurpose/ecommerce/config/ecommerce.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/config/ecommerce.properties?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/config/ecommerce.properties (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/config/ecommerce.properties Tue Dec 27 07:39:43 2011
@@ -17,3 +17,24 @@
 # under the License.
 ###############################################################################
 convertProductPriceCurrency=true
+
+############################################
+# Janrain Engage
+############################################
+#example config
+#janrain.apiKey=9640f5bddc863ec419067d4bd07f9d15e45c177f
+#janrain.baseUrl=https://ofbizdemo.rpxnow.com
+#janrain.appName=ofbizdemo
+############################################
+
+# -- Enabled janrain engage (Y/ N) default N
+janrain.enabled=N
+
+# -- Janrain api key (secret)
+janrain.apiKey=
+
+# -- Janrain application domain
+janrain.baseUrl=
+
+# -- Janrain application name
+janrain.appName=

Added: ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java?rev=1224876&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java (added)
+++ ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java Tue Dec 27 07:39:43 2011
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.ecommerce.janrain;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import javolution.util.FastMap;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilHttp;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.webapp.control.LoginWorker;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * Java Helper Class for Janrain Engage
+ */
+public class JanrainHelper {
+
+    public static final String module = JanrainHelper.class.getName();
+    private static String apiKey = UtilProperties.getPropertyValue("ecommerce.properties", "janrain.apiKey");
+    private static String baseUrl = UtilProperties.getPropertyValue("ecommerce.properties", "janrain.baseUrl");
+    public JanrainHelper(String apiKey, String baseUrl) {
+        while (baseUrl.endsWith("/"))
+            baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
+        this.apiKey = apiKey;
+        this.baseUrl = baseUrl;
+    }
+    public String getApiKey() { return apiKey; }
+    public String getBaseUrl() { return baseUrl; }
+    public static Element authInfo(String token) {
+        Map<String, Object> query = new HashMap<String, Object>();
+        query.put("token", token);
+        return apiCall("auth_info", query);
+    }
+    public HashMap<String, List<String>> allMappings() {
+        Element rsp = apiCall("all_mappings", null);
+        Element mappings_node = (Element)rsp.getFirstChild();
+        HashMap<String, List<String>> result = new HashMap<String, List<String>>();
+        NodeList mappings = getNodeList("/rsp/mappings/mapping", rsp);
+        for (int i = 0; i < mappings.getLength(); i++) {
+            Element mapping = (Element)mappings.item(i);
+            List<String> identifiers = new ArrayList<String>();
+            NodeList rk_list = getNodeList("primaryKey", mapping);
+            NodeList id_list = getNodeList("identifiers/identifier", mapping);
+            String remote_key = ((Element)rk_list.item(0)).getTextContent();
+            for (int j = 0; j < id_list.getLength(); j++) {
+                Element ident = (Element) id_list.item(j);
+                identifiers.add(ident.getTextContent());
+            }
+            result.put(remote_key, identifiers);
+        }
+        return result;
+    }
+    private NodeList getNodeList(String xpath_expr, Element root) {
+        XPathFactory factory = XPathFactory.newInstance();
+        XPath xpath = factory.newXPath();
+        try {
+            return (NodeList) xpath.evaluate(xpath_expr, root, XPathConstants.NODESET);
+        } catch (XPathExpressionException e) {
+            return null;
+        }
+    }
+    public List<String> mappings(Object primaryKey) {
+        Map<String, Object> query = new HashMap<String, Object>();
+        query.put("primaryKey", primaryKey);
+        Element rsp = apiCall("mappings", query);
+        Element oids = (Element)rsp.getFirstChild();
+        List<String> result = new ArrayList<String>();
+        NodeList nl = oids.getChildNodes();
+        for (int i = 0; i < nl.getLength(); i++) {
+            Element e = (Element)nl.item(i);
+            result.add(e.getTextContent());
+        }
+        return result;
+    }
+    public void map(String identifier, Object primaryKey) {
+        Map<String, Object> query = new HashMap<String, Object>();
+        query.put("identifier", identifier);
+        query.put("primaryKey", primaryKey);
+        apiCall("map", query);
+    }
+    public void unmap(String identifier, Object primaryKey) {
+        Map<String, Object> query = new HashMap<String, Object>();
+        query.put("identifier", identifier);
+        query.put("primaryKey", primaryKey);
+        apiCall("unmap", query);
+    }
+    private static Element apiCall(String methodName, Map<String, Object> partialQuery) {
+        Map<String, Object> query = null;
+        if (partialQuery == null) {
+            query = new HashMap<String, Object>();
+        } else {
+            query = new HashMap<String, Object>(partialQuery);
+        }
+        query.put("format", "xml");
+        query.put("apiKey", apiKey);
+        StringBuffer sb = new StringBuffer();
+        for (Iterator it = query.entrySet().iterator(); it.hasNext();) {
+            if (sb.length() > 0) sb.append('&');
+            try {
+                Map.Entry e = (Map.Entry)it.next();
+                sb.append(URLEncoder.encode(e.getKey().toString(), "UTF-8"));
+                sb.append('=');
+                sb.append(URLEncoder.encode(e.getValue().toString(), "UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException("Unexpected encoding error", e);
+            }
+        }
+        String data = sb.toString();
+        try {
+            URL url = new URL(baseUrl + "/api/v2/" + methodName);
+            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+            conn.setRequestMethod("POST");
+            conn.setDoOutput(true);
+            conn.connect();
+            OutputStreamWriter osw = new OutputStreamWriter(
+                conn.getOutputStream(), "UTF-8");
+            osw.write(data);
+            osw.close();
+            
+            BufferedReader post = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+            String line = "";
+            StringBuilder buf = new StringBuilder();
+            while ((line = post.readLine()) != null) {
+                 buf.append(line);
+            }
+            post.close();
+            Document tagXml = UtilXml.readXmlDocument(buf.toString());
+            Element response = (Element) tagXml.getDocumentElement();
+            if (!response.getAttribute("stat").equals("ok")) {
+                throw new RuntimeException("Unexpected API error");
+            }
+            return response;
+        } catch (MalformedURLException e) {
+            throw new RuntimeException("Unexpected URL error", e);
+        } catch (IOException e) {
+            throw new RuntimeException("Unexpected IO error", e);
+        } catch (ParserConfigurationException e) {
+            throw new RuntimeException("Unexpected XML error", e);
+        } catch (SAXException e) {
+            throw new RuntimeException("Unexpected XML error", e);
+        }
+    }
+
+    public static String janrainCheckLogin(HttpServletRequest request, HttpServletResponse response){
+        Delegator delegator = (Delegator) request.getAttribute("delegator");
+        String token =  request.getParameter("token");
+        String errMsg = "";
+        if (UtilValidate.isNotEmpty(token)) {
+            JanrainHelper janrainHelper = new JanrainHelper(apiKey, baseUrl);
+            Element authInfo = janrainHelper.authInfo(token);
+            Element profileElement = UtilXml.firstChildElement(authInfo, "profile");
+            Element nameElement = UtilXml.firstChildElement(profileElement, "name");
+            
+            // profile element
+            String displayName = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "displayName"));
+            String email = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "email"));
+            String identifier = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "identifier"));
+            String preferredUsername = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "preferredUsername"));
+            String providerName = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "providerName"));
+            String url = UtilXml.elementValue(UtilXml.firstChildElement(profileElement, "url"));
+            
+            // name element
+            String givenName = UtilXml.elementValue(UtilXml.firstChildElement(nameElement, "givenName"));
+            String familyName = UtilXml.elementValue(UtilXml.firstChildElement(nameElement, "familyName"));
+            String formatted = UtilXml.elementValue(UtilXml.firstChildElement(nameElement, "formatted"));
+            
+            if (UtilValidate.isEmpty("preferredUsername")) {
+                errMsg = UtilProperties.getMessage("SecurityextUiLabels", "loginevents.username_not_found_reenter", UtilHttp.getLocale(request));
+                request.setAttribute("_ERROR_MESSAGE_", errMsg);
+                return "error";
+            }
+            
+            Map<String, String> result = FastMap.newInstance();
+            result.put("displayName", displayName);
+            result.put("email", email);
+            result.put("identifier", identifier);
+            result.put("preferredUsername", preferredUsername);
+            result.put("providerName", providerName);
+            result.put("url", url);
+            result.put("givenName", givenName);
+            result.put("familyName", familyName);
+            result.put("formatted", formatted);
+            request.setAttribute("userInfoMap", result);
+            
+            try {
+                GenericValue userLogin = delegator.findByPrimaryKeyCache("UserLogin", UtilMisc.toMap("userLoginId", preferredUsername));
+                if (UtilValidate.isNotEmpty(userLogin)) {
+                    LoginWorker.doBasicLogin(userLogin, request);
+                    LoginWorker.autoLoginSet(request, response);
+                    return "success";
+                } else {
+                    return "userLoginMissing";
+                }
+            } catch (GenericEntityException e) {
+                Debug.logError(e, "Error finding the userLogin for distributed cache clear", module);
+            }
+        }
+        return "success";
+    }
+}

Propchange: ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/trunk/specialpurpose/ecommerce/src/org/ofbiz/ecommerce/janrain/JanrainHelper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/customer/NewCustomer.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/customer/NewCustomer.groovy?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/customer/NewCustomer.groovy (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/actions/customer/NewCustomer.groovy Tue Dec 27 07:39:43 2011
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.product.store.ProductStoreWorker;
@@ -49,3 +50,21 @@ if (previousParams) {
     previousParams = "";
 }
 context.previousParams = previousParams;
+
+//the parameters from janrain
+userInfoMap = request.getAttribute("userInfoMap");
+if (!userInfoMap) {
+    userInfoMap = request.getSession().getAttribute("userInfoMap");
+}
+if (userInfoMap) {
+    if (userInfoMap.givenName && userInfoMap.familyName) {
+        requestParameters.USER_FIRST_NAME = userInfoMap.givenName;
+        requestParameters.USER_LAST_NAME = userInfoMap.familyName;
+    } else if (userInfoMap.formatted) {
+        requestParameters.USER_FIRST_NAME = userInfoMap.formatted;
+    }
+    requestParameters.CUSTOMER_EMAIL = userInfoMap.email;
+    requestParameters.preferredUsername = userInfoMap.preferredUsername;
+    requestParameters.USERNAME = userInfoMap.preferredUsername;
+    request.getSession().setAttribute("userInfoMap", userInfoMap);
+}

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml Tue Dec 27 07:39:43 2011
@@ -2012,7 +2012,7 @@ under the License.
         <security https="true" auth="false"/>
         <response name="success" type="view" value="showShoppingList" save-current-view="true"/>
     </request-map>
-    
+
     <!-- Product Tags -->
     <request-map uri="addProductTags">
         <security https="false" auth="false"/>
@@ -2020,7 +2020,16 @@ under the License.
         <response name="success" type="view-last" save-current-view="true"/>
         <response name="error" type="view-last" save-current-view="true"/>
     </request-map>
-    
+
+    <!-- ============== Janrain Engage ============== -->
+    <request-map uri="janrainCheckLogin">
+        <security https="true" auth="false"/>
+        <event type="java" path="org.ofbiz.ecommerce.janrain.JanrainHelper" invoke="janrainCheckLogin"/>
+        <response name="success" type="view" value="main"/>
+        <response name="error" type="view" value="login"/>
+        <response name="userLoginMissing" type="request" value="newcustomer"/>
+    </request-map>
+
     <!-- End of Request Mappings -->
 
     <!-- View Mappings -->

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/newcustomer.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/newcustomer.ftl?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/newcustomer.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/customer/newcustomer.ftl Tue Dec 27 07:39:43 2011
@@ -342,15 +342,22 @@ will generally always be reserved for th
     <legend><#if getUsername>${uiLabelMap.CommonUsername}</#if></legend>
     <#if getUsername>
       <@fieldErrors fieldName="USERNAME"/>
-      <div class="form-row inline">
-        <label for="UNUSEEMAIL">
-          <input type="checkbox" class="checkbox" name="UNUSEEMAIL" id="UNUSEEMAIL" value="on" onclick="setEmailUsername();" onfocus="setLastFocused(this);"/> ${uiLabelMap.EcommerceUseEmailAddress}
-        </label>
-      </div>
+      <#if !requestParameters.preferredUsername?has_content>
+        <div class="form-row inline">
+          <label for="UNUSEEMAIL">
+            <input type="checkbox" class="checkbox" name="UNUSEEMAIL" id="UNUSEEMAIL" value="on" onclick="setEmailUsername();" onfocus="setLastFocused(this);"/> ${uiLabelMap.EcommerceUseEmailAddress}
+          </label>
+        </div>
+      </#if>
 
       <div>
         <label for="USERNAME">${uiLabelMap.CommonUsername}*</label>
-        <input type="text" name="USERNAME" id="USERNAME" value="${requestParameters.USERNAME?if_exists}" onfocus="clickUsername();" onchange="changeEmail();"/>
+        <#if requestParameters.preferredUsername?has_content>
+            <input type="text" name="showUserName" id="showUserName" value="${requestParameters.USERNAME?if_exists}" disabled="disabled"/>
+            <input type="hidden" name="USERNAME" id="USERNAME" value="${requestParameters.USERNAME?if_exists}"/>
+        <#else>
+            <input type="text" name="USERNAME" id="USERNAME" value="${requestParameters.USERNAME?if_exists}" onfocus="clickUsername();" onchange="changeEmail();"/>
+        </#if>
       </div>
     </#if>
   </fieldset>

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/login.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/login.ftl?rev=1224876&r1=1224875&r2=1224876&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/login.ftl (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/login.ftl Tue Dec 27 07:39:43 2011
@@ -16,35 +16,102 @@ KIND, either express or implied.  See th
 specific language governing permissions and limitations
 under the License.
 -->
+<#assign janrainEnabled = Static["org.ofbiz.base.util.UtilProperties"].getPropertyValue("ecommerce.properties", "janrain.enabled")>
+<#assign appName = Static["org.ofbiz.base.util.UtilProperties"].getPropertyValue("ecommerce.properties", "janrain.appName")>
+<#if janrainEnabled == "Y">
+<script type="text/javascript">
+(function() {
+    if (typeof window.janrain !== 'object') window.janrain = {};
+    window.janrain.settings = {};
+    
+    janrain.settings.tokenUrl = '<@ofbizUrl fullPath="true" secure="true">janrainCheckLogin</@ofbizUrl>';
 
+    function isReady() { janrain.ready = true; };
+    if (document.addEventListener) {
+      document.addEventListener("DOMContentLoaded", isReady, false);
+    } else {
+      window.attachEvent('onload', isReady);
+    }
+
+    var e = document.createElement('script');
+    e.type = 'text/javascript';
+    e.id = 'janrainAuthWidget';
+
+    if (document.location.protocol === 'https:') {
+      e.src = 'https://rpxnow.com/js/lib/${appName}/engage.js';
+    } else {
+      e.src = 'http://widget-cdn.rpxnow.com/js/lib/${appName}/engage.js';
+    }
+
+    var s = document.getElementsByTagName('script')[0];
+    s.parentNode.insertBefore(e, s);
+})();
+</script>
 <h1>${uiLabelMap.CommonLogin}</h1>
 <div class="screenlet">
   <div class="screenlet-title-bar"><h3>${uiLabelMap.CommonRegistered}</h3></div>
   <div class="screenlet-body">
-  <form method="post" action="<@ofbizUrl>login</@ofbizUrl>" name="loginform" class="horizontal">
-    <fieldset>
-      <div>
-        <label for="userName">${uiLabelMap.CommonUsername}</label>
-        <input type="text" id="userName" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>"/>
-      </div>
-<#if autoUserLogin?has_content>
-      <p>(${uiLabelMap.CommonNot} ${autoUserLogin.userLoginId}? <a href="<@ofbizUrl>${autoLogoutUrl}</@ofbizUrl>">${uiLabelMap.CommonClickHere}</a>)</p>
-</#if>
-      <div>
-        <label for="password">${uiLabelMap.CommonPassword}:</label>
-        <input type="password" id="password" name="PASSWORD" value=""/>
-      </div>
-      <div>
-        <input type="submit" class="button" value="${uiLabelMap.CommonLogin}"/>
-      </div>
-      <div>
-        <label for="newcustomer_submit">${uiLabelMap.CommonMayCreateNewAccountHere}:</label>
-        <a href="<@ofbizUrl>newcustomer</@ofbizUrl>">${uiLabelMap.CommonMayCreate}</a>
-      </div>
-    </fieldset>
-  </form>
+  <table width="100%" class="Signlogin">
+      <tr>
+          <td>
+          <form method="post" action="<@ofbizUrl>login</@ofbizUrl>" name="loginform" class="horizontal">
+            <fieldset>
+              <div>
+                <label for="userName">${uiLabelMap.CommonUsername}</label>
+                <input type="text" id="userName" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>"/>
+              </div>
+              <#if autoUserLogin?has_content>
+                <p>(${uiLabelMap.CommonNot} ${autoUserLogin.userLoginId}? <a href="<@ofbizUrl>${autoLogoutUrl}</@ofbizUrl>">${uiLabelMap.CommonClickHere}</a>)</p>
+              </#if>
+              <div>
+                <label for="password">${uiLabelMap.CommonPassword}:</label>
+                <input type="password" id="password" name="PASSWORD" value=""/>
+              </div>
+              <div>
+                <input type="submit" class="button" value="${uiLabelMap.CommonLogin}"/>
+              </div>
+              <div>
+                <label for="newcustomer_submit">${uiLabelMap.CommonMayCreateNewAccountHere}:</label>
+                <a href="<@ofbizUrl>newcustomer</@ofbizUrl>">${uiLabelMap.CommonMayCreate}</a>
+              </div>
+            </fieldset>
+          </form>
+          </td>
+          <td><div id="janrainEngageEmbed"></div></td>
+      </tr>
+  </table>
   </div>
 </div>
+<#else>
+<h1>${uiLabelMap.CommonLogin}</h1>
+<div class="screenlet">
+  <div class="screenlet-title-bar"><h3>${uiLabelMap.CommonRegistered}</h3></div>
+  <div class="screenlet-body">
+    <form method="post" action="<@ofbizUrl>login</@ofbizUrl>" name="loginform" class="horizontal">
+      <fieldset>
+        <div>
+          <label for="userName">${uiLabelMap.CommonUsername}</label>
+          <input type="text" id="userName" name="USERNAME" value="<#if requestParameters.USERNAME?has_content>${requestParameters.USERNAME}<#elseif autoUserLogin?has_content>${autoUserLogin.userLoginId}</#if>"/>
+        </div>
+        <#if autoUserLogin?has_content>
+          <p>(${uiLabelMap.CommonNot} ${autoUserLogin.userLoginId}? <a href="<@ofbizUrl>${autoLogoutUrl}</@ofbizUrl>">${uiLabelMap.CommonClickHere}</a>)</p>
+        </#if>
+        <div>
+          <label for="password">${uiLabelMap.CommonPassword}:</label>
+          <input type="password" id="password" name="PASSWORD" value=""/>
+        </div>
+        <div>
+          <input type="submit" class="button" value="${uiLabelMap.CommonLogin}"/>
+        </div>
+        <div>
+          <label for="newcustomer_submit">${uiLabelMap.CommonMayCreateNewAccountHere}:</label>
+          <a href="<@ofbizUrl>newcustomer</@ofbizUrl>">${uiLabelMap.CommonMayCreate}</a>
+        </div>
+      </fieldset>
+    </form>
+  </div>
+</div>
+</#if>
 
 <div class="screenlet">
   <div class="screenlet-title-bar"><h3>${uiLabelMap.CommonForgotYourPassword}</h3></div>