Package org.wso2.carbon.identity.provider

Source Code of org.wso2.carbon.identity.provider.XMPPConfigurationService

/*
* Copyright 2005-2007 WSO2, Inc. (http://wso2.com)
*
* Licensed 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.wso2.carbon.identity.provider;

import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.core.util.AdminServicesUtil;
import org.wso2.carbon.identity.base.IdentityException;
import org.wso2.carbon.identity.provider.dto.XMPPSettingsDTO;
import org.wso2.carbon.identity.provider.xmpp.XMPPConfigurator;
import org.wso2.carbon.user.core.UserCoreConstants;
import org.wso2.carbon.user.core.UserStoreManager;
import org.wso2.carbon.utils.ServerConstants;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
* This services has the functionality related to XMPP configuration functionality in the UI. To
* access this service, users should have 'login' permission. Only the functionality related to
* logged in user can be performed.
*/
public class XMPPConfigurationService {

    protected Log log = LogFactory.getLog(XMPPConfigurationService.class);

    /**
     * Add XMPP Settings
     *
     * @param dto
     * @return success of the operation
     * @throws IdentityProviderException
     */
    public boolean addUserXmppSettings(XMPPSettingsDTO dto) throws IdentityProviderException {
        String message = "Invalid parameters provided to addUserXmppSettings";
        if (dto == null) {
            throw new IllegalArgumentException(message);
        }else{
            if(dto.getUserId() == null){
                throw new IllegalArgumentException(message);   
            }
        }
        validateInputParameters(new String[]{dto.getUserId(), dto.getXmppServer(),
                dto.getXmppUserName(), dto.getUserCode()}, message);
        checkUserAuthorization(dto.getUserId(), "addUserXmppSettings");

        XMPPConfigurator provider = new XMPPConfigurator();
        provider.addXmppSettings(dto);
        return true;
    }
    /**
     * Edit XMPP Settings of a user Edit XMPP Settings.
     *
     * @param dto
     * @throws IdentityProviderException
     */
    public void editXmppSettings(XMPPSettingsDTO dto) throws IdentityProviderException {
        String message = "Invalid parameters provided to editXmppSettings";
        if (dto == null) {
            throw new IllegalArgumentException(message);
        }else{
            if(dto.getUserId() == null){
                throw new IllegalArgumentException(message);
            }
        }
        validateInputParameters(new String[]{dto.getUserId(), dto.getXmppServer(),
                dto.getXmppUserName(), dto.getUserCode()}, message);
        checkUserAuthorization(dto.getUserId(), "editXmppSettings");
        XMPPConfigurator provider = new XMPPConfigurator();
        provider.editXmppSettings(dto);
    }

    /**
     * Get XMPP Settings of a user
     *
     * @param userId
     * @return XmppSettingsDTO instance containing XMPP properties
     * @throws IdentityProviderException
     */
    public XMPPSettingsDTO getXmppSettings(String userId) throws IdentityProviderException {
        String message = "Invalid parameters provided to getXmppSettings";
        validateInputParameters(new String[]{userId}, message);
        checkUserAuthorization(userId, "getXmppSettings");
        XMPPConfigurator provider = new XMPPConfigurator();
        return provider.getXmppSettings(userId);
    }

    /**
     * Check whether the user has enabled XMPP based multi-factor authentication.
     *
     * @param userId
     * @return
     * @throws IdentityProviderException
     */
    public boolean isXMPPSettingsEnabled(String userId) throws IdentityProviderException {
        String message = "Invalid parameters provided to isXMPPSettingsEnabled";
        validateInputParameters(new String[]{userId}, message);
        checkUserAuthorization(userId, "isXMPPSettingsEnabled");
        XMPPConfigurator provider = new XMPPConfigurator();
        return provider.isXmppSettingsEnabled(userId);
    }

    /**
     * Whether the user has added XMPP settings.
     *
     * @param userId
     * @return
     * @throws IdentityProviderException
     */
    public boolean hasXMPPSettings(String userId) throws IdentityProviderException {
        String message = "Invalid parameters provided to hasXMPPSettings";
        validateInputParameters(new String[]{userId}, message);
        checkUserAuthorization(userId, "hasXMPPSettings");
        XMPPConfigurator provider = new XMPPConfigurator();
        return provider.hasXMPPSettings(userId);
    }

    /**
     * Get the IM Address of an user to populate the IM field of XMPP Configuration page.
     *
     * @param userID
     * @return
     * @throws IdentityException
     */
    public String getUserIM(String userId) throws Exception {
        String message = "Invalid parameters provided to hasXMPPSettings";
        validateInputParameters(new String[]{userId}, message);
        checkUserAuthorization(userId, "hasXMPPSettings");

        UserStoreManager userStore = AdminServicesUtil.getUserRealm().getUserStoreManager();
        String[] imClaim = {UserCoreConstants.ClaimTypeURIs.IM};
        Map<String, String> claimValues = userStore.getUserClaimValues(userId, imClaim,
                UserCoreConstants.DEFAULT_PROFILE);

        if (claimValues.containsKey(UserCoreConstants.ClaimTypeURIs.IM)) {
            return claimValues.get(UserCoreConstants.ClaimTypeURIs.IM);
        } else {
            return null;
        }
    }

    /**
     *
     * @param username
     * @param operation
     * @throws IdentityProviderException
     */
    private void checkUserAuthorization(String username, String operation)
            throws IdentityProviderException {
        MessageContext msgContext = MessageContext.getCurrentMessageContext();
        HttpServletRequest request = (HttpServletRequest) msgContext
                .getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
        HttpSession httpSession = request.getSession(false);
        if (httpSession != null) {
            String userName = (String) httpSession.getAttribute(ServerConstants.USER_LOGGED_IN);
            if (!username.equals(userName)) {
                throw new IdentityProviderException("Unauthorised action by user " + username
                        + " to access " + operation);
            }
            return;
        }
        throw new IdentityProviderException("Unauthorised action by user " + username
                + " to access " + operation);
    }

    /**
     *
     * @param params
     * @param message
     */
    private void validateInputParameters(String[] params, String message) {
        for (int i = 0; i < params.length; i++) {
            if (params[i] == null || params[i].trim().length() == 0) {
                if (log.isDebugEnabled()) {
                    log.debug(message);
                }
                throw new IllegalArgumentException(message);
            }
        }
    }
}
TOP

Related Classes of org.wso2.carbon.identity.provider.XMPPConfigurationService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.