| /* $Id: MeridioAuthority.java 988245 2010-08-23 18:39:35Z kwright $ */ |
| |
| /** |
| * 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.apache.manifoldcf.crawler.connectors.meridio; |
| |
| import org.apache.manifoldcf.core.interfaces.*; |
| import org.apache.manifoldcf.crawler.connectors.meridio.DMDataSet.DMDataSet; |
| import org.apache.manifoldcf.crawler.connectors.meridio.meridiowrapper.MeridioDataSetException; |
| import org.apache.manifoldcf.crawler.connectors.meridio.meridiowrapper.MeridioWrapper; |
| import org.apache.manifoldcf.crawler.connectors.meridio.RMDataSet.RMDataSet; |
| import org.tempuri.GroupResult; |
| import org.apache.manifoldcf.authorities.system.Logging; |
| import org.apache.manifoldcf.authorities.system.ManifoldCF; |
| import org.apache.manifoldcf.authorities.interfaces.AuthorizationResponse; |
| |
| import org.apache.commons.httpclient.protocol.Protocol; |
| import org.apache.commons.httpclient.protocol.ProtocolFactory; |
| import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; |
| |
| import java.rmi.RemoteException; |
| import java.util.*; |
| import java.io.*; |
| import java.net.*; |
| |
| |
| |
| /** This is the Meridio implementation of the IAuthorityConnector interface. |
| * |
| */ |
| public class MeridioAuthority extends org.apache.manifoldcf.authorities.authorities.BaseAuthorityConnector |
| { |
| public static final String _rcsid = "@(#)$Id: MeridioAuthority.java 988245 2010-08-23 18:39:35Z kwright $"; |
| |
| // Properties we need |
| public final static String wsddPathProperty = "org.apache.manifoldcf.meridio.wsddpath"; |
| |
| private MeridioWrapper meridio_ = null; // A handle to the Meridio Java API Wrapper |
| |
| // URLs initialized by 'connect' code |
| private URL DmwsURL = null; |
| private URL RmwsURL = null; |
| private URL MetaCartawsURL = null; |
| |
| private ProtocolFactory myFactory = null; |
| |
| private String DMWSProxyHost = null; |
| private String DMWSProxyPort = null; |
| private String RMWSProxyHost = null; |
| private String RMWSProxyPort = null; |
| private String MetaCartaWSProxyHost = null; |
| private String MetaCartaWSProxyPort = null; |
| private String UserName = null; |
| private String Password = null; |
| |
| private String cacheLifetime = null; |
| private String cacheLRUsize = null; |
| private long responseLifetime = 60000L; |
| private int LRUsize = 1000; |
| |
| /** Cache manager. */ |
| protected ICacheManager cacheManager = null; |
| |
| final private static int MANAGE_DOCUMENT_PRIVILEGE = 17; |
| |
| /** Deny access token for Meridio. All tokens begin with "U" or with "G", except the blanket "READ_ALL" that I create. |
| * However, we currently have code in the field, so I will continue ot use "DEAD_AUTHORITY" for that reason. |
| */ |
| private final static String denyToken = "DEAD_AUTHORITY"; |
| |
| private final static AuthorizationResponse unreachableResponse = new AuthorizationResponse(new String[]{denyToken},AuthorizationResponse.RESPONSE_UNREACHABLE); |
| private final static AuthorizationResponse userNotFoundResponse = new AuthorizationResponse(new String[]{denyToken},AuthorizationResponse.RESPONSE_USERNOTFOUND); |
| |
| |
| /** Constructor. |
| */ |
| public MeridioAuthority() {} |
| |
| /** Set thread context. |
| */ |
| @Override |
| public void setThreadContext(IThreadContext tc) |
| throws ManifoldCFException |
| { |
| super.setThreadContext(tc); |
| cacheManager = CacheManagerFactory.make(tc); |
| } |
| |
| /** Clear thread context. |
| */ |
| @Override |
| public void clearThreadContext() |
| { |
| super.clearThreadContext(); |
| cacheManager = null; |
| } |
| |
| /** Connect. The configuration parameters are included. |
| *@param configParams are the configuration parameters for this connection. |
| */ |
| @Override |
| public void connect(ConfigParams configParams) |
| { |
| super.connect(configParams); |
| |
| /*================================================================= |
| * Construct the URL strings from the parameters |
| * |
| *================================================================*/ |
| DMWSProxyHost = configParams.getParameter("DMWSProxyHost"); |
| DMWSProxyPort = configParams.getParameter("DMWSProxyPort"); |
| RMWSProxyHost = configParams.getParameter("RMWSProxyHost"); |
| RMWSProxyPort = configParams.getParameter("RMWSProxyPort"); |
| MetaCartaWSProxyHost = configParams.getParameter("MetaCartaWSProxyHost"); |
| MetaCartaWSProxyPort = configParams.getParameter("MetaCartaWSProxyPort"); |
| UserName = configParams.getParameter("UserName"); |
| Password = configParams.getObfuscatedParameter("Password"); |
| |
| cacheLifetime = configParams.getParameter("CacheLifetimeMins"); |
| if (cacheLifetime == null) |
| cacheLifetime = "1"; |
| cacheLRUsize = configParams.getParameter("CacheLRUSize"); |
| if (cacheLRUsize == null) |
| cacheLRUsize = "1000"; |
| |
| } |
| |
| /** Set up connection before attempting to use it */ |
| protected void attemptToConnect() |
| throws ManifoldCFException |
| { |
| try |
| { |
| responseLifetime = Long.parseLong(this.cacheLifetime) * 60L * 1000L; |
| LRUsize = Integer.parseInt(this.cacheLRUsize); |
| } |
| catch (NumberFormatException e) |
| { |
| throw new ManifoldCFException("Cache lifetime or Cache LRU size must be an integer: "+e.getMessage(),e); |
| } |
| |
| if (meridio_ == null) |
| { |
| |
| // This stuff used to be in connect(); was moved here so proper exception handling could be done |
| /*================================================================= |
| * Construct the URL strings from the parameters |
| * |
| *================================================================*/ |
| |
| String DMWSProtocol = params.getParameter("DMWSServerProtocol"); |
| if (DMWSProtocol == null) |
| throw new ManifoldCFException("Missing required configuration parameter: DMWSServerProtocol"); |
| String DMWSPort = params.getParameter("DMWSServerPort"); |
| if (DMWSPort == null || DMWSPort.length() == 0) |
| DMWSPort = ""; |
| else |
| DMWSPort = ":" + DMWSPort; |
| |
| String DMWSUrlString = DMWSProtocol + "://" + |
| params.getParameter("DMWSServerName") + |
| DMWSPort + |
| params.getParameter("DMWSLocation"); |
| |
| String RMWSProtocol = params.getParameter("RMWSServerProtocol"); |
| if (RMWSProtocol == null) |
| throw new ManifoldCFException("Missing required configuration parameter: RMWSServerProtocol"); |
| String RMWSPort = params.getParameter("RMWSServerPort"); |
| if (RMWSPort == null || RMWSPort.length() == 0) |
| RMWSPort = ""; |
| else |
| RMWSPort = ":" + RMWSPort; |
| |
| String RMWSUrlString = RMWSProtocol + "://" + |
| params.getParameter("RMWSServerName") + |
| RMWSPort + |
| params.getParameter("RMWSLocation"); |
| |
| String MetaCartaWSProtocol = params.getParameter("MetaCartaWSServerProtocol"); |
| if (MetaCartaWSProtocol == null) |
| throw new ManifoldCFException("Missing required configuration parameter: MetaCartaWSServerProtocol"); |
| String MetaCartaWSPort = params.getParameter("MetaCartaWSServerPort"); |
| if (MetaCartaWSPort == null || MetaCartaWSPort.length() == 0) |
| MetaCartaWSPort = ""; |
| else |
| MetaCartaWSPort = ":" + MetaCartaWSPort; |
| |
| String ManifoldCFWSUrlString = MetaCartaWSProtocol + "://" + |
| params.getParameter("MetaCartaWSServerName") + |
| MetaCartaWSPort + |
| params.getParameter("MetaCartaWSLocation"); |
| |
| |
| // Set up ssl if indicated |
| String keystoreData = params.getParameter( "MeridioKeystore" ); |
| myFactory = new ProtocolFactory(); |
| |
| if (keystoreData != null) |
| { |
| IKeystoreManager keystoreManager = KeystoreManagerFactory.make("",keystoreData); |
| MeridioSecureSocketFactory secureSocketFactory = new MeridioSecureSocketFactory(keystoreManager.getSecureSocketFactory()); |
| Protocol myHttpsProtocol = new Protocol("https", (ProtocolSocketFactory)secureSocketFactory, 443); |
| myFactory.registerProtocol("https",myHttpsProtocol); |
| } |
| |
| try |
| { |
| DmwsURL = new URL(DMWSUrlString); |
| RmwsURL = new URL(RMWSUrlString); |
| MetaCartawsURL = new URL(ManifoldCFWSUrlString); |
| |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| { |
| Logging.authorityConnectors.debug("Meridio: Document Management Web Service (DMWS) URL is [" + DmwsURL + "]"); |
| Logging.authorityConnectors.debug("Meridio: Record Management Web Service (RMWS) URL is [" + RmwsURL + "]"); |
| Logging.authorityConnectors.debug("Meridio: MetaCarta Web Service (MCWS) URL is [" + MetaCartawsURL + "]"); |
| } |
| |
| } |
| catch (MalformedURLException malformedURLException) |
| { |
| throw new ManifoldCFException("Meridio: Could not construct the URL for either " + |
| "the Meridio DM, Meridio RM, or MetaCarta Meridio Web Service: "+malformedURLException, malformedURLException); |
| } |
| |
| try |
| { |
| /*================================================================= |
| * Now try and login to Meridio; the wrapper's constructor can be |
| * used as it calls the Meridio login method |
| *================================================================*/ |
| meridio_ = new MeridioWrapper(Logging.authorityConnectors, DmwsURL, RmwsURL, MetaCartawsURL, |
| DMWSProxyHost, DMWSProxyPort, RMWSProxyHost, RMWSProxyPort, MetaCartaWSProxyHost, MetaCartaWSProxyPort, |
| UserName, Password, |
| InetAddress.getLocalHost().getHostName(), |
| myFactory, |
| getClass(), |
| "meridio-client-config.wsdd"); |
| } |
| catch (UnknownHostException unknownHostException) |
| { |
| throw new ManifoldCFException("Meridio: A Unknown Host Exception occurred while " + |
| "connecting - is a network software and hardware configuration: "+unknownHostException.getMessage(), unknownHostException); |
| } |
| catch (org.apache.axis.AxisFault e) |
| { |
| long currentTime = System.currentTimeMillis(); |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HTTP"))) |
| { |
| org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HttpErrorCode")); |
| if (elem != null) |
| { |
| elem.normalize(); |
| String httpErrorCode = elem.getFirstChild().getNodeValue().trim(); |
| throw new ManifoldCFException("Unexpected http error code "+httpErrorCode+" accessing Meridio: "+e.getMessage(),e); |
| } |
| throw new ManifoldCFException("Unknown http error occurred while connecting: "+e.getMessage(),e); |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server.userException"))) |
| { |
| String exceptionName = e.getFaultString(); |
| if (exceptionName.equals("java.lang.InterruptedException")) |
| throw new ManifoldCFException("Interrupted",ManifoldCFException.INTERRUPTED); |
| } |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Got an unknown remote exception connecting - axis fault = "+e.getFaultCode().getLocalPart()+", detail = "+e.getFaultString()+" - retrying",e); |
| throw new ManifoldCFException("Remote procedure exception: "+e.getMessage(),e); |
| } |
| catch (RemoteException remoteException) |
| { |
| throw new ManifoldCFException("Meridio: An unknown remote exception occurred while " + |
| "connecting: "+remoteException.getMessage(), remoteException); |
| } |
| |
| } |
| |
| } |
| |
| // All methods below this line will ONLY be called if a connect() call succeeded |
| // on this instance! |
| |
| /** Check connection for sanity. |
| */ |
| @Override |
| public String check() |
| throws ManifoldCFException |
| { |
| Logging.authorityConnectors.debug("Meridio: Entering 'check' method"); |
| attemptToConnect(); |
| try |
| { |
| /*================================================================= |
| * Call a method in the Web Services API to get the Meridio system |
| * name back - just something simple to test the connection |
| * end-to-end |
| *================================================================*/ |
| DMDataSet ds = meridio_.getStaticData(); |
| if (null == ds) |
| { |
| Logging.authorityConnectors.warn("Meridio: DM DataSet returned was null in 'check' method"); |
| return "Connection Failed - Internal Error Contact Support"; |
| } |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio System Name is [" + |
| ds.getSYSTEMINFO().getSystemName() + "] and the comment is [" + |
| ds.getSYSTEMINFO().getComment() + "]"); |
| |
| /*================================================================= |
| * For completeness, we also call a method in the RM Web |
| * Service API |
| *================================================================*/ |
| RMDataSet rmws = meridio_.getConfiguration(); |
| if (null == rmws) |
| { |
| Logging.authorityConnectors.warn("Meridio: RM DataSet returned was null in 'check' method"); |
| return "Connection Failed - RM DataSet Error, contact Support"; |
| } |
| |
| /*================================================================= |
| * Finally, try to get the group parents of user ID 2 (which is the admin user always). |
| * This tests the MetaCarta web service setup. |
| */ |
| meridio_.getUsersGroups(2); |
| |
| Logging.authorityConnectors.debug("Meridio: Exiting 'check' method"); |
| |
| return super.check(); |
| } |
| catch (org.apache.axis.AxisFault e) |
| { |
| long currentTime = System.currentTimeMillis(); |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HTTP"))) |
| { |
| org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HttpErrorCode")); |
| if (elem != null) |
| { |
| elem.normalize(); |
| String httpErrorCode = elem.getFirstChild().getNodeValue().trim(); |
| return "Unexpected http error code "+httpErrorCode+" accessing Meridio: "+e.getMessage(); |
| } |
| return "Unknown http error occurred while connecting: "+e.getMessage(); |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server.userException"))) |
| { |
| String exceptionName = e.getFaultString(); |
| if (exceptionName.equals("java.lang.InterruptedException")) |
| throw new ManifoldCFException("Interrupted",ManifoldCFException.INTERRUPTED); |
| } |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Got an unknown remote exception checking - axis fault = "+e.getFaultCode().getLocalPart()+", detail = "+e.getFaultString()+" - retrying",e); |
| return "Axis fault: "+e.getMessage(); |
| } |
| catch (RemoteException remoteException) |
| { |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Unknown remote exception occurred during 'check' method: "+remoteException.getMessage(), |
| remoteException); |
| return "Meridio: An unknown remote exception occurred while connecting: "+remoteException.getMessage(); |
| } |
| catch (MeridioDataSetException meridioDataSetException) |
| { |
| /*================================================================= |
| * Log the exception because we will then discard it |
| * |
| * If it is a DataSet exception it means that we could not marshal |
| * or unmarshall the XML returned from the Web Service call. This |
| * means there is either a problem with the code, or perhaps the |
| * connector is pointing at an incorrect/unsupported version of |
| * Meridio |
| *================================================================*/ |
| Logging.authorityConnectors.warn("Meridio: DataSet Exception occurred during 'check' method", |
| meridioDataSetException); |
| |
| return "Connection Failed - DataSet error: "+meridioDataSetException.getMessage(); |
| } |
| } |
| |
| /** Close the connection. Call this before discarding the repository connector. |
| */ |
| @Override |
| public void disconnect() |
| throws ManifoldCFException |
| { |
| Logging.authorityConnectors.debug("Meridio: Entering 'disconnect' method"); |
| try |
| { |
| if (meridio_ != null) |
| { |
| meridio_.logout(); |
| } |
| } |
| catch (org.apache.axis.AxisFault e) |
| { |
| long currentTime = System.currentTimeMillis(); |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HTTP"))) |
| { |
| org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HttpErrorCode")); |
| if (elem != null) |
| { |
| elem.normalize(); |
| String httpErrorCode = elem.getFirstChild().getNodeValue().trim(); |
| Logging.authorityConnectors.warn("Unexpected http error code "+httpErrorCode+" logging out: "+e.getMessage()); |
| return; |
| } |
| Logging.authorityConnectors.warn("Unknown http error occurred while logging out: "+e.getMessage()); |
| return; |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server.userException"))) |
| { |
| String exceptionName = e.getFaultString(); |
| if (exceptionName.equals("java.lang.InterruptedException")) |
| throw new ManifoldCFException("Interrupted",ManifoldCFException.INTERRUPTED); |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server"))) |
| { |
| if (e.getFaultString().indexOf(" 23031#") != -1) |
| { |
| // This means that the session has expired, so reset it and retry |
| meridio_ = null; |
| return; |
| } |
| } |
| |
| Logging.authorityConnectors.warn("Meridio: Got an unknown remote exception logging out - axis fault = "+e.getFaultCode().getLocalPart()+", detail = "+e.getFaultString(),e); |
| return; |
| } |
| catch (RemoteException remoteException) |
| { |
| Logging.authorityConnectors.warn("Meridio: A remote exception occurred while " + |
| "logging out: "+remoteException.getMessage(), remoteException); |
| } |
| finally |
| { |
| super.disconnect(); |
| meridio_ = null; |
| DmwsURL = null; |
| RmwsURL = null; |
| MetaCartawsURL = null; |
| myFactory = null; |
| DMWSProxyHost = null; |
| DMWSProxyPort = null; |
| RMWSProxyHost = null; |
| RMWSProxyPort = null; |
| MetaCartaWSProxyHost = null; |
| MetaCartaWSProxyPort = null; |
| UserName = null; |
| Password = null; |
| cacheLifetime = null; |
| cacheLRUsize = null; |
| } |
| Logging.authorityConnectors.debug("Meridio: Exiting 'disconnect' method"); |
| } |
| |
| |
| /** Obtain the access tokens for a given user name. |
| *@param userName is the user name or identifier. |
| *@return the response tokens (according to the current authority). |
| * (Should throws an exception only when a condition cannot be properly described within the authorization response object.) |
| */ |
| @Override |
| public AuthorizationResponse getAuthorizationResponse(String userName) |
| throws ManifoldCFException |
| { |
| // Construct a cache description object |
| ICacheDescription objectDescription = new AuthorizationResponseDescription(userName, |
| DmwsURL.toString(),RmwsURL.toString(),MetaCartawsURL.toString(), |
| DMWSProxyHost,DMWSProxyPort,RMWSProxyHost,RMWSProxyPort, |
| MetaCartaWSProxyHost,MetaCartaWSProxyPort,this.UserName,this.Password, |
| responseLifetime,LRUsize); |
| |
| // Enter the cache |
| ICacheHandle ch = cacheManager.enterCache(new ICacheDescription[]{objectDescription},null,null); |
| try |
| { |
| ICacheCreateHandle createHandle = cacheManager.enterCreateSection(ch); |
| try |
| { |
| // Lookup the object |
| AuthorizationResponse response = (AuthorizationResponse)cacheManager.lookupObject(createHandle,objectDescription); |
| if (response != null) |
| return response; |
| // Create the object. |
| response = getAuthorizationResponseUncached(userName); |
| // Save it in the cache |
| cacheManager.saveObject(createHandle,objectDescription,response); |
| // And return it... |
| return response; |
| } |
| finally |
| { |
| cacheManager.leaveCreateSection(createHandle); |
| } |
| } |
| finally |
| { |
| cacheManager.leaveCache(ch); |
| } |
| } |
| |
| /** Uncached method to get an authorization response. */ |
| protected AuthorizationResponse getAuthorizationResponseUncached(String userName) |
| throws ManifoldCFException |
| { |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Authentication user name = '" + userName + "'"); |
| |
| while (true) |
| { |
| attemptToConnect(); |
| |
| // Strip off everything after the @-sign |
| int index = userName.indexOf("@"); |
| if (index != -1) |
| userName = userName.substring(0,index); |
| |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Meridio user name = '"+userName+"'"); |
| |
| ArrayList aclList = new ArrayList(); |
| |
| try |
| { |
| /*================================================================= |
| * Search for the user in Meridio to find their internal user ID. |
| * The method returns 0 if the user is not found |
| * |
| * We expect the user name passed in to be the user's login name |
| * without the "domain" prefix or suffix (i.e. domain\\username |
| * or username@domain.com) |
| * |
| * If the username is passed in a different format, then it should |
| * be transformed first |
| *================================================================*/ |
| //TODO: We could also possibly search on the user's directory name to |
| // avoid the transformation |
| long userId = meridio_.getUserIdFromName(userName); |
| if (0L == userId) |
| { |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: User '" + userName + "' does not exist"); |
| return userNotFoundResponse; |
| } |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Found user - the User Id for '" + userName + |
| "' is " + userId); |
| |
| aclList.add("U" + userId); |
| |
| /** This is the new, MetaCarta-service way of getting the groups, which relies on the custom |
| * MetaCarta web service developed by Meridio. The old way was too inefficient to be workable for |
| * installations that had more than a few users and groups. |
| */ |
| GroupResult [] userGroups = null; |
| userGroups = meridio_.getUsersGroups(new Long(userId).intValue()); |
| if (userGroups != null) |
| { |
| for (int i = 0; i < userGroups.length; i++) |
| { |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Group ID '" + userGroups[i].getGroupID() + |
| "' Group Name '" + userGroups[i].getGroupName() + ">'"); |
| aclList.add("G" + userGroups[i].getGroupID()); |
| } |
| } |
| |
| /*================================================================= |
| * Protective markings |
| *================================================================*/ |
| //TODO: Check if we must cater for protective markings since there |
| // is the complexity of informative markings and |
| // hierarchical markings to deal with |
| // |
| // Hierarchical ones are CONFIDENTIAL, RESTRICTED, SECRET, TOP SECRET |
| // Non-hierarchical ones might be UK Eyes Only, US Eyes Only, etc. |
| // |
| |
| |
| /*================================================================= |
| * Get the user's privileges |
| * |
| * The "Manage Documents" privilege will effectively grant the user |
| * "manage" access to all documents/records within Meridio, so if |
| * the user has been granted that privilege, or one of the groups |
| * of which they are a member has that privilege then add it to |
| * the token list |
| *================================================================*/ |
| RMDataSet userPrivileges = meridio_.getUserPrivilegeList(new Long(userId).intValue()); |
| |
| for (int i = 0; i < userPrivileges.getRm2Privilege().length; i++) |
| { |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Privilege ID '" + userPrivileges.getRm2Privilege()[i].getId() + "' " + |
| "Name '" + userPrivileges.getRm2Privilege()[i].getName() + "'"); |
| |
| if (userPrivileges.getRm2Privilege()[i].getId() == MANAGE_DOCUMENT_PRIVILEGE) |
| { |
| Logging.authorityConnectors.debug("Meridio: User has Manage Document privilege so adding READ_ALL to token list"); |
| aclList.add("READ_ALL"); |
| } |
| } |
| |
| String[] rval = new String[aclList.size()]; |
| for (int i = 0; i < rval.length; i++) |
| { |
| rval[i] = (String)aclList.get(i); |
| } |
| |
| Logging.authorityConnectors.debug("Meridio: Exiting method getAccessTokens"); |
| return new AuthorizationResponse(rval,AuthorizationResponse.RESPONSE_OK); |
| } |
| catch (org.apache.axis.AxisFault e) |
| { |
| long currentTime = System.currentTimeMillis(); |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HTTP"))) |
| { |
| org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName("http://xml.apache.org/axis/","HttpErrorCode")); |
| if (elem != null) |
| { |
| elem.normalize(); |
| String httpErrorCode = elem.getFirstChild().getNodeValue().trim(); |
| throw new ManifoldCFException("Unexpected http error code "+httpErrorCode+" accessing Meridio: "+e.getMessage(),e); |
| } |
| throw new ManifoldCFException("Unknown http error occurred while getting doc versions: "+e.getMessage(),e); |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server.userException"))) |
| { |
| String exceptionName = e.getFaultString(); |
| if (exceptionName.equals("java.lang.InterruptedException")) |
| throw new ManifoldCFException("Interrupted",ManifoldCFException.INTERRUPTED); |
| } |
| if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/","Server"))) |
| { |
| if (e.getFaultString().indexOf(" 23031#") != -1) |
| { |
| // This means that the session has expired, so reset it and retry |
| meridio_ = null; |
| continue; |
| } |
| } |
| |
| if (Logging.authorityConnectors.isDebugEnabled()) |
| Logging.authorityConnectors.debug("Meridio: Got an unknown remote exception getting user tokens - axis fault = "+e.getFaultCode().getLocalPart()+", detail = "+e.getFaultString()+" - retrying",e); |
| throw new ManifoldCFException("Axis fault: "+e.getMessage(), e); |
| } |
| catch (RemoteException remoteException) |
| { |
| throw new ManifoldCFException("Meridio: A remote exception occurred while getting user tokens: " + |
| remoteException.getMessage(), remoteException); |
| } |
| catch (MeridioDataSetException meridioDataSetException) |
| { |
| Logging.authorityConnectors.error("Meridio: A provlem occurred manipulating the Web Service XML: " + |
| meridioDataSetException.getMessage(), meridioDataSetException); |
| throw new ManifoldCFException("Meridio: A problem occurred manipulating the Web " + |
| "Service XML: "+meridioDataSetException.getMessage(), meridioDataSetException); |
| } |
| } |
| } |
| |
| /** Obtain the default access tokens for a given user name. |
| *@param userName is the user name or identifier. |
| *@return the default response tokens, presuming that the connect method fails. |
| */ |
| @Override |
| public AuthorizationResponse getDefaultAuthorizationResponse(String userName) |
| { |
| return unreachableResponse; |
| } |
| |
| // UI support methods. |
| // |
| // These support methods are involved in setting up authority connection configuration information. The configuration methods cannot assume that the |
| // current authority object is connected. That is why they receive a thread context argument. |
| |
| /** Output the configuration header section. |
| * This method is called in the head section of the connector's configuration page. Its purpose is to add the required tabs to the list, and to output any |
| * javascript methods that might be needed by the configuration editing HTML. |
| *@param threadContext is the local thread context. |
| *@param out is the output to which any HTML should be sent. |
| *@param parameters are the configuration parameters, as they currently exist, for this connection being configured. |
| *@param tabsArray is an array of tab names. Add to this array any tab names that are specific to the connector. |
| */ |
| @Override |
| public void outputConfigurationHeader(IThreadContext threadContext, IHTTPOutput out, |
| Locale locale, ConfigParams parameters, List<String> tabsArray) |
| throws ManifoldCFException, IOException |
| { |
| tabsArray.add(Messages.getString(locale,"MeridioConnector.DocumentServer")); |
| tabsArray.add(Messages.getString(locale,"MeridioConnector.RecordsServer")); |
| tabsArray.add(Messages.getString(locale,"MeridioConnector.UserServiceServer")); |
| tabsArray.add(Messages.getString(locale,"MeridioConnector.Credentials")); |
| tabsArray.add(Messages.getString(locale,"MeridioConnector.Cache")); |
| out.print( |
| "<script type=\"text/javascript\">\n"+ |
| "<!--\n"+ |
| "\n"+ |
| "function checkConfig()\n"+ |
| "{\n"+ |
| " if (editconnection.dmwsServerPort.value != \"\" && !isInteger(editconnection.dmwsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.dmwsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.rmwsServerPort.value != \"\" && !isInteger(editconnection.rmwsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.rmwsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.dmwsProxyPort.value != \"\" && !isInteger(editconnection.dmwsProxyPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.dmwsProxyPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.rmwsProxyPort.value != \"\" && !isInteger(editconnection.rmwsProxyPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.rmwsProxyPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.metacartawsServerPort.value != \"\" && !isInteger(editconnection.metacartawsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.metacartawsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.metacartawsProxyPort.value != \"\" && !isInteger(editconnection.metacartawsProxyPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAValidNumber") + "\");\n"+ |
| " editconnection.metacartawsProxyPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.userName.value != \"\" && editconnection.userName.value.indexOf(\"\\\") <= 0)\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.AValidMeridioUserNameHasTheForm") + "\");\n"+ |
| " editconnection.userName.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " return true;\n"+ |
| "}\n"+ |
| "\n"+ |
| "function checkConfigForSave()\n"+ |
| "{\n"+ |
| " if (editconnection.dmwsServerName.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseFillInAMeridioDocumentManagementServerName") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.DocumentServer") + "\");\n"+ |
| " editconnection.dmwsServerName.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.rmwsServerName.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseFillInAMeridioRecordsManagementServerName") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.RecordsServer") + "\");\n"+ |
| " editconnection.rmwsServerName.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.metacartawsServerName.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseFillInAUserServiceServerName") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.UserServiceServer") + "\");\n"+ |
| " editconnection.metacartawsServerName.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| "\n"+ |
| " if (editconnection.dmwsServerPort.value != \"\" && !isInteger(editconnection.dmwsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAMeridioDocumentManagementPortNumber") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.DocumentServer") + "\");\n"+ |
| " editconnection.dmwsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.rmwsServerPort.value != \"\" && !isInteger(editconnection.rmwsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAMeridioDocumentManagementPortNumber") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.RecordsServer") + "\");\n"+ |
| " editconnection.rmwsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.metacartawsServerPort.value != \"\" && !isInteger(editconnection.metacartawsServerPort.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.PleaseSupplyAUserServicePortNumber") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.UserServiceServer") + "\");\n"+ |
| " editconnection.metacartawsServerPort.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| "\n"+ |
| " if (editconnection.userName.value == \"\" || editconnection.userName.value.indexOf(\"\\\") <= 0)\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.TheConnectionRequiresAValidMeridioUserNameOfTheForm") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.Credentials") + "\");\n"+ |
| " editconnection.userName.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.cachelifetime.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.CacheLifetimeCannotBeNull") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.Cache") + "\");\n"+ |
| " editconnection.cachelifetime.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.cachelifetime.value != \"\" && !isInteger(editconnection.cachelifetime.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.CacheLifetimeMustBeAnInteger") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.Cache") + "\");\n"+ |
| " editconnection.cachelifetime.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.cachelrusize.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.CacheLRUSizeCannotBeNull") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.Cache") + "\");\n"+ |
| " editconnection.cachelrusize.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| " if (editconnection.cachelrusize.value != \"\" && !isInteger(editconnection.cachelrusize.value))\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.CacheLRUSizeMustBeAnInteger") + "\");\n"+ |
| " SelectTab(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.Cache") + "\");\n"+ |
| " editconnection.cachelrusize.focus();\n"+ |
| " return false;\n"+ |
| " }\n"+ |
| "\n"+ |
| " return true;\n"+ |
| "}\n"+ |
| "\n"+ |
| "function DeleteCertificate(aliasName)\n"+ |
| "{\n"+ |
| " editconnection.keystorealias.value = aliasName;\n"+ |
| " editconnection.configop.value = \"Delete\";\n"+ |
| " postForm();\n"+ |
| "}\n"+ |
| "\n"+ |
| "function AddCertificate()\n"+ |
| "{\n"+ |
| " if (editconnection.certificate.value == \"\")\n"+ |
| " {\n"+ |
| " alert(\"" + Messages.getBodyJavascriptString(locale,"MeridioConnector.ChooseACertificateFile") + "\");\n"+ |
| " editconnection.certificate.focus();\n"+ |
| " }\n"+ |
| " else\n"+ |
| " {\n"+ |
| " editconnection.configop.value = \"Add\";\n"+ |
| " postForm();\n"+ |
| " }\n"+ |
| "}\n"+ |
| "\n"+ |
| "//-->\n"+ |
| "</script>\n" |
| ); |
| } |
| |
| /** Output the configuration body section. |
| * This method is called in the body section of the authority connector's configuration page. Its purpose is to present the required form elements for editing. |
| * The coder can presume that the HTML that is output from this configuration will be within appropriate <html>, <body>, and <form> tags. The name of the |
| * form is "editconnection". |
| *@param threadContext is the local thread context. |
| *@param out is the output to which any HTML should be sent. |
| *@param parameters are the configuration parameters, as they currently exist, for this connection being configured. |
| *@param tabName is the current tab name. |
| */ |
| @Override |
| public void outputConfigurationBody(IThreadContext threadContext, IHTTPOutput out, |
| Locale locale, ConfigParams parameters, String tabName) |
| throws ManifoldCFException, IOException |
| { |
| String dmwsServerProtocol = parameters.getParameter("DMWSServerProtocol"); |
| if (dmwsServerProtocol == null) |
| dmwsServerProtocol = "http"; |
| String rmwsServerProtocol = parameters.getParameter("RMWSServerProtocol"); |
| if (rmwsServerProtocol == null) |
| rmwsServerProtocol = "http"; |
| String metacartawsServerProtocol = parameters.getParameter("MetaCartaWSServerProtocol"); |
| if (metacartawsServerProtocol == null) |
| metacartawsServerProtocol = "http"; |
| |
| String dmwsServerName = parameters.getParameter("DMWSServerName"); |
| if (dmwsServerName == null) |
| dmwsServerName = ""; |
| String rmwsServerName = parameters.getParameter("RMWSServerName"); |
| if (rmwsServerName == null) |
| rmwsServerName = ""; |
| String metacartawsServerName = parameters.getParameter("MetaCartaWSServerName"); |
| if (metacartawsServerName == null) |
| metacartawsServerName = ""; |
| |
| String dmwsServerPort = parameters.getParameter("DMWSServerPort"); |
| if (dmwsServerPort == null) |
| dmwsServerPort = ""; |
| String rmwsServerPort = parameters.getParameter("RMWSServerPort"); |
| if (rmwsServerPort == null) |
| rmwsServerPort = ""; |
| String metacartawsServerPort = parameters.getParameter("MetaCartaWSServerPort"); |
| if (metacartawsServerPort == null) |
| metacartawsServerPort = ""; |
| |
| String dmwsLocation = parameters.getParameter("DMWSLocation"); |
| if (dmwsLocation == null) |
| dmwsLocation = "/DMWS/MeridioDMWS.asmx"; |
| String rmwsLocation = parameters.getParameter("RMWSLocation"); |
| if (rmwsLocation == null) |
| rmwsLocation = "/RMWS/MeridioRMWS.asmx"; |
| String metacartawsLocation = parameters.getParameter("MetaCartaWSLocation"); |
| if (metacartawsLocation == null) |
| metacartawsLocation = "/MetaCartaWebService/MetaCarta.asmx"; |
| |
| String dmwsProxyHost = parameters.getParameter("DMWSProxyHost"); |
| if (dmwsProxyHost == null) |
| dmwsProxyHost = ""; |
| String rmwsProxyHost = parameters.getParameter("RMWSProxyHost"); |
| if (rmwsProxyHost == null) |
| rmwsProxyHost = ""; |
| String metacartawsProxyHost = parameters.getParameter("MetaCartaWSProxyHost"); |
| if (metacartawsProxyHost == null) |
| metacartawsProxyHost = ""; |
| |
| String dmwsProxyPort = parameters.getParameter("DMWSProxyPort"); |
| if (dmwsProxyPort == null) |
| dmwsProxyPort = ""; |
| String rmwsProxyPort = parameters.getParameter("RMWSProxyPort"); |
| if (rmwsProxyPort == null) |
| rmwsProxyPort = ""; |
| String metacartawsProxyPort = parameters.getParameter("MetaCartaWSProxyPort"); |
| if (metacartawsProxyPort == null) |
| metacartawsProxyPort = ""; |
| |
| String userName = parameters.getParameter("UserName"); |
| if (userName == null) |
| userName = ""; |
| |
| String password = parameters.getObfuscatedParameter("Password"); |
| if (password == null) |
| password = ""; |
| |
| String meridioKeystore = parameters.getParameter("MeridioKeystore"); |
| IKeystoreManager localKeystore; |
| if (meridioKeystore == null) |
| localKeystore = KeystoreManagerFactory.make(""); |
| else |
| localKeystore = KeystoreManagerFactory.make("",meridioKeystore); |
| |
| String cacheLifetime = parameters.getParameter("CacheLifetimeMins"); |
| if (cacheLifetime == null) |
| cacheLifetime = "1"; |
| |
| String cacheLRUsize = parameters.getParameter("CacheLRUSize"); |
| if (cacheLRUsize == null) |
| cacheLRUsize = "1000"; |
| |
| out.print( |
| "<input name=\"configop\" type=\"hidden\" value=\"Continue\"/>\n" |
| ); |
| |
| // "Document Server" tab |
| if (tabName.equals(Messages.getString(locale,"MeridioConnector.DocumentServer"))) |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceServerProtocol") + "</nobr></td><td class=\"value\"><select name=\"dmwsServerProtocol\"><option value=\"http\" "+(dmwsServerProtocol.equals("http")?"selected=\"true\"":"")+">http</option><option value=\"https\" "+(dmwsServerProtocol.equals("https")?"selected=\"true\"":"")+">https</option></select></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceServerName") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"dmwsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsServerName)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceServerPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"dmwsServerPort\" value=\""+dmwsServerPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceLocation") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"dmwsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsLocation)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"separator\" colspan=\"2\"><hr/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceServerProxyHost") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"dmwsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsProxyHost)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.DocumentWebserviceServerProxyPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"dmwsProxyPort\" value=\""+dmwsProxyPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| else |
| { |
| // Hiddens for the Document Server tab. |
| out.print( |
| "<input type=\"hidden\" name=\"dmwsServerProtocol\" value=\""+dmwsServerProtocol+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"dmwsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsServerName)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"dmwsServerPort\" value=\""+dmwsServerPort+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"dmwsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsLocation)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"dmwsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(dmwsProxyHost)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"dmwsProxyPort\" value=\""+dmwsProxyPort+"\"/>\n" |
| ); |
| } |
| |
| // "Records Server" tab |
| if (tabName.equals(Messages.getString(locale,"MeridioConnector.RecordsServer"))) |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceServerProtocol") + "</nobr></td><td class=\"value\"><select name=\"rmwsServerProtocol\"><option value=\"http\" "+(rmwsServerProtocol.equals("http")?"selected=\"true\"":"")+">http</option><option value=\"https\" "+(rmwsServerProtocol.equals("https")?"selected=\"true\"":"")+">https</option></select></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceServerName") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"rmwsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsServerName)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceServerPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"rmwsServerPort\" value=\""+rmwsServerPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceLocation") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"rmwsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsLocation)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"separator\" colspan=\"2\"><hr/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceServerProxyHost") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"rmwsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsProxyHost)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.RecordWebserviceServerProxyPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"rmwsProxyPort\" value=\""+rmwsProxyPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| else |
| { |
| // Hiddens for the Records Server tab. |
| out.print( |
| "<input type=\"hidden\" name=\"rmwsServerProtocol\" value=\""+rmwsServerProtocol+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"rmwsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsServerName)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"rmwsServerPort\" value=\""+rmwsServerPort+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"rmwsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsLocation)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"rmwsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(rmwsProxyHost)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"rmwsProxyPort\" value=\""+rmwsProxyPort+"\"/>\n" |
| ); |
| } |
| |
| // The "User Service Server" tab |
| if (tabName.equals(Messages.getString(locale,"MeridioConnector.UserServiceServer"))) |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>User webservice server protocol:</nobr></td><td class=\"value\"><select name=\"metacartawsServerProtocol\"><option value=\"http\" "+(metacartawsServerProtocol.equals("http")?"selected=\"true\"":"")+">http</option><option value=\"https\" "+(metacartawsServerProtocol.equals("https")?"selected=\"true\"":"")+">https</option></select></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserWebserviceServerName") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"metacartawsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsServerName)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserWebserviceServerPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"metacartawsServerPort\" value=\""+metacartawsServerPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserWebserviceLocation") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"metacartawsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsLocation)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"separator\" colspan=\"2\"><hr/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserWebserviceServerProxyHost") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"64\" name=\"metacartawsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsProxyHost)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserWebserviceServerProxyPort") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"5\" name=\"metacartawsProxyPort\" value=\""+metacartawsProxyPort+"\"/></td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| else |
| { |
| // Hiddens for the User Service Server tab. |
| out.print( |
| "<input type=\"hidden\" name=\"metacartawsServerProtocol\" value=\""+metacartawsServerProtocol+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"metacartawsServerName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsServerName)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"metacartawsServerPort\" value=\""+metacartawsServerPort+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"metacartawsLocation\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsLocation)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"metacartawsProxyHost\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(metacartawsProxyHost)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"metacartawsProxyPort\" value=\""+metacartawsProxyPort+"\"/>\n" |
| ); |
| } |
| |
| // The "Credentials" tab |
| // Always pass the whole keystore as a hidden. |
| if (meridioKeystore != null) |
| { |
| out.print( |
| "<input type=\"hidden\" name=\"keystoredata\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(meridioKeystore)+"\"/>\n" |
| ); |
| } |
| |
| if (tabName.equals(Messages.getString(locale,"MeridioConnector.Credentials"))) |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.UserName") + "</nobr></td><td class=\"value\"><input type=\"text\" size=\"32\" name=\"userName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(userName)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.Password") + "</nobr></td><td class=\"value\"><input type=\"password\" size=\"32\" name=\"password\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(password)+"\"/></td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.SSLCertificateList") + "</nobr></td>\n"+ |
| " <td class=\"value\">\n"+ |
| " <input type=\"hidden\" name=\"keystorealias\" value=\"\"/>\n"+ |
| " <table class=\"displaytable\">\n" |
| ); |
| // List the individual certificates in the store, with a delete button for each |
| String[] contents = localKeystore.getContents(); |
| if (contents.length == 0) |
| { |
| out.print( |
| " <tr><td class=\"message\" colspan=\"2\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.NoCertificatesPresent") + "</nobr></td></tr>\n" |
| ); |
| } |
| else |
| { |
| int i = 0; |
| while (i < contents.length) |
| { |
| String alias = contents[i]; |
| String description = localKeystore.getDescription(alias); |
| if (description.length() > 128) |
| description = description.substring(0,125) + "..."; |
| out.print( |
| " <tr>\n"+ |
| " <td class=\"value\"><input type=\"button\" onclick='Javascript:DeleteCertificate(\""+org.apache.manifoldcf.ui.util.Encoder.attributeJavascriptEscape(alias)+"\")' alt=\"" + Messages.getAttributeString(locale,"MeridioConnector.DeleteCert") + org.apache.manifoldcf.ui.util.Encoder.attributeEscape(alias)+"\" value=\"Delete\"/></td>\n"+ |
| " <td>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(description)+"</td>\n"+ |
| " </tr>\n" |
| ); |
| i++; |
| } |
| } |
| |
| out.print( |
| " </table>\n"+ |
| " <input type=\"button\" onclick=\"Javascript:AddCertificate()\" alt=\"" + Messages.getAttributeString(locale,"MeridioConnector.AddCert") + "\" value=\"Add\"/> \n"+ |
| " Certificate: <input name=\"certificate\" size=\"50\" type=\"file\"/>\n"+ |
| " </td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| else |
| { |
| // Hiddens for the "Credentials" tab |
| out.print( |
| "<input type=\"hidden\" name=\"userName\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(userName)+"\"/>\n"+ |
| "<input type=\"hidden\" name=\"password\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(password)+"\"/>\n" |
| ); |
| } |
| |
| // "Cache" tab |
| if(tabName.equals(Messages.getString(locale,"MeridioConnector.Cache"))) |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.CacheLifetime") + "</nobr></td>\n"+ |
| " <td class=\"value\"><input type=\"text\" size=\"5\" name=\"cachelifetime\" value=\"" + org.apache.manifoldcf.ui.util.Encoder.attributeEscape(cacheLifetime) + "\"/> " + Messages.getBodyString(locale,"MeridioConnector.minutes") + "</td>\n"+ |
| " </tr>\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.CacheLRUSize") + "</nobr></td>\n"+ |
| " <td class=\"value\"><input type=\"text\" size=\"5\" name=\"cachelrusize\" value=\"" + org.apache.manifoldcf.ui.util.Encoder.attributeEscape(cacheLRUsize) + "\"/></td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| else |
| { |
| // Hiddens for "Cache" tab |
| out.print( |
| "<input type=\"hidden\" name=\"cachelifetime\" value=\"" + org.apache.manifoldcf.ui.util.Encoder.attributeEscape(cacheLifetime) + "\"/>\n"+ |
| "<input type=\"hidden\" name=\"cachelrusize\" value=\"" + org.apache.manifoldcf.ui.util.Encoder.attributeEscape(cacheLRUsize) + "\"/>\n" |
| ); |
| } |
| |
| } |
| |
| /** Process a configuration post. |
| * This method is called at the start of the authority connector's configuration page, whenever there is a possibility that form data for a connection has been |
| * posted. Its purpose is to gather form information and modify the configuration parameters accordingly. |
| * The name of the posted form is "editconnection". |
| *@param threadContext is the local thread context. |
| *@param variableContext is the set of variables available from the post, including binary file post information. |
| *@param parameters are the configuration parameters, as they currently exist, for this connection being configured. |
| *@return null if all is well, or a string error message if there is an error that should prevent saving of the connection (and cause a redirection to an error page). |
| */ |
| @Override |
| public String processConfigurationPost(IThreadContext threadContext, IPostParameters variableContext, |
| Locale locale, ConfigParams parameters) |
| throws ManifoldCFException |
| { |
| String dmwsServerProtocol = variableContext.getParameter("dmwsServerProtocol"); |
| if (dmwsServerProtocol != null) |
| parameters.setParameter("DMWSServerProtocol",dmwsServerProtocol); |
| String rmwsServerProtocol = variableContext.getParameter("rmwsServerProtocol"); |
| if (rmwsServerProtocol != null) |
| parameters.setParameter("RMWSServerProtocol",rmwsServerProtocol); |
| String metacartawsServerProtocol = variableContext.getParameter("metacartawsServerProtocol"); |
| if (metacartawsServerProtocol != null) |
| parameters.setParameter("MetaCartaWSServerProtocol",metacartawsServerProtocol); |
| |
| String dmwsServerName = variableContext.getParameter("dmwsServerName"); |
| if (dmwsServerName != null) |
| parameters.setParameter("DMWSServerName",dmwsServerName); |
| String rmwsServerName = variableContext.getParameter("rmwsServerName"); |
| if (rmwsServerName != null) |
| parameters.setParameter("RMWSServerName",rmwsServerName); |
| String metacartawsServerName = variableContext.getParameter("metacartawsServerName"); |
| if (metacartawsServerName != null) |
| parameters.setParameter("MetaCartaWSServerName",metacartawsServerName); |
| |
| String dmwsServerPort = variableContext.getParameter("dmwsServerPort"); |
| if (dmwsServerPort != null) |
| { |
| if (dmwsServerPort.length() > 0) |
| parameters.setParameter("DMWSServerPort",dmwsServerPort); |
| else |
| parameters.setParameter("DMWSServerPort",null); |
| } |
| String rmwsServerPort = variableContext.getParameter("rmwsServerPort"); |
| if (rmwsServerPort != null) |
| { |
| if (rmwsServerPort.length() > 0) |
| parameters.setParameter("RMWSServerPort",rmwsServerPort); |
| else |
| parameters.setParameter("RMWSServerPort",null); |
| } |
| String metacartawsServerPort = variableContext.getParameter("metacartawsServerPort"); |
| if (metacartawsServerPort != null) |
| { |
| if (metacartawsServerPort.length() > 0) |
| parameters.setParameter("MetaCartaWSServerPort",metacartawsServerPort); |
| else |
| parameters.setParameter("MetaCartaWSServerPort",null); |
| } |
| |
| String dmwsLocation = variableContext.getParameter("dmwsLocation"); |
| if (dmwsLocation != null) |
| parameters.setParameter("DMWSLocation",dmwsLocation); |
| String rmwsLocation = variableContext.getParameter("rmwsLocation"); |
| if (rmwsLocation != null) |
| parameters.setParameter("RMWSLocation",rmwsLocation); |
| String metacartawsLocation = variableContext.getParameter("metacartawsLocation"); |
| if (metacartawsLocation != null) |
| parameters.setParameter("MetaCartaWSLocation",metacartawsLocation); |
| |
| String dmwsProxyHost = variableContext.getParameter("dmwsProxyHost"); |
| if (dmwsProxyHost != null) |
| parameters.setParameter("DMWSProxyHost",dmwsProxyHost); |
| String rmwsProxyHost = variableContext.getParameter("rmwsProxyHost"); |
| if (rmwsProxyHost != null) |
| parameters.setParameter("RMWSProxyHost",rmwsProxyHost); |
| String metacartawsProxyHost = variableContext.getParameter("metacartawsProxyHost"); |
| if (metacartawsProxyHost != null) |
| parameters.setParameter("MetaCartaWSProxyHost",metacartawsProxyHost); |
| |
| String dmwsProxyPort = variableContext.getParameter("dmwsProxyPort"); |
| if (dmwsProxyPort != null && dmwsProxyPort.length() > 0) |
| parameters.setParameter("DMWSProxyPort",dmwsProxyPort); |
| String rmwsProxyPort = variableContext.getParameter("rmwsProxyPort"); |
| if (rmwsProxyPort != null && rmwsProxyPort.length() > 0) |
| parameters.setParameter("RMWSProxyPort",rmwsProxyPort); |
| String metacartawsProxyPort = variableContext.getParameter("metacartawsProxyPort"); |
| if (metacartawsProxyPort != null && metacartawsProxyPort.length() > 0) |
| parameters.setParameter("MetaCartaWSProxyPort",metacartawsProxyPort); |
| |
| String userName = variableContext.getParameter("userName"); |
| if (userName != null) |
| parameters.setParameter("UserName",userName); |
| |
| String password = variableContext.getParameter("password"); |
| if (password != null) |
| parameters.setObfuscatedParameter("Password",password); |
| |
| String configOp = variableContext.getParameter("configop"); |
| if (configOp != null) |
| { |
| String keystoreValue; |
| if (configOp.equals("Delete")) |
| { |
| String alias = variableContext.getParameter("keystorealias"); |
| keystoreValue = parameters.getParameter("MeridioKeystore"); |
| IKeystoreManager mgr; |
| if (keystoreValue != null) |
| mgr = KeystoreManagerFactory.make("",keystoreValue); |
| else |
| mgr = KeystoreManagerFactory.make(""); |
| mgr.remove(alias); |
| parameters.setParameter("MeridioKeystore",mgr.getString()); |
| } |
| else if (configOp.equals("Add")) |
| { |
| String alias = IDFactory.make(threadContext); |
| byte[] certificateValue = variableContext.getBinaryBytes("certificate"); |
| keystoreValue = parameters.getParameter("MeridioKeystore"); |
| IKeystoreManager mgr; |
| if (keystoreValue != null) |
| mgr = KeystoreManagerFactory.make("",keystoreValue); |
| else |
| mgr = KeystoreManagerFactory.make(""); |
| java.io.InputStream is = new java.io.ByteArrayInputStream(certificateValue); |
| String certError = null; |
| try |
| { |
| mgr.importCertificate(alias,is); |
| } |
| catch (Throwable e) |
| { |
| certError = e.getMessage(); |
| } |
| finally |
| { |
| try |
| { |
| is.close(); |
| } |
| catch (IOException e) |
| { |
| throw new ManifoldCFException(e.getMessage(),e); |
| } |
| } |
| |
| if (certError != null) |
| { |
| // Redirect to error page |
| return "Illegal certificate: "+certError; |
| } |
| parameters.setParameter("MeridioKeystore",mgr.getString()); |
| } |
| } |
| |
| String cacheLifetime = variableContext.getParameter("cachelifetime"); |
| if (cacheLifetime != null) |
| parameters.setParameter("CacheLifetimeMins",cacheLifetime); |
| |
| String cacheLRUsize = variableContext.getParameter("cachelrusize"); |
| if (cacheLRUsize != null) |
| parameters.setParameter("CacheLRUSize",cacheLRUsize); |
| |
| return null; |
| } |
| |
| /** View configuration. |
| * This method is called in the body section of the authority connector's view configuration page. Its purpose is to present the connection information to the user. |
| * The coder can presume that the HTML that is output from this configuration will be within appropriate <html> and <body> tags. |
| *@param threadContext is the local thread context. |
| *@param out is the output to which any HTML should be sent. |
| *@param parameters are the configuration parameters, as they currently exist, for this connection being configured. |
| */ |
| @Override |
| public void viewConfiguration(IThreadContext threadContext, IHTTPOutput out, |
| Locale locale, ConfigParams parameters) |
| throws ManifoldCFException, IOException |
| { |
| out.print( |
| "<table class=\"displaytable\">\n"+ |
| " <tr>\n"+ |
| " <td class=\"description\" colspan=\"1\"><nobr>" + Messages.getBodyString(locale,"MeridioConnector.Parameters") + "</nobr></td>\n"+ |
| " <td class=\"value\" colspan=\"3\">\n" |
| ); |
| Iterator iter = parameters.listParameters(); |
| while (iter.hasNext()) |
| { |
| String param = (String)iter.next(); |
| String value = parameters.getParameter(param); |
| if (param.length() >= "password".length() && param.substring(param.length()-"password".length()).equalsIgnoreCase("password")) |
| { |
| out.print( |
| " <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(param)+"=********</nobr><br/>\n" |
| ); |
| } |
| else if (param.length() >="keystore".length() && param.substring(param.length()-"keystore".length()).equalsIgnoreCase("keystore")) |
| { |
| IKeystoreManager kmanager = KeystoreManagerFactory.make("",value); |
| out.print( |
| " <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(param)+"=<"+Integer.toString(kmanager.getContents().length)+Messages.getBodyString(locale,"MeridioConnector.certificates") + "></nobr><br/>\n" |
| ); |
| } |
| else |
| { |
| out.print( |
| " <nobr>"+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(param)+"="+org.apache.manifoldcf.ui.util.Encoder.bodyEscape(value)+"</nobr><br/>\n" |
| ); |
| } |
| } |
| out.print( |
| " </td>\n"+ |
| " </tr>\n"+ |
| "</table>\n" |
| ); |
| } |
| |
| protected static StringSet emptyStringSet = new StringSet(); |
| |
| /** This is the cache object descriptor for cached access tokens from |
| * this connector. |
| */ |
| protected static class AuthorizationResponseDescription extends org.apache.manifoldcf.core.cachemanager.BaseDescription |
| { |
| /** The user name associated with the access tokens */ |
| protected String userName; |
| |
| // The server connection parameters |
| protected String DmwsURL; |
| protected String RmwsURL; |
| protected String wsURL; |
| protected String DMWSProxyHost; |
| protected String DMWSProxyPort; |
| protected String RMWSProxyHost; |
| protected String RMWSProxyPort; |
| protected String wsProxyHost; |
| protected String wsProxyPort; |
| protected String adminUserName; |
| protected String adminPassword; |
| |
| protected long responseLifetime; |
| |
| /** The expiration time */ |
| protected long expirationTime = -1; |
| |
| /** Constructor. */ |
| public AuthorizationResponseDescription(String userName, String DmwsURL, String RmwsURL, String wsURL, |
| String DMWSProxyHost, String DMWSProxyPort, String RMWSProxyHost, String RMWSProxyPort, |
| String wsProxyHost, String wsProxyPort, String adminUserName, String adminPassword, |
| long responseLifetime, int LRUsize) |
| { |
| super("MeridioAuthority",LRUsize); |
| this.userName = userName; |
| this.DmwsURL = DmwsURL; |
| this.RmwsURL = RmwsURL; |
| this.wsURL = wsURL; |
| this.DMWSProxyHost = DMWSProxyHost; |
| this.DMWSProxyPort = DMWSProxyPort; |
| this.RMWSProxyHost = RMWSProxyHost; |
| this.RMWSProxyPort = RMWSProxyPort; |
| this.wsProxyHost = wsProxyHost; |
| this.wsProxyPort = wsProxyPort; |
| this.adminUserName = adminUserName; |
| this.adminPassword = adminPassword; |
| this.responseLifetime = responseLifetime; |
| } |
| |
| /** Return the invalidation keys for this object. */ |
| public StringSet getObjectKeys() |
| { |
| return emptyStringSet; |
| } |
| |
| /** Get the critical section name, used for synchronizing the creation of the object */ |
| public String getCriticalSectionName() |
| { |
| return getClass().getName() + "-" + userName + "-" + DmwsURL + |
| "-" + RmwsURL+ "-" + wsURL + "-" + |
| ((DMWSProxyHost==null)?"":DMWSProxyHost) + "-" + |
| ((DMWSProxyPort==null)?"":DMWSProxyPort) + "-" + |
| ((RMWSProxyHost==null)?"":RMWSProxyHost) + "-" + |
| ((RMWSProxyPort==null)?"":RMWSProxyPort) + "-" + |
| ((wsProxyHost==null)?"":wsProxyHost) + "-" + |
| ((wsProxyPort==null)?"":wsProxyPort) + "-" + |
| adminUserName + "-" + adminPassword; |
| } |
| |
| /** Return the object expiration interval */ |
| public long getObjectExpirationTime(long currentTime) |
| { |
| if (expirationTime == -1) |
| expirationTime = currentTime + responseLifetime; |
| return expirationTime; |
| } |
| |
| public int hashCode() |
| { |
| return userName.hashCode() + DmwsURL.hashCode() + RmwsURL.hashCode() + wsURL.hashCode() + |
| ((DMWSProxyHost==null)?0:DMWSProxyHost.hashCode()) + |
| ((DMWSProxyPort==null)?0:DMWSProxyPort.hashCode()) + |
| ((RMWSProxyHost==null)?0:RMWSProxyHost.hashCode()) + |
| ((RMWSProxyPort==null)?0:RMWSProxyPort.hashCode()) + |
| ((wsProxyHost==null)?0:wsProxyHost.hashCode()) + |
| ((wsProxyPort==null)?0:wsProxyPort.hashCode()) + |
| adminUserName.hashCode() + adminPassword.hashCode(); |
| } |
| |
| public boolean equals(Object o) |
| { |
| if (!(o instanceof AuthorizationResponseDescription)) |
| return false; |
| AuthorizationResponseDescription ard = (AuthorizationResponseDescription)o; |
| return ard.userName.equals(userName) && |
| ard.DmwsURL.equals(DmwsURL) && ard.RmwsURL.equals(RmwsURL) && ard.wsURL.equals(wsURL) && |
| ((ard.DMWSProxyHost==null||DMWSProxyHost==null)?ard.DMWSProxyHost==DMWSProxyHost:ard.DMWSProxyHost.equals(DMWSProxyHost)) && |
| ((ard.DMWSProxyPort==null||DMWSProxyPort==null)?ard.DMWSProxyPort==DMWSProxyPort:ard.DMWSProxyPort.equals(DMWSProxyPort)) && |
| ((ard.RMWSProxyHost==null||RMWSProxyHost==null)?ard.RMWSProxyHost==RMWSProxyHost:ard.RMWSProxyHost.equals(RMWSProxyHost)) && |
| ((ard.RMWSProxyPort==null||RMWSProxyPort==null)?ard.RMWSProxyPort==RMWSProxyPort:ard.RMWSProxyPort.equals(RMWSProxyPort)) && |
| ((ard.wsProxyHost==null||wsProxyHost==null)?ard.wsProxyHost==wsProxyHost:ard.wsProxyHost.equals(wsProxyHost)) && |
| ((ard.wsProxyPort==null||wsProxyPort==null)?ard.wsProxyPort==wsProxyPort:ard.wsProxyPort.equals(wsProxyPort)) && |
| ard.adminUserName.equals(adminUserName) && ard.adminPassword.equals(adminPassword); |
| } |
| |
| } |
| |
| } |