Package org.wso2.carbon.identity.core.dao

Source Code of org.wso2.carbon.identity.core.dao.XMPPSettingsDAO

/*
* 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.core.dao;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.identity.base.IdentityException;
import org.wso2.carbon.identity.core.IdentityRegistryResources;
import org.wso2.carbon.identity.core.model.XMPPSettingsDO;
import org.wso2.carbon.registry.core.Collection;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.RegistryConstants;
import org.wso2.carbon.registry.core.Resource;
import org.wso2.carbon.registry.core.jdbc.utils.Transaction;
import org.wso2.carbon.registry.core.exceptions.RegistryException;

public class XMPPSettingsDAO extends AbstractDAO<XMPPSettingsDO> {

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

    /**
     * @param registry
     */
    public XMPPSettingsDAO(Registry registry) {
        this.registry = registry;
    }

    /**
     * @param resource
     * @return
     */
    protected XMPPSettingsDO resourceToObject(Resource resource) {

        XMPPSettingsDO xmppSettingsDO = null;

        if (resource != null) {
            xmppSettingsDO = new XMPPSettingsDO();
            xmppSettingsDO.setXmppServer(resource
                    .getProperty(IdentityRegistryResources.XMPP_SERVER));
            xmppSettingsDO.setXmppUserName(resource
                    .getProperty(IdentityRegistryResources.XMPP_USERNAME));
            xmppSettingsDO.setUserCode(resource
                    .getProperty(IdentityRegistryResources.XMPP_USERCODE));

            if (resource.getProperty(IdentityRegistryResources.XMPP_ENABLED).trim().equals("true")) {
                xmppSettingsDO.setXmppEnabled(true);
            } else {
                xmppSettingsDO.setXmppEnabled(false);
            }

            if (resource.getProperty(IdentityRegistryResources.XMPP_PIN_ENABLED).trim().equals(
                    "true")) {
                xmppSettingsDO.setPINEnabled(true);
            } else {
                xmppSettingsDO.setPINEnabled(false);
            }
        }

        return xmppSettingsDO;
    }

    /**
     * Adding XMPP Settings corresponding to a user
     *
     * @param userId
     * @param xmppServer
     * @param xmppUserName
     * @param xmppUserCode
     * @throws IdentityException
     */
    public void addXmppSettings(String userId, String xmppServer, String xmppUserName,
            String xmppUserCode, boolean enabled, boolean pinEnabled) throws IdentityException {

        String path = null;
        Resource resource = null;
        Collection userResource = null;
        String xmppEnabled = "false";
        String isPINEnabled = "false";

        if (enabled) {
            xmppEnabled = "true";
        }

        if (pinEnabled) {
            isPINEnabled = "true";
        }

        try {
            if (userId != null) {
                path = IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId;
            }

            if (registry.resourceExists(path)) {
                if (log.isInfoEnabled()) {
                    log.info("XMPP Settings already exists for user " + userId);
                }
                return;
            }

            resource = registry.newResource();
            resource.addProperty(IdentityRegistryResources.XMPP_SERVER, xmppServer);
            resource.addProperty(IdentityRegistryResources.XMPP_USERNAME, xmppUserName);
            resource.addProperty(IdentityRegistryResources.XMPP_USERCODE, xmppUserCode);
            resource.addProperty(IdentityRegistryResources.XMPP_ENABLED, xmppEnabled);
            resource.addProperty(IdentityRegistryResources.XMPP_PIN_ENABLED, isPINEnabled);
            boolean transactionStarted = Transaction.isStarted();
            try {

                if (!transactionStarted) {
                    registry.beginTransaction();
                }
                registry.put(path, resource);

                if (!registry.resourceExists(RegistryConstants.PROFILES_PATH  + userId)) {
                    userResource = registry.newCollection();
                    registry.put(RegistryConstants.PROFILES_PATH  + userId, userResource);
                } else {
                    //userResource = (Collection) registry.get(RegistryConstants.PROFILES_PATH  + userId);
                }

                registry.addAssociation(RegistryConstants.PROFILES_PATH  + userId, path,
                        IdentityRegistryResources.ASSOCIATION_USER_XMPP_SETTINGS);
                if (!transactionStarted) {
                    registry.commitTransaction();
                }
            } catch (Exception e) {
                if (!transactionStarted) {
                    registry.rollbackTransaction();
                }
                if (e instanceof RegistryException) {
                    throw (RegistryException)e;
                } else {
                    throw new IdentityException("Error occured while adding XMPP Settings", e);
                }
            }
            if (log.isInfoEnabled()) {
                log.info("XMPP Settings for " + userId + " added successfully.");
            }

        } catch (RegistryException e) {
            log.error("Error occured while adding XMPP Settings.", e);
            throw new IdentityException("Error occured while adding XMPP Settings.", e);

        }
    }

    /**
     * Update XMPP Settings of a user
     *
     * @param userId
     * @param xmppServer
     * @param xmppUserName
     * @param xmppUserCode
     * @throws IdentityException
     */
    public void updateXmppSettings(String userId, String xmppServer, String xmppUserName,
            String xmppUserCode, boolean enabled, boolean pinEnabled) throws IdentityException {
        String path = null;
        Resource resource = null;

        String xmppEnabled = "false";
        String isPINEnabled = "false";

        if (enabled) {
            xmppEnabled = "true";
        }

        if (pinEnabled) {
            isPINEnabled = "true";
        }

        try {
            if (userId != null) {
                path = IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId;
            }

            if (!registry.resourceExists(path)) {
                if (log.isInfoEnabled()) {
                    log.info("XMPP Settings does not exist for the user " + userId);
                }
                return;
            }

            resource = registry.get(path);
            resource.setProperty(IdentityRegistryResources.XMPP_SERVER, xmppServer);
            resource.setProperty(IdentityRegistryResources.XMPP_USERNAME, xmppUserName);
            resource.setProperty(IdentityRegistryResources.XMPP_USERCODE, xmppUserCode);
            resource.setProperty(IdentityRegistryResources.XMPP_ENABLED, xmppEnabled);
            resource.setProperty(IdentityRegistryResources.XMPP_PIN_ENABLED, isPINEnabled);

            registry.put(path, resource);

            if (log.isInfoEnabled()) {
                log.info("XMPP Settings are updated for the user " + userId);
            }

        } catch (RegistryException e) {
            log.error("Error occured while updating the XMPP Settings.", e);
            throw new IdentityException("Error occured while updating the XMPP Settings.", e);
        }
    }

    /**
     * retrieve XMPP Settings of a user by providing the userId
     *
     * @param userId
     * @return
     */
    public XMPPSettingsDO getXmppSettings(String userId) {

        XMPPSettingsDO xmppSettings = null;

        try {
            if (registry.resourceExists(IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId)) {
                xmppSettings = resourceToObject(registry
                        .get(IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId));
            }

        } catch (RegistryException e) {
            log.error("Cannot retrieve the XMPP Settings for the user " + userId, e);
        }
        return xmppSettings;
    }

    /**
     * Checks whether the given user has enabled XMPP based multifactor auth.
     *
     * @param userId
     * @return
     */
    public boolean isXmppSettingsEnabled(String userId) {

        boolean isEnabled = false;
        XMPPSettingsDO xmppSettings;
        try {
            if (registry.resourceExists(IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId)) {
                xmppSettings = resourceToObject(registry
                        .get(IdentityRegistryResources.XMPP_SETTINGS_ROOT + userId));
                isEnabled = xmppSettings.isXmppEnabled();
            }
        } catch (RegistryException e) {
            log.error("Error when checking the availability of the user " + userId, e);
        }

        return isEnabled;
    }

    public boolean hasXmppSettings(String userId) {
        boolean hasSettings = false;

        try {
            hasSettings = registry.resourceExists(IdentityRegistryResources.XMPP_SETTINGS_ROOT
                    + userId);
        } catch (RegistryException e) {
            log.error("Error when checking the availability of the user " + userId, e);
        }

        return hasSettings;
    }
}
TOP

Related Classes of org.wso2.carbon.identity.core.dao.XMPPSettingsDAO

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.