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> |
Free forum by Nabble | Edit this page |