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>