Added: ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SOAPRole.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SOAPRole.java?rev=767305&view=auto ============================================================================== --- ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SOAPRole.java (added) +++ ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SOAPRole.java Tue Apr 21 21:32:49 2009 @@ -0,0 +1,452 @@ +/******************************************************************************* + * 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. + *******************************************************************************/ +/** + * SOAPRole.java + * + * This file was auto-generated from WSDL + * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. + */ + +package com.atlassian.crowd.integration.soap; + +public class SOAPRole implements java.io.Serializable { + private java.lang.Long ID; + + private java.lang.Boolean active; + + private com.atlassian.crowd.integration.soap.SOAPAttribute[] attributes; + + private java.util.Calendar conception; + + private java.lang.String description; + + private java.lang.Long directoryID; + + private java.util.Calendar lastModified; + + private java.lang.String[] members; + + private java.lang.String name; + + public SOAPRole() { + } + + public SOAPRole( + java.lang.Long ID, + java.lang.Boolean active, + com.atlassian.crowd.integration.soap.SOAPAttribute[] attributes, + java.util.Calendar conception, + java.lang.String description, + java.lang.Long directoryID, + java.util.Calendar lastModified, + java.lang.String[] members, + java.lang.String name) { + this.ID = ID; + this.active = active; + this.attributes = attributes; + this.conception = conception; + this.description = description; + this.directoryID = directoryID; + this.lastModified = lastModified; + this.members = members; + this.name = name; + } + + + /** + * Gets the ID value for this SOAPRole. + * + * @return ID + */ + public java.lang.Long getID() { + return ID; + } + + + /** + * Sets the ID value for this SOAPRole. + * + * @param ID + */ + public void setID(java.lang.Long ID) { + this.ID = ID; + } + + + /** + * Gets the active value for this SOAPRole. + * + * @return active + */ + public java.lang.Boolean getActive() { + return active; + } + + + /** + * Sets the active value for this SOAPRole. + * + * @param active + */ + public void setActive(java.lang.Boolean active) { + this.active = active; + } + + + /** + * Gets the attributes value for this SOAPRole. + * + * @return attributes + */ + public com.atlassian.crowd.integration.soap.SOAPAttribute[] getAttributes() { + return attributes; + } + + + /** + * Sets the attributes value for this SOAPRole. + * + * @param attributes + */ + public void setAttributes(com.atlassian.crowd.integration.soap.SOAPAttribute[] attributes) { + this.attributes = attributes; + } + + + /** + * Gets the conception value for this SOAPRole. + * + * @return conception + */ + public java.util.Calendar getConception() { + return conception; + } + + + /** + * Sets the conception value for this SOAPRole. + * + * @param conception + */ + public void setConception(java.util.Calendar conception) { + this.conception = conception; + } + + + /** + * Gets the description value for this SOAPRole. + * + * @return description + */ + public java.lang.String getDescription() { + return description; + } + + + /** + * Sets the description value for this SOAPRole. + * + * @param description + */ + public void setDescription(java.lang.String description) { + this.description = description; + } + + + /** + * Gets the directoryID value for this SOAPRole. + * + * @return directoryID + */ + public java.lang.Long getDirectoryID() { + return directoryID; + } + + + /** + * Sets the directoryID value for this SOAPRole. + * + * @param directoryID + */ + public void setDirectoryID(java.lang.Long directoryID) { + this.directoryID = directoryID; + } + + + /** + * Gets the lastModified value for this SOAPRole. + * + * @return lastModified + */ + public java.util.Calendar getLastModified() { + return lastModified; + } + + + /** + * Sets the lastModified value for this SOAPRole. + * + * @param lastModified + */ + public void setLastModified(java.util.Calendar lastModified) { + this.lastModified = lastModified; + } + + + /** + * Gets the members value for this SOAPRole. + * + * @return members + */ + public java.lang.String[] getMembers() { + return members; + } + + + /** + * Sets the members value for this SOAPRole. + * + * @param members + */ + public void setMembers(java.lang.String[] members) { + this.members = members; + } + + + /** + * Gets the name value for this SOAPRole. + * + * @return name + */ + public java.lang.String getName() { + return name; + } + + + /** + * Sets the name value for this SOAPRole. + * + * @param name + */ + public void setName(java.lang.String name) { + this.name = name; + } + + private java.lang.Object __equalsCalc = null; + public synchronized boolean equals(java.lang.Object obj) { + if (!(obj instanceof SOAPRole)) return false; + SOAPRole other = (SOAPRole) obj; + if (obj == null) return false; + if (this == obj) return true; + if (__equalsCalc != null) { + return (__equalsCalc == obj); + } + __equalsCalc = obj; + boolean _equals; + _equals = true && + ((this.ID==null && other.getID()==null) || + (this.ID!=null && + this.ID.equals(other.getID()))) && + ((this.active==null && other.getActive()==null) || + (this.active!=null && + this.active.equals(other.getActive()))) && + ((this.attributes==null && other.getAttributes()==null) || + (this.attributes!=null && + java.util.Arrays.equals(this.attributes, other.getAttributes()))) && + ((this.conception==null && other.getConception()==null) || + (this.conception!=null && + this.conception.equals(other.getConception()))) && + ((this.description==null && other.getDescription()==null) || + (this.description!=null && + this.description.equals(other.getDescription()))) && + ((this.directoryID==null && other.getDirectoryID()==null) || + (this.directoryID!=null && + this.directoryID.equals(other.getDirectoryID()))) && + ((this.lastModified==null && other.getLastModified()==null) || + (this.lastModified!=null && + this.lastModified.equals(other.getLastModified()))) && + ((this.members==null && other.getMembers()==null) || + (this.members!=null && + java.util.Arrays.equals(this.members, other.getMembers()))) && + ((this.name==null && other.getName()==null) || + (this.name!=null && + this.name.equals(other.getName()))); + __equalsCalc = null; + return _equals; + } + + private boolean __hashCodeCalc = false; + public synchronized int hashCode() { + if (__hashCodeCalc) { + return 0; + } + __hashCodeCalc = true; + int _hashCode = 1; + if (getID() != null) { + _hashCode += getID().hashCode(); + } + if (getActive() != null) { + _hashCode += getActive().hashCode(); + } + if (getAttributes() != null) { + for (int i=0; + i<java.lang.reflect.Array.getLength(getAttributes()); + i++) { + java.lang.Object obj = java.lang.reflect.Array.get(getAttributes(), i); + if (obj != null && + !obj.getClass().isArray()) { + _hashCode += obj.hashCode(); + } + } + } + if (getConception() != null) { + _hashCode += getConception().hashCode(); + } + if (getDescription() != null) { + _hashCode += getDescription().hashCode(); + } + if (getDirectoryID() != null) { + _hashCode += getDirectoryID().hashCode(); + } + if (getLastModified() != null) { + _hashCode += getLastModified().hashCode(); + } + if (getMembers() != null) { + for (int i=0; + i<java.lang.reflect.Array.getLength(getMembers()); + i++) { + java.lang.Object obj = java.lang.reflect.Array.get(getMembers(), i); + if (obj != null && + !obj.getClass().isArray()) { + _hashCode += obj.hashCode(); + } + } + } + if (getName() != null) { + _hashCode += getName().hashCode(); + } + __hashCodeCalc = false; + return _hashCode; + } + + // Type metadata + private static org.apache.axis.description.TypeDesc typeDesc = + new org.apache.axis.description.TypeDesc(SOAPRole.class, true); + + static { + typeDesc.setXmlType(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "SOAPRole")); + org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("ID"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "ID")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "long")); + elemField.setMinOccurs(0); + elemField.setNillable(false); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("active"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "active")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "boolean")); + elemField.setMinOccurs(0); + elemField.setNillable(false); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("attributes"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "attributes")); + elemField.setXmlType(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "SOAPAttribute")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + elemField.setItemQName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "SOAPAttribute")); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("conception"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "conception")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "dateTime")); + elemField.setMinOccurs(0); + elemField.setNillable(false); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("description"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "description")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("directoryID"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "directoryID")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "long")); + elemField.setMinOccurs(0); + elemField.setNillable(false); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("lastModified"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "lastModified")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "dateTime")); + elemField.setMinOccurs(0); + elemField.setNillable(false); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("members"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "members")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + elemField.setItemQName(new javax.xml.namespace.QName("urn:SecurityServer", "string")); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("name"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "name")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + typeDesc.addFieldDesc(elemField); + } + + /** + * Return type metadata object + */ + public static org.apache.axis.description.TypeDesc getTypeDesc() { + return typeDesc; + } + + /** + * Get Custom Serializer + */ + public static org.apache.axis.encoding.Serializer getSerializer( + java.lang.String mechType, + java.lang.Class _javaType, + javax.xml.namespace.QName _xmlType) { + return + new org.apache.axis.encoding.ser.BeanSerializer( + _javaType, _xmlType, typeDesc); + } + + /** + * Get Custom Deserializer + */ + public static org.apache.axis.encoding.Deserializer getDeserializer( + java.lang.String mechType, + java.lang.Class _javaType, + javax.xml.namespace.QName _xmlType) { + return + new org.apache.axis.encoding.ser.BeanDeserializer( + _javaType, _xmlType, typeDesc); + } + +} Added: ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SearchRestriction.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SearchRestriction.java?rev=767305&view=auto ============================================================================== --- ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SearchRestriction.java (added) +++ ofbiz/trunk/specialpurpose/crowd/src/com/atlassian/crowd/integration/soap/SearchRestriction.java Tue Apr 21 21:32:49 2009 @@ -0,0 +1,175 @@ +/******************************************************************************* + * 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. + *******************************************************************************/ +/** + * SearchRestriction.java + * + * This file was auto-generated from WSDL + * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. + */ + +package com.atlassian.crowd.integration.soap; + +public class SearchRestriction implements java.io.Serializable { + private java.lang.String name; + + private java.lang.String value; + + public SearchRestriction() { + } + + public SearchRestriction( + java.lang.String name, + java.lang.String value) { + this.name = name; + this.value = value; + } + + + /** + * Gets the name value for this SearchRestriction. + * + * @return name + */ + public java.lang.String getName() { + return name; + } + + + /** + * Sets the name value for this SearchRestriction. + * + * @param name + */ + public void setName(java.lang.String name) { + this.name = name; + } + + + /** + * Gets the value value for this SearchRestriction. + * + * @return value + */ + public java.lang.String getValue() { + return value; + } + + + /** + * Sets the value value for this SearchRestriction. + * + * @param value + */ + public void setValue(java.lang.String value) { + this.value = value; + } + + private java.lang.Object __equalsCalc = null; + public synchronized boolean equals(java.lang.Object obj) { + if (!(obj instanceof SearchRestriction)) return false; + SearchRestriction other = (SearchRestriction) obj; + if (obj == null) return false; + if (this == obj) return true; + if (__equalsCalc != null) { + return (__equalsCalc == obj); + } + __equalsCalc = obj; + boolean _equals; + _equals = true && + ((this.name==null && other.getName()==null) || + (this.name!=null && + this.name.equals(other.getName()))) && + ((this.value==null && other.getValue()==null) || + (this.value!=null && + this.value.equals(other.getValue()))); + __equalsCalc = null; + return _equals; + } + + private boolean __hashCodeCalc = false; + public synchronized int hashCode() { + if (__hashCodeCalc) { + return 0; + } + __hashCodeCalc = true; + int _hashCode = 1; + if (getName() != null) { + _hashCode += getName().hashCode(); + } + if (getValue() != null) { + _hashCode += getValue().hashCode(); + } + __hashCodeCalc = false; + return _hashCode; + } + + // Type metadata + private static org.apache.axis.description.TypeDesc typeDesc = + new org.apache.axis.description.TypeDesc(SearchRestriction.class, true); + + static { + typeDesc.setXmlType(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "SearchRestriction")); + org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("name"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "name")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + typeDesc.addFieldDesc(elemField); + elemField = new org.apache.axis.description.ElementDesc(); + elemField.setFieldName("value"); + elemField.setXmlName(new javax.xml.namespace.QName("http://soap.integration.crowd.atlassian.com", "value")); + elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string")); + elemField.setMinOccurs(0); + elemField.setNillable(true); + typeDesc.addFieldDesc(elemField); + } + + /** + * Return type metadata object + */ + public static org.apache.axis.description.TypeDesc getTypeDesc() { + return typeDesc; + } + + /** + * Get Custom Serializer + */ + public static org.apache.axis.encoding.Serializer getSerializer( + java.lang.String mechType, + java.lang.Class _javaType, + javax.xml.namespace.QName _xmlType) { + return + new org.apache.axis.encoding.ser.BeanSerializer( + _javaType, _xmlType, typeDesc); + } + + /** + * Get Custom Deserializer + */ + public static org.apache.axis.encoding.Deserializer getDeserializer( + java.lang.String mechType, + java.lang.Class _javaType, + javax.xml.namespace.QName _xmlType) { + return + new org.apache.axis.encoding.ser.BeanDeserializer( + _javaType, _xmlType, typeDesc); + } + +} Added: ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdAuthenticator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdAuthenticator.java?rev=767305&view=auto ============================================================================== --- ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdAuthenticator.java (added) +++ ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdAuthenticator.java Tue Apr 21 21:32:49 2009 @@ -0,0 +1,288 @@ +/******************************************************************************* + * 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.crowd; + +import java.rmi.RemoteException; +import java.util.Map; +import java.io.Serializable; +import java.sql.Timestamp; + +import javax.transaction.Transaction; + +import org.ofbiz.common.authentication.api.Authenticator; +import org.ofbiz.common.authentication.api.AuthenticatorException; +import org.ofbiz.service.LocalDispatcher; +import org.ofbiz.service.GenericServiceException; +import org.ofbiz.service.ServiceUtil; +import org.ofbiz.entity.GenericDelegator; +import org.ofbiz.entity.GenericValue; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.transaction.TransactionUtil; +import org.ofbiz.entity.transaction.GenericTransactionException; +import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilDateTime; +import org.ofbiz.crowd.user.UserWrapper; +import javolution.util.FastMap; + +/** + * CrowdAuthenticator + */ +public class CrowdAuthenticator extends CrowdWorker implements Authenticator { + + private static final String module = CrowdAuthenticator.class.getName(); + private static final String props = "crowd.properties"; + + protected LocalDispatcher dispatcher; + protected GenericDelegator delegator; + + /** + * Method called when authenticator is first initialized (the delegator + * object can be obtained from the LocalDispatcher) + * + * @param dispatcher The ServiceDispatcher to use for this Authenticator + */ + public void initialize(LocalDispatcher dispatcher) { + this.dispatcher = dispatcher; + this.delegator = dispatcher.getDelegator(); + } + + /** + * Method to authenticate a user + * + * @param username User's username + * @param password User's password + * @param isServiceAuth true if authentication is for a service call + * @return true if the user is authenticated + * @throws org.ofbiz.common.authentication.api.AuthenticatorException + * when a fatal error occurs during authentication + */ + public boolean authenticate(String username, String password, boolean isServiceAuth) throws AuthenticatorException { + String token; + try { + token = callAuthenticate(username, password); + } catch (RemoteException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + Debug.logInfo("Crowd auth called; returned token: " + token, module); + return token != null; + } + + /** + * Logs a user out + * + * @param username User's username + * @throws org.ofbiz.common.authentication.api.AuthenticatorException + * when logout fails + */ + public void logout(String username) throws AuthenticatorException { + } + + /** + * Reads user information and syncs it to OFBiz (i.e. UserLogin, Person, etc) + * + * @param username User's username + * @throws org.ofbiz.common.authentication.api.AuthenticatorException + * user synchronization fails + */ + public void syncUser(String username) throws AuthenticatorException { + UserWrapper user; + try { + user = callGetUser(username); + } catch (RemoteException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + + GenericValue system; + try { + system = delegator.findOne("UserLogin", UtilMisc.toMap("userLoginId", "system"), true); + } catch (GenericEntityException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + + GenericValue userLogin; + try { + userLogin = delegator.findOne("UserLogin", UtilMisc.toMap("userLoginId", user.getName()), false); + } catch (GenericEntityException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + + // suspend the current transaction and load the user + Transaction parentTx = null; + boolean beganTransaction = false; + + try { + try { + parentTx = TransactionUtil.suspend(); + } catch (GenericTransactionException e) { + Debug.logError(e, "Could not suspend transaction: " + e.getMessage(), module); + } + + try { + beganTransaction = TransactionUtil.begin(); + + if (userLogin == null) { + // create the user + createUser(user, system); + } else { + // update the user information + updateUser(user, system, userLogin); + } + + } catch (GenericTransactionException e) { + Debug.logError(e, "Could not suspend transaction: " + e.getMessage(), module); + } finally { + try { + TransactionUtil.commit(beganTransaction); + } catch (GenericTransactionException e) { + Debug.logError(e, "Could not commit nested transaction: " + e.getMessage(), module); + } + } + } finally { + // resume/restore parent transaction + if (parentTx != null) { + try { + TransactionUtil.resume(parentTx); + Debug.logVerbose("Resumed the parent transaction.", module); + } catch (GenericTransactionException e) { + Debug.logError(e, "Could not resume parent nested transaction: " + e.getMessage(), module); + } + } + } + } + + private void createUser(UserWrapper user, GenericValue system) throws AuthenticatorException { + // create person + userLogin + Map<String, Serializable> createPersonUlMap = FastMap.newInstance(); + createPersonUlMap.put("firstName", user.getUserAttributeMapper().getFirstName()); + createPersonUlMap.put("lastName", user.getUserAttributeMapper().getLastName()); + createPersonUlMap.put("externalAuthId", user.getName()); + createPersonUlMap.put("externalId", user.getName()); + createPersonUlMap.put("userLoginId", user.getName()); + createPersonUlMap.put("currentPassword", "[EXTERNAL]"); + createPersonUlMap.put("currentPasswordVerify", "[EXTERNAL]"); + createPersonUlMap.put("userLogin", system); + Map<String, Object> createPersonResult; + try { + createPersonResult = dispatcher.runSync("createPersonAndUserLogin", createPersonUlMap); + } catch (GenericServiceException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + if (ServiceUtil.isError(createPersonResult)) { + throw new AuthenticatorException(ServiceUtil.getErrorMessage(createPersonResult)); + } + String partyId = (String) createPersonResult.get("partyId"); + + // create email + Map<String, Serializable> createEmailMap = FastMap.newInstance(); + createEmailMap.put("emailAddress", user.getUserAttributeMapper().getEmail()); + createEmailMap.put("contactMechPurposeTypeId", "PRIMARY_EMAIL"); + createEmailMap.put("partyId", partyId); + createEmailMap.put("userLogin", system); + Map<String, Object> createEmailResult; + try { + createEmailResult = dispatcher.runSync("createPartyEmailAddress", createEmailMap); + } catch (GenericServiceException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + if (ServiceUtil.isError(createEmailResult)) { + throw new AuthenticatorException(ServiceUtil.getErrorMessage(createEmailResult)); + } + + // create security group(s) + Timestamp now = UtilDateTime.nowTimestamp(); + for (String securityGroup : user.getUserGroupMapper().getSecurityGroups()) { + Map<String, Serializable> createSecGrpMap = FastMap.newInstance(); + createSecGrpMap.put("userLoginId", user.getName()); + createSecGrpMap.put("groupId", securityGroup); + createSecGrpMap.put("fromDate", now); + createSecGrpMap.put("userLogin", system); + + Map<String, Object> createSecGrpResult; + try { + createSecGrpResult = dispatcher.runSync("addUserLoginToSecurityGroup", createSecGrpMap); + } catch (GenericServiceException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + if (ServiceUtil.isError(createSecGrpResult)) { + throw new AuthenticatorException(ServiceUtil.getErrorMessage(createSecGrpResult)); + } + } + } + + private void updateUser(UserWrapper user, GenericValue system, GenericValue userLogin) throws AuthenticatorException { + // TODO implement me + } + + /** + * Updates a user's password + * + * @param username User's username + * @param password User's current password + * @param newPassword User's new password + * @throws org.ofbiz.common.authentication.api.AuthenticatorException + * when update password fails + */ + public void updatePassword(String username, String password, String newPassword) throws AuthenticatorException { + Debug.logInfo("Calling Crowd:updatePassword() - " + newPassword, module); + try { + callUpdatePassword(username, newPassword); + } catch (RemoteException e) { + throw new AuthenticatorException(e.getMessage(), e); + } + } + + /** + * Weight of this authenticator (lower weights are run first) + * + * @return the weight of this Authenicator + */ + public float getWeight() { + return 0; + } + + /** + * Is the user synchronzied back to OFBiz + * + * @return true if the user record is copied to the OFB database + */ + public boolean isUserSynchronized() { + return true; + } + + /** + * Is this expected to be the only authenticator, if so errors will be thrown when users cannot be found + * + * @return true if this is expected to be the only Authenticator + */ + public boolean isSingleAuthenticator() { + return false; + } + + /** + * Flag to test if this Authenticator is enabled + * + * @return true if the Authenticator is enabled + */ + public boolean isEnabled() { + return "true".equalsIgnoreCase(UtilProperties.getPropertyValue(props, "crowd.authenticator.enabled", "false")); + } +} Added: ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdWorker.java?rev=767305&view=auto ============================================================================== --- ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdWorker.java (added) +++ ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/CrowdWorker.java Tue Apr 21 21:32:49 2009 @@ -0,0 +1,155 @@ +/******************************************************************************* + * 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.crowd; + +import java.rmi.RemoteException; +import javax.xml.rpc.ServiceException; + +import org.ofbiz.crowd.security.SecurityServerHttpBindingStub; +import org.ofbiz.crowd.security.SecurityServerLocator; +import org.ofbiz.crowd.user.UserWrapper; +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.UtilProperties; +import com.atlassian.crowd.integration.authentication.AuthenticatedToken; +import com.atlassian.crowd.integration.authentication.ApplicationAuthenticationContext; +import com.atlassian.crowd.integration.authentication.PasswordCredential; +import com.atlassian.crowd.integration.authentication.ValidationFactor; +import com.atlassian.crowd.integration.soap.SOAPPrincipal; +import com.atlassian.crowd.integration.exception.InvalidAuthorizationTokenException; +import com.atlassian.crowd.integration.exception.ObjectNotFoundException; +import com.atlassian.crowd.integration.exception.InvalidAuthenticationException; +import com.atlassian.crowd.integration.exception.InactiveAccountException; +import com.atlassian.crowd.integration.exception.ApplicationAccessDeniedException; + +/** + * CrowdWorker + */ +public abstract class CrowdWorker { + + private static final String module = CrowdWorker.class.getName(); + + protected String callAuthenticate(String user, String password) throws RemoteException { + SecurityServerHttpBindingStub stub = getStub(); + AuthenticatedToken token = getToken(stub); + + // auth the user + String userToken; + try { + userToken = stub.authenticatePrincipalSimple(token, user, password); + } catch (InvalidAuthenticationException e) { + return null; + } catch (InvalidAuthorizationTokenException e) { + Debug.logError(e, module); + throw e; + } catch (ApplicationAccessDeniedException e) { + Debug.logError(e, module); + throw e; + } catch (InactiveAccountException e) { + return null; + } catch (RemoteException e) { + Debug.logError(e, module); + throw e; + } + + return userToken; + } + + protected UserWrapper callGetUser(String user) throws RemoteException { + SecurityServerHttpBindingStub stub = getStub(); + AuthenticatedToken token = getToken(stub); + + SOAPPrincipal principal; + try { + principal = stub.findPrincipalByName(token, user); + } catch (InvalidAuthorizationTokenException e) { + Debug.logError(e, module); + throw e; + } catch (ObjectNotFoundException e) { + Debug.logError(e, module); + throw e; + } catch (RemoteException e) { + Debug.logError(e, module); + throw e; + } + + String[] groups; + try { + groups = stub.findGroupMemberships(token, user); + } catch (InvalidAuthorizationTokenException e) { + Debug.logError(e, module); + throw e; + } catch (ObjectNotFoundException e) { + groups = new String[0]; + } catch (RemoteException e) { + Debug.logError(e, module); + throw e; + } + + return new UserWrapper(principal, groups); + } + + protected void callUpdatePassword(String user, String password) throws RemoteException { + PasswordCredential credential = new PasswordCredential(); + credential.setCredential(password); + credential.setEncryptedCredential(false); + + SecurityServerHttpBindingStub stub = getStub(); + AuthenticatedToken token = getToken(stub); + + try { + stub.updatePrincipalCredential(token, user, credential); + } catch (RemoteException e) { + Debug.logError(e, module); + throw e; + } + } + + private AuthenticatedToken getToken(SecurityServerHttpBindingStub stub) { + String appName = UtilProperties.getPropertyValue("crowd.properties", "crowd.application.name"); + String appPass = UtilProperties.getPropertyValue("crowd.properties", "crowd.application.pass"); + + // authenticate the integrated crowd application + if (stub == null) { + stub = getStub(); + } + if (stub != null) { + try { + return stub.authenticateApplication(new ApplicationAuthenticationContext( + new PasswordCredential(appPass, Boolean.FALSE), appName, new ValidationFactor[0])); + } catch (RemoteException e) { + Debug.logError(e, module); + return null; + } + } else { + return null; + } + } + + private SecurityServerHttpBindingStub getStub() { + try { + SecurityServerLocator secServer = new SecurityServerLocator(); + secServer.setSecurityServerHttpPortEndpointAddress(secServer.getSecurityServerHttpPortAddress()); + return (SecurityServerHttpBindingStub) secServer.getSecurityServerHttpPort(); + } catch (ServiceException e) { + Debug.logError(e, module); + return null; + } + } +} Added: ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/security/SecurityServer.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/security/SecurityServer.java?rev=767305&view=auto ============================================================================== --- ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/security/SecurityServer.java (added) +++ ofbiz/trunk/specialpurpose/crowd/src/org/ofbiz/crowd/security/SecurityServer.java Tue Apr 21 21:32:49 2009 @@ -0,0 +1,34 @@ +/******************************************************************************* + * 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. + *******************************************************************************/ +/** + * SecurityServer.java + * + * This file was auto-generated from WSDL + * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. + */ + +package org.ofbiz.crowd.security; + +public interface SecurityServer extends javax.xml.rpc.Service { + public java.lang.String getSecurityServerHttpPortAddress(); + + public org.ofbiz.crowd.security.SecurityServerPortType getSecurityServerHttpPort() throws javax.xml.rpc.ServiceException; + + public org.ofbiz.crowd.security.SecurityServerPortType getSecurityServerHttpPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException; +} |
Free forum by Nabble | Edit this page |