Search in sources :

Example 71 with MalformedURLException

use of java.net.MalformedURLException in project OpenAM by OpenRock.

the class ToolServiceManager method loadResources.

/**
    * Sets the given resource path(s).
    */
private void loadResources(final String id) {
    ToolServiceClassLoader cl = getServiceClassLoader(id);
    try {
        List<String> resBundles = registry.getResourceBundles(id);
        String path = registry.getServiceHome(id).getFile();
        for (String resource : resBundles) {
            String urlPath = path + resource;
            File f = new File(urlPath);
            URL rpath = IOUtils.convertFileToURL(f);
            cl.addURLToPath(rpath);
        }
    } catch (MalformedURLException re) {
        Debug.getInstance(ToolConstants.DEBUG_NAME).error("ToolServiceManager.loadResources : " + "Malformed url exception", re);
    } catch (IOException rie) {
        Debug.getInstance(ToolConstants.DEBUG_NAME).error("ToolServiceManager.loadResources : " + "URL access i/o error", rie);
    } catch (Exception ex) {
        Debug.getInstance(ToolConstants.DEBUG_NAME).error("ToolServiceManager.loadResources : " + "Exception occured in loading resources", ex);
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) File(java.io.File) URL(java.net.URL) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException)

Example 72 with MalformedURLException

use of java.net.MalformedURLException in project OpenAM by OpenRock.

the class SAMLServiceManager method setValues.

// implemented as synchronized to preserve the event handling order.
private static synchronized void setValues() {
    if (ci == null) {
        // set the values as default
        Map newMap = new HashMap();
        newMap.put(SAMLConstants.ARTIFACT_TIMEOUT_NAME, new Integer(SAMLConstants.ARTIFACT_TIMEOUT_DEFAULT));
        newMap.put(SAMLConstants.ASSERTION_TIMEOUT_NAME, new Integer(SAMLConstants.ASSERTION_TIMEOUT_DEFAULT));
        newMap.put(SAMLConstants.ARTIFACT_NAME, SAMLConstants.ARTIFACT_NAME_DEFAULT);
        newMap.put(SAMLConstants.TARGET_SPECIFIER, SAMLConstants.TARGET_SPECIFIER_DEFAULT);
        newMap.put(SAMLConstants.ASSERTION_MAX_NUMBER_NAME, new Integer(SAMLConstants.ASSERTION_MAX_NUMBER_DEFAULT));
        newMap.put(SAMLConstants.CLEANUP_INTERVAL_NAME, new Integer(SAMLConstants.CLEANUP_INTERVAL_DEFAULT));
        newMap.put(SAMLConstants.SIGN_REQUEST, Boolean.valueOf(SAMLConstants.SIGN_REQUEST_DEFAULT));
        newMap.put(SAMLConstants.SIGN_RESPONSE, Boolean.valueOf(SAMLConstants.SIGN_RESPONSE_DEFAULT));
        newMap.put(SAMLConstants.SIGN_ASSERTION, Boolean.valueOf(SAMLConstants.SIGN_ASSERTION_DEFAULT));
        map = newMap;
    } else {
        // set the values
        try {
            Map newMap = new HashMap();
            Map attrs = ci.getConfiguration(null, null);
            // retrieve not before time skew period 
            Set values = (Set) attrs.get(SAMLConstants.NOTBEFORE_TIMESKEW_NAME);
            int value = SAMLConstants.NOTBEFORE_TIMESKEW_DEFAULT;
            if ((values != null) && (values.size() == 1)) {
                try {
                    value = Integer.parseInt((String) values.iterator().next());
                } catch (NumberFormatException nfe) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " not before time skew period value: " + value + ", using default.", nfe);
                    value = SAMLConstants.NOTBEFORE_TIMESKEW_DEFAULT;
                }
                if (value <= 0) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " not before time skew period value=" + value + ", using default.");
                    value = SAMLConstants.NOTBEFORE_TIMESKEW_DEFAULT;
                }
            }
            Integer newValue = new Integer(value);
            newMap.put(SAMLConstants.NOTBEFORE_TIMESKEW_NAME, newValue);
            // retrieve artifact timeout
            values = (Set) attrs.get(SAMLConstants.ARTIFACT_TIMEOUT_NAME);
            value = SAMLConstants.ARTIFACT_TIMEOUT_DEFAULT;
            if ((values != null) && (values.size() == 1)) {
                try {
                    value = Integer.parseInt((String) values.iterator().next());
                } catch (NumberFormatException nfe) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " artifact timeout value: " + value + ", using default.", nfe);
                    value = SAMLConstants.ARTIFACT_TIMEOUT_DEFAULT;
                }
                if (value <= 0) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " artifact timeout value=" + value + ", using default.");
                    value = SAMLConstants.ARTIFACT_TIMEOUT_DEFAULT;
                }
            }
            newValue = new Integer(value);
            newMap.put(SAMLConstants.ARTIFACT_TIMEOUT_NAME, newValue);
            // retrieve assertion timeout
            values = (Set) attrs.get(SAMLConstants.ASSERTION_TIMEOUT_NAME);
            value = SAMLConstants.ASSERTION_TIMEOUT_DEFAULT;
            if ((values != null) && (values.size() == 1)) {
                try {
                    value = Integer.parseInt((String) values.iterator().next());
                } catch (NumberFormatException nfe) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " assertion timeout value: " + value + ", using default.", nfe);
                    value = SAMLConstants.ASSERTION_TIMEOUT_DEFAULT;
                }
                if (value <= 0) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " assertion timeout value=" + value + ", using default.");
                    value = SAMLConstants.ASSERTION_TIMEOUT_DEFAULT;
                }
            }
            newValue = new Integer(value);
            newMap.put(SAMLConstants.ASSERTION_TIMEOUT_NAME, newValue);
            values = (Set) attrs.get(SAMLConstants.ASSERTION_MAX_NUMBER_NAME);
            value = SAMLConstants.ASSERTION_MAX_NUMBER_DEFAULT;
            if ((values != null) && (values.size() == 1)) {
                try {
                    value = Integer.parseInt((String) values.iterator().next());
                } catch (NumberFormatException nfe) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " assertion max number value: " + value + ", using default.", nfe);
                    value = SAMLConstants.ASSERTION_MAX_NUMBER_DEFAULT;
                }
                if (value < 0) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " assertion max number value=" + value + ", using default.");
                    value = SAMLConstants.ASSERTION_MAX_NUMBER_DEFAULT;
                }
            }
            newValue = new Integer(value);
            newMap.put(SAMLConstants.ASSERTION_MAX_NUMBER_NAME, newValue);
            values = (Set) attrs.get(SAMLConstants.CLEANUP_INTERVAL_NAME);
            value = SAMLConstants.CLEANUP_INTERVAL_DEFAULT;
            if ((values != null) && (values.size() == 1)) {
                try {
                    value = Integer.parseInt((String) values.iterator().next());
                } catch (NumberFormatException nfe) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " cleanup interval value: " + value + ", using default.", nfe);
                    value = SAMLConstants.CLEANUP_INTERVAL_DEFAULT;
                }
                if (value <= 0) {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager:invalid" + " cleanup interval value=" + value + ", using default.");
                    value = SAMLConstants.CLEANUP_INTERVAL_DEFAULT;
                }
            }
            newValue = new Integer(value);
            newMap.put(SAMLConstants.CLEANUP_INTERVAL_NAME, newValue);
            // retrieve the Artifact Name from the SAML saml config file 
            String artifactName = CollectionHelper.getMapAttr(attrs, SAMLConstants.ARTIFACT_NAME, SAMLConstants.ARTIFACT_NAME_DEFAULT);
            newMap.put(SAMLConstants.ARTIFACT_NAME, artifactName);
            values = (Set) attrs.get(SAMLConstants.NAME_ID_FORMAT_MAP);
            Map nameIDFormatAttrMap = null;
            if ((values != null) && (!values.isEmpty())) {
                for (Iterator iter = values.iterator(); iter.hasNext(); ) {
                    String str = (String) iter.next();
                    int index = str.indexOf("=");
                    if (index != -1) {
                        String nameIDFormat = str.substring(0, index).trim();
                        String attrName = str.substring(index + 1).trim();
                        if ((nameIDFormat.length() != 0) && (attrName.length() != 0)) {
                            if (nameIDFormatAttrMap == null) {
                                nameIDFormatAttrMap = new HashMap();
                            }
                            nameIDFormatAttrMap.put(nameIDFormat, attrName);
                        }
                    }
                }
                newMap.put(SAMLConstants.NAME_ID_FORMAT_MAP, nameIDFormatAttrMap);
            }
            values = (Set) attrs.get(SAMLConstants.ATTRIBUTE_MAP);
            Map attrMap = null;
            if ((values != null) && (!values.isEmpty())) {
                for (Iterator iter = values.iterator(); iter.hasNext(); ) {
                    String str = (String) iter.next();
                    int index = str.indexOf("=");
                    if (index != -1) {
                        String samlAttr = str.substring(0, index).trim();
                        String localAttr = str.substring(index + 1).trim();
                        if ((samlAttr.length() != 0) && (localAttr.length() != 0)) {
                            if (attrMap == null) {
                                attrMap = new HashMap();
                            }
                            attrMap.put(samlAttr, localAttr);
                        }
                    }
                }
                newMap.put(SAMLConstants.ATTRIBUTE_MAP, attrMap);
            }
            // get the targets which accept POST
            Set targets = (Set) attrs.get(SAMLConstants.POST_TO_TARGET_URLS);
            if ((targets == null) || (targets.size() == 0)) {
                SAMLUtilsCommon.debug.message("SAMLServiceManager: No POST " + "to targets found");
            } else {
                Set targetsNoProtocol = Collections.synchronizedSet(new HashSet());
                // strip off protocol from the URL
                Iterator it = targets.iterator();
                String targetString = null;
                while (it.hasNext()) {
                    try {
                        targetString = (String) it.next();
                        URL url = new URL(targetString);
                        String targetNoProtocol = new StringBuffer(url.getHost().toLowerCase()).append(":").append(String.valueOf(url.getPort())).append("/").append(url.getPath()).toString();
                        targetsNoProtocol.add(targetNoProtocol);
                    } catch (MalformedURLException me) {
                        SAMLUtilsCommon.debug.error("SAMLServiceManager: " + "Malformed Url in the POST to target " + "list, skipping entry:" + targetString);
                    }
                }
                if (targetsNoProtocol.size() > 0) {
                    newMap.put(SAMLConstants.POST_TO_TARGET_URLS, targetsNoProtocol);
                } else {
                    SAMLUtilsCommon.debug.error("SAMLServiceManager: All" + " POST to target URLs malformed");
                }
            }
            // retrieve site id and site issuer name list
            // get my server host and port info
            serverProtocol = SystemConfigurationUtil.getProperty(SAMLConstants.SERVER_PROTOCOL);
            serverHost = SystemConfigurationUtil.getProperty(SAMLConstants.SERVER_HOST);
            serverPort = SystemConfigurationUtil.getProperty(SAMLConstants.SERVER_PORT);
            serverURI = SystemConfigurationUtil.getProperty(SAMLConstants.SERVER_URI);
            String legacyId = serverProtocol + "://" + serverHost + ":" + serverPort;
            serverURL = legacyId + serverURI;
            String sb = serverURL;
            Map siteidMap = new HashMap();
            Map issuerNameMap = new HashMap();
            Map instanceMap = new HashMap();
            Set siteIDNameList = (Set) attrs.get(SAMLConstants.SITE_ID_ISSUER_NAME_LIST);
            if (siteIDNameList.size() == 0) {
                SAMLUtilsCommon.debug.error("SAMLServiceManager: No Site ID" + " or Issuer Name in the SAML service config.");
            } else {
                String entry = null;
                StringTokenizer tok1 = null;
                String instanceID = null;
                String siteID = null;
                String issuerName = null;
                String element = null;
                String key = null;
                Iterator iter = siteIDNameList.iterator();
                while (iter.hasNext()) {
                    entry = (String) iter.next();
                    // reset
                    instanceID = null;
                    siteID = null;
                    issuerName = null;
                    tok1 = new StringTokenizer(entry, "|");
                    while (tok1.hasMoreElements()) {
                        element = tok1.nextToken();
                        int pos = -1;
                        if ((pos = element.indexOf("=")) == -1) {
                            SAMLUtilsCommon.debug.error("SAMLSManager: " + "wrong format: " + element);
                            break;
                        }
                        int nextpos = pos + 1;
                        if (nextpos >= element.length()) {
                            SAMLUtilsCommon.debug.error("SAMLSManager: " + "wrong format: " + element);
                            break;
                        }
                        key = element.substring(0, pos);
                        if (key.equalsIgnoreCase(SAMLConstants.INSTANCEID)) {
                            instanceID = element.substring(nextpos);
                        } else if (key.equalsIgnoreCase(SAMLConstants.SITEID)) {
                            siteID = element.substring(nextpos);
                        } else if (key.equalsIgnoreCase(SAMLConstants.ISSUERNAME)) {
                            issuerName = element.substring(nextpos);
                        } else {
                            SAMLUtilsCommon.debug.error("SAMLSManager: " + "wrong format: " + element);
                        }
                    }
                    if (instanceID == null) {
                        SAMLUtilsCommon.debug.error("SAMLServiceManager: " + "missing instanceID:" + entry);
                        break;
                    }
                    boolean thisSite = instanceID.equalsIgnoreCase(sb) || instanceID.equalsIgnoreCase(legacyId);
                    if (siteID != null) {
                        siteID = SAMLUtilsCommon.getDecodedSourceIDString(siteID);
                        if (siteID != null) {
                            siteidMap.put(instanceID, siteID);
                            instanceMap.put(siteID, instanceID);
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("SAMLSMangr: " + "add instanceID: " + instanceID + ", serverURL=" + sb + ", legacy serverURL=" + legacyId + ", isthissite=" + thisSite);
                            }
                            if (thisSite) {
                                newMap.put(SAMLConstants.SITE_ID, siteID);
                            }
                        }
                    }
                    if (issuerName != null) {
                        issuerNameMap.put(instanceID, issuerName);
                        if (thisSite) {
                            newMap.put(SAMLConstants.ISSUER_NAME, issuerName);
                        }
                    }
                }
            // end of looping all the entries in the list
            }
            // set default site id
            if (!siteidMap.containsKey(sb) && !siteidMap.containsKey(legacyId)) {
                String siteID = SAMLSiteID.generateSourceID(sb);
                if (SAMLUtilsCommon.debug.warningEnabled()) {
                    SAMLUtilsCommon.debug.warning("SAMLSManager: site " + sb + " not configured, create new " + siteID);
                }
                if (siteID != null) {
                    siteID = SAMLUtilsCommon.getDecodedSourceIDString(siteID);
                    if (siteID != null) {
                        siteidMap.put(sb, siteID);
                        instanceMap.put(siteID, sb);
                        newMap.put(SAMLConstants.SITE_ID, siteID);
                    } else {
                        SAMLUtilsCommon.debug.error("Missing Site ID.");
                    }
                }
            }
            // set default issuer name
            if (!issuerNameMap.containsKey(sb) && !issuerNameMap.containsKey(legacyId)) {
                if (SAMLUtilsCommon.debug.warningEnabled()) {
                    SAMLUtilsCommon.debug.warning("SAMLSManager:issuer for " + sb + " not configured, set to " + sb);
                }
                issuerNameMap.put(sb, sb);
                newMap.put(SAMLConstants.ISSUER_NAME, sb);
            }
            newMap.put(SAMLConstants.SITE_ID_LIST, siteidMap);
            newMap.put(SAMLConstants.INSTANCE_LIST, instanceMap);
            newMap.put(SAMLConstants.ISSUER_NAME_LIST, issuerNameMap);
            Boolean signRequest = Boolean.valueOf(CollectionHelper.getMapAttr(attrs, SAMLConstants.SIGN_REQUEST, SAMLConstants.SIGN_REQUEST_DEFAULT));
            newMap.put(SAMLConstants.SIGN_REQUEST, signRequest);
            Boolean signResponse = Boolean.valueOf(CollectionHelper.getMapAttr(attrs, SAMLConstants.SIGN_RESPONSE, SAMLConstants.SIGN_RESPONSE_DEFAULT));
            newMap.put(SAMLConstants.SIGN_RESPONSE, signResponse);
            Boolean signAssertion = Boolean.valueOf(CollectionHelper.getMapAttr(attrs, SAMLConstants.SIGN_ASSERTION, SAMLConstants.SIGN_ASSERTION_DEFAULT));
            newMap.put(SAMLConstants.SIGN_ASSERTION, signAssertion);
            //retrieve target name 
            String targetName = CollectionHelper.getMapAttr(attrs, SAMLConstants.TARGET_SPECIFIER, SAMLConstants.TARGET_SPECIFIER_DEFAULT);
            newMap.put(SAMLConstants.TARGET_SPECIFIER, targetName);
            //retrieve the partner URL list 
            Set soapRevList = Collections.synchronizedSet(new HashSet());
            soapRevList = (Set) attrs.get(SAMLConstants.PARTNER_URLS);
            if (soapRevList.size() == 0) {
                if (SAMLUtilsCommon.debug.messageEnabled()) {
                    SAMLUtilsCommon.debug.message("SAMLServiceManager: " + "No entry in partner url config!");
                }
            } else {
                Set _Sites = Collections.synchronizedSet(new HashSet());
                Map _Soaps = Collections.synchronizedMap(new HashMap());
                Object[] soapObjects = soapRevList.toArray();
                int size = soapObjects.length;
                String e = null;
                String element = null;
                for (int i = 0; i < size; i++) {
                    String _siteID = null;
                    String _samlUrl = null;
                    String postUrl = null;
                    String host = null;
                    int port = -1;
                    String _destID = null;
                    String _soapRevUrl = null;
                    String _authType = null;
                    String _user = null;
                    String basic_auth_user = null;
                    String basic_auth_passwd = null;
                    String _certAlias = null;
                    String preferVersion = null;
                    PartnerAccountMapper _partnerAccountMapper = null;
                    SiteAttributeMapper _siteAttributeMapper = null;
                    PartnerSiteAttributeMapper _partnerSiteAttributeMapper = null;
                    ConsumerSiteAttributeMapper consumerSiteAttrMapper = null;
                    NameIdentifierMapper niMapper = null;
                    AttributeMapper attrMapper = null;
                    ActionMapper actionMapper = null;
                    String _issuer = null;
                    Set hostSet = null;
                    Set origHostSet = null;
                    e = (String) soapObjects[i];
                    // retrieve the trusted server list
                    if (e.toUpperCase().indexOf(SAMLConstants.SOURCEID) == -1) {
                        SAMLUtilsCommon.debug.error("Ignore this trusted " + "site since SourceID is absent:" + e);
                        continue;
                    }
                    StringTokenizer tok1 = new StringTokenizer(e, "|");
                    while (tok1.hasMoreElements()) {
                        // break on "|"
                        element = tok1.nextToken();
                        if (SAMLUtilsCommon.debug.messageEnabled()) {
                            SAMLUtilsCommon.debug.message("SAMLSManager:" + " PartnerUrl List:" + element);
                        }
                        //manually break on "=" since sourceid may contain "="
                        int pos = -1;
                        //ignore the attribute which not include "="
                        if ((pos = element.indexOf("=")) == -1) {
                            SAMLUtilsCommon.debug.error("SAMLSManager:" + " illegal format of PartnerUrl:" + element);
                            break;
                        }
                        int nextpos = pos + 1;
                        //ignore the attribute which is like "SOAPUrl="  
                        if (nextpos >= element.length()) {
                            break;
                        }
                        String key = element.substring(0, pos);
                        if (key.equalsIgnoreCase(SAMLConstants.SOURCEID)) {
                            _destID = SAMLUtilsCommon.getDecodedSourceIDString(element.substring(nextpos));
                        } else if (key.equalsIgnoreCase(SAMLConstants.TARGET)) {
                            _siteID = element.substring(nextpos);
                        } else if (key.equalsIgnoreCase(SAMLConstants.SAMLURL)) {
                            _samlUrl = element.substring(nextpos).trim();
                        } else if (key.equalsIgnoreCase(SAMLConstants.POSTURL)) {
                            postUrl = element.substring(nextpos).trim();
                        } else if (key.equalsIgnoreCase(SAMLConstants.SOAPUrl)) {
                            _soapRevUrl = element.substring(nextpos).trim();
                        } else if (key.equalsIgnoreCase(SAMLConstants.AUTHTYPE)) {
                            _authType = element.substring(nextpos);
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("authtype =" + _authType);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.UID)) {
                            _user = element.substring(nextpos);
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("user = " + _user);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.AUTH_UID)) {
                            basic_auth_user = element.substring(nextpos);
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("basic auth user=" + basic_auth_user);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.AUTH_PASSWORD)) {
                            basic_auth_passwd = SAMLUtilsCommon.decodePassword(element.substring(nextpos));
                        } else if (key.equalsIgnoreCase(SAMLConstants.ACCOUNTMAPPER)) {
                            try {
                                Object temp = Class.forName(element.substring(nextpos)).newInstance();
                                if (temp instanceof PartnerAccountMapper) {
                                    _partnerAccountMapper = (PartnerAccountMapper) temp;
                                } else {
                                    SAMLUtilsCommon.debug.error("SAMLServiceManager:Invalid account " + "mapper");
                                }
                            } catch (InstantiationException ie) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ie);
                            } catch (IllegalAccessException ae) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ae);
                            } catch (ClassNotFoundException ce) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ce);
                                _partnerAccountMapper = null;
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.PARTNERACCOUNTMAPPER)) {
                            // for backward compatibility
                            try {
                                _partnerAccountMapper = (PartnerAccountMapper) Class.forName(element.substring(nextpos)).newInstance();
                            } catch (InstantiationException ie) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ie);
                            } catch (IllegalAccessException ae) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ae);
                            } catch (ClassNotFoundException ce) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ce);
                                _partnerAccountMapper = null;
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.CERTALIAS)) {
                            _certAlias = element.substring(nextpos);
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("certAlias = " + _certAlias);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.SITEATTRIBUTEMAPPER)) {
                            try {
                                Object temp = Class.forName(element.substring(nextpos)).newInstance();
                                if (temp instanceof SiteAttributeMapper) {
                                    _siteAttributeMapper = (SiteAttributeMapper) temp;
                                } else if (temp instanceof PartnerSiteAttributeMapper) {
                                    _partnerSiteAttributeMapper = (PartnerSiteAttributeMapper) temp;
                                } else if (temp instanceof ConsumerSiteAttributeMapper) {
                                    consumerSiteAttrMapper = (ConsumerSiteAttributeMapper) temp;
                                } else {
                                    SAMLUtilsCommon.debug.error("SAMLServiceManager:Invalid site " + "attribute mapper");
                                }
                            } catch (InstantiationException ie) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ie);
                            } catch (IllegalAccessException ae) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ae);
                            } catch (ClassNotFoundException ce) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ce);
                                _siteAttributeMapper = null;
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.PARTNERSITEATTRIBUTEMAPPER)) {
                            try {
                                Object temp = Class.forName(element.substring(nextpos)).newInstance();
                                if (temp instanceof PartnerSiteAttributeMapper) {
                                    _partnerSiteAttributeMapper = (PartnerSiteAttributeMapper) temp;
                                } else if (temp instanceof ConsumerSiteAttributeMapper) {
                                    consumerSiteAttrMapper = (ConsumerSiteAttributeMapper) temp;
                                } else {
                                    SAMLUtilsCommon.debug.error("SAMLServiceManager:Invalid site " + "partner attribute mapper");
                                }
                            } catch (InstantiationException ie) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ie);
                            } catch (IllegalAccessException ae) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ae);
                            } catch (ClassNotFoundException ce) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ce);
                                _partnerSiteAttributeMapper = null;
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.NAMEIDENTIFIERMAPPER)) {
                            try {
                                niMapper = (NameIdentifierMapper) Class.forName(element.substring(nextpos)).newInstance();
                            } catch (Exception ex) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:", ex);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.ATTRIBUTEMAPPER)) {
                            try {
                                attrMapper = (AttributeMapper) Class.forName(element.substring(nextpos)).newInstance();
                            } catch (Exception ex) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ex);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.ACTIONMAPPER)) {
                            try {
                                actionMapper = (ActionMapper) Class.forName(element.substring(nextpos)).newInstance();
                            } catch (Exception ex) {
                                SAMLUtilsCommon.debug.error("SAMLSManager:" + ex);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.ISSUER)) {
                            _issuer = element.substring(nextpos).trim();
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("issuer = " + _issuer);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.HOST_LIST)) {
                            origHostSet = new HashSet();
                            hostSet = new HashSet();
                            /* calling InetAddress.getAllByName here has
                                    two purposes:
                                        - emmit any errors if there is any
                                        - call the getAllByName method to init
                                        the jvm caching
                                */
                            StringTokenizer st = new StringTokenizer(element.substring(nextpos), ",");
                            InetAddress[] addr = null;
                            while (st.hasMoreTokens()) {
                                String token = st.nextToken().trim();
                                try {
                                    addr = InetAddress.getAllByName(token);
                                    for (int m = 0, length = addr.length; m < length; m++) {
                                        hostSet.add(addr[m].getHostAddress());
                                    }
                                } catch (Exception ne) {
                                    if (SAMLUtilsCommon.debug.warningEnabled()) {
                                        SAMLUtilsCommon.debug.warning("SAML Service" + " Manager: possible wrong " + "hostname in the host list.");
                                    }
                                }
                                //add here anyways, since
                                // it could be an alias name too
                                hostSet.add(token);
                                origHostSet.add(token);
                            }
                            if (SAMLUtilsCommon.debug.messageEnabled()) {
                                SAMLUtilsCommon.debug.message("hostSet = " + hostSet);
                            }
                        } else if (key.equalsIgnoreCase(SAMLConstants.VERSION)) {
                            preferVersion = element.substring(nextpos);
                        }
                    }
                    //provide default auth type 
                    if (_authType == null) {
                        _authType = SAMLConstants.NOAUTH;
                    }
                    // provide default AccountMapper
                    if (_partnerAccountMapper == null) {
                        try {
                            _partnerAccountMapper = (PartnerAccountMapper) Class.forName(DEFAULT_PARTNER_ACCOUNT_MAPPER).newInstance();
                        } catch (Exception ex0) {
                        // ignore
                        }
                    }
                    // provide default AttributeMapper
                    if (attrMapper == null) {
                        attrMapper = new DefaultAttributeMapper();
                    }
                    // default version 
                    if (preferVersion == null || preferVersion.length() == 0) {
                        try {
                            preferVersion = SystemConfigurationUtil.getProperty(SAMLConstants.SAML_PROTOCOL_VERSION).trim();
                        } catch (Exception pe) {
                            preferVersion = SAMLConstants.PROTOCOL_VERSION_1_0;
                        }
                    }
                    // create truseted server set 
                    if (_destID == null || _destID.length() == 0) {
                        SAMLUtilsCommon.debug.error("Ignore this trusted " + "site since SourceID is misconfigured: " + e);
                    } else {
                        if (_siteID == null || _siteID.length() == 0 || ((_samlUrl == null || _samlUrl.length() == 0) && (postUrl == null || postUrl.length() == 0))) {
                            SAMLUtilsCommon.debug.warning("Target or both" + " SAMLUrl and POSTUrl are misconfigured:" + e);
                        }
                        if (_siteID != null && _siteID.length() != 0) {
                            StringTokenizer tok2 = new StringTokenizer(_siteID, ",");
                            while (tok2.hasMoreElements()) {
                                String el = tok2.nextToken();
                                if (SAMLUtilsCommon.debug.messageEnabled()) {
                                    SAMLUtilsCommon.debug.message("SAMLServiceManager:target= " + el);
                                }
                                // break the target url to host and port 
                                StringTokenizer pt = new StringTokenizer(el, ":");
                                if (pt.countTokens() == 2) {
                                    host = pt.nextToken().trim();
                                    port = Integer.parseInt(pt.nextToken().trim());
                                } else {
                                    host = el;
                                    port = -1;
                                }
                            }
                            SiteEntry server = new SiteEntry(host, port, _destID, _samlUrl, postUrl, preferVersion);
                            _Sites.add(server);
                        }
                        // create the soap receiver map                      
                        SOAPEntry server = new SOAPEntry(_destID, _soapRevUrl, _authType, _user, basic_auth_user, basic_auth_passwd, _certAlias, _partnerAccountMapper, _siteAttributeMapper, _partnerSiteAttributeMapper, consumerSiteAttrMapper, niMapper, attrMapper, actionMapper, _issuer, origHostSet, preferVersion);
                        _Soaps.put(_destID, server);
                        if (_issuer != null) {
                            _Soaps.put(_issuer, server);
                        }
                    }
                }
                newMap.put(SAMLConstants.TRUSTED_SERVER_LIST, _Sites);
                newMap.put(SAMLConstants.PARTNER_URLS, _Soaps);
            }
            map = newMap;
        } catch (Exception e) {
            SAMLUtilsCommon.debug.error("SAMLServiceManager.setValues:" + " Exception:", e);
        }
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) HashSet(java.util.HashSet) Set(java.util.Set) HashMap(java.util.HashMap) URL(java.net.URL) ActionMapper(com.sun.identity.saml.plugins.ActionMapper) Iterator(java.util.Iterator) PartnerAccountMapper(com.sun.identity.saml.plugins.PartnerAccountMapper) DefaultAttributeMapper(com.sun.identity.saml.plugins.DefaultAttributeMapper) DefaultNameIdentifierMapper(com.sun.identity.saml.plugins.DefaultNameIdentifierMapper) NameIdentifierMapper(com.sun.identity.saml.plugins.NameIdentifierMapper) ConsumerSiteAttributeMapper(com.sun.identity.saml.plugins.ConsumerSiteAttributeMapper) SiteAttributeMapper(com.sun.identity.saml.plugins.SiteAttributeMapper) PartnerSiteAttributeMapper(com.sun.identity.saml.plugins.PartnerSiteAttributeMapper) HashSet(java.util.HashSet) PartnerSiteAttributeMapper(com.sun.identity.saml.plugins.PartnerSiteAttributeMapper) NumberFormatException(java.lang.NumberFormatException) ConfigurationException(com.sun.identity.plugin.configuration.ConfigurationException) MalformedURLException(java.net.MalformedURLException) DataStoreProviderException(com.sun.identity.plugin.datastore.DataStoreProviderException) NumberFormatException(java.lang.NumberFormatException) StringTokenizer(java.util.StringTokenizer) ConsumerSiteAttributeMapper(com.sun.identity.saml.plugins.ConsumerSiteAttributeMapper) SiteAttributeMapper(com.sun.identity.saml.plugins.SiteAttributeMapper) AttributeMapper(com.sun.identity.saml.plugins.AttributeMapper) DefaultAttributeMapper(com.sun.identity.saml.plugins.DefaultAttributeMapper) PartnerSiteAttributeMapper(com.sun.identity.saml.plugins.PartnerSiteAttributeMapper) ConsumerSiteAttributeMapper(com.sun.identity.saml.plugins.ConsumerSiteAttributeMapper) HashMap(java.util.HashMap) Map(java.util.Map) InetAddress(java.net.InetAddress)

Example 73 with MalformedURLException

use of java.net.MalformedURLException in project OpenAM by OpenRock.

the class SAMLUtils method equalURL.

/**
     * Compares two URLs to see if they are equal. Two URLs are equal if
     * they have same protocol, host, port and path (case ignored).
     * Note : the method is provided to avoid URL.equals() call which requires
     * name lookup. Name lookup is a blocking operation and very expensive
     * if the hostname could not be resolved.
     *
     * @return true if the URLs are equal, false otherwise.
     */
private static boolean equalURL(String url1, String url2) {
    try {
        URL u1 = new URL(url1);
        URL u2 = new URL(url2);
        int port1 = u1.getPort();
        if (port1 == -1) {
            port1 = u1.getDefaultPort();
        }
        int port2 = u2.getPort();
        if (port2 == -1) {
            port2 = u2.getDefaultPort();
        }
        if ((u1.getProtocol().equalsIgnoreCase(u2.getProtocol())) && (u1.getHost().equalsIgnoreCase(u2.getHost())) && (port1 == port2) && (u1.getPath().equalsIgnoreCase(u2.getPath()))) {
            return true;
        } else {
            return false;
        }
    } catch (MalformedURLException m) {
        debug.message("Error in SAMLUtils.equalURL", m);
        return false;
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) URL(java.net.URL)

Example 74 with MalformedURLException

use of java.net.MalformedURLException in project OpenAM by OpenRock.

the class IDPSSOUtil method getACSurl.

/**
     * Returns the assertion consumer service (ACS) URL for the entity.
     * @param entityId entity ID of provider
     * @param realm realm of the provider
     * @param wreply the ACSURL supplied by the requestor. If supplied, this is 
     * checked against the URLs registered for the provider.
     * @return assertion consumer service (ACS) URL for the entity.
     */
public static String getACSurl(String entityId, String realm, String wreply) throws WSFederationMetaException {
    WSFederationMetaManager metaManager = WSFederationUtils.getMetaManager();
    FederationElement sp = metaManager.getEntityDescriptor(realm, entityId);
    if (wreply == null) {
        // Get first ACS URL for this SP
        return metaManager.getTokenIssuerEndpoint(sp);
    } else {
        // Just return first TokenIssuerEndpoint in the Federation
        for (Object o : sp.getAny()) {
            if (o instanceof TokenIssuerEndpointElement) {
                try {
                    URL replyUrl = new URL(wreply);
                    URL thisUrl = new URL(((TokenIssuerEndpointElement) o).getAddress().getValue());
                    if (replyUrl.equals(thisUrl))
                        return wreply;
                } catch (MalformedURLException mue) {
                    return null;
                }
            }
        }
    }
    return null;
}
Also used : WSFederationMetaManager(com.sun.identity.wsfederation.meta.WSFederationMetaManager) MalformedURLException(java.net.MalformedURLException) FederationElement(com.sun.identity.wsfederation.jaxb.wsfederation.FederationElement) TokenIssuerEndpointElement(com.sun.identity.wsfederation.jaxb.wsfederation.TokenIssuerEndpointElement) URL(java.net.URL)

Example 75 with MalformedURLException

use of java.net.MalformedURLException in project OpenAM by OpenRock.

the class RedirectUrlValidator method isRedirectUrlValid.

/**
     * Validates the provided redirect URL against the collection of valid goto URL domains found based on the
     * configuration info.
     *
     * @param url The URL that needs to be validated. May be null.
     * @param configInfo The necessary information about the configuration to determine the collection of valid goto
     * URL domains. May not be null.
     * @return <code>true</code> if the provided URL is valid, <code>false</code> otherwise.
     */
public boolean isRedirectUrlValid(final String url, final T configInfo) {
    if (url == null || url.isEmpty()) {
        return false;
    }
    final Collection<String> patterns = domainExtractor.extractValidDomains(configInfo);
    if (DEBUG.messageEnabled()) {
        DEBUG.message("Validating goto URL " + url + " against patterns:\n" + patterns);
    }
    if (url.length() > MAX_URL_LENGTH) {
        return false;
    }
    try {
        final URI uri = new URI(url);
        // Both Absolute and scheme relative URLs should be validated.
        if (!uri.isAbsolute() && !url.startsWith("//")) {
            return true;
        }
        if (uri.getScheme() != null && !uri.getScheme().equals("http") && !uri.getScheme().equals("https")) {
            return false;
        }
    } catch (final URISyntaxException urise) {
        if (DEBUG.messageEnabled()) {
            DEBUG.message("The goto URL " + url + " is not a valid URI", urise);
        }
        return false;
    }
    if (patterns == null || patterns.isEmpty()) {
        if (DEBUG.messageEnabled()) {
            DEBUG.message("There are no patterns to validate the URL against, the goto URL is considered valid");
        }
        return true;
    }
    final URLPatternMatcher patternMatcher = new URLPatternMatcher();
    try {
        return patternMatcher.match(url, patterns, true);
    } catch (MalformedURLException murle) {
        DEBUG.error("An error occurred while validating goto URL: " + url, murle);
        return false;
    }
}
Also used : URLPatternMatcher(com.sun.identity.shared.whitelist.URLPatternMatcher) MalformedURLException(java.net.MalformedURLException) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI)

Aggregations

MalformedURLException (java.net.MalformedURLException)3838 URL (java.net.URL)2885 IOException (java.io.IOException)1194 File (java.io.File)910 ArrayList (java.util.ArrayList)372 InputStream (java.io.InputStream)367 HttpURLConnection (java.net.HttpURLConnection)295 URISyntaxException (java.net.URISyntaxException)270 URI (java.net.URI)239 InputStreamReader (java.io.InputStreamReader)226 BufferedReader (java.io.BufferedReader)208 HashMap (java.util.HashMap)200 URLClassLoader (java.net.URLClassLoader)168 Map (java.util.Map)166 URLConnection (java.net.URLConnection)148 FileNotFoundException (java.io.FileNotFoundException)137 Matcher (java.util.regex.Matcher)132 Test (org.junit.Test)129 UnsupportedEncodingException (java.io.UnsupportedEncodingException)119 Pattern (java.util.regex.Pattern)113