Package com.comcast.cmb.common.persistence

Source Code of com.comcast.cmb.common.persistence.UserCassandraPersistence

/**
* Copyright 2012 Comcast Corporation
*
* 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 com.comcast.cmb.common.persistence;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.comcast.cmb.common.model.User;
import com.comcast.cmb.common.persistence.AbstractDurablePersistence.CMB_SERIALIZER;
import com.comcast.cmb.common.persistence.AbstractDurablePersistence.CmbColumnSlice;
import com.comcast.cmb.common.persistence.AbstractDurablePersistence.CmbRow;
import com.comcast.cmb.common.util.AuthUtil;
import com.comcast.cmb.common.util.CMBProperties;
import com.comcast.cmb.common.util.PersistenceException;
import com.comcast.cqs.util.CQSErrorCodes;

import org.apache.log4j.Logger;

/**
* Represents Cassandra persistence functionality of User Objects
* @author bwolf, vvenkatraman, baosen, michael, aseem
*/
public class UserCassandraPersistence implements IUserPersistence {

  private static final String ACCESS_KEY = "accessKey";
  private static final String ACCESS_SECRET = "accessSecret";
  private static final String USER_ID = "userId";
  private static final String HASH_PASSWORD = "hashPassword";
  private static final String IS_ADMIN = "isAdmin";
  private static final String USER_DESC = "description";
  //private static final String USER_NAME = "userName";
  private static final String COLUMN_FAMILY_USERS = "Users";
  private static final Logger logger = Logger.getLogger(UserCassandraPersistence.class);
 
  private static final AbstractDurablePersistence cassandraHandler = DurablePersistenceFactory.getInstance();

  public UserCassandraPersistence() {
  }

  @Override
  public User createUser(String userName, String password) throws PersistenceException {
    return this.createUser(userName, password, false);
  }
 
  @Override
  public User createUser(String userName, String password, Boolean isAdmin) throws PersistenceException {
    return this.createUser(userName, password, isAdmin, "");
  }
 
  @Override
  public User createUser(String userName, String password, Boolean isAdmin, String description) throws PersistenceException {
    User user = null;
   
    if (userName == null || userName.length() < 0 || userName.length() > 25) {
      logger.error("event=create_user error_code=invalid_user_name user_name=" + userName);
      throw new PersistenceException(CQSErrorCodes.InvalidRequest, "Invalid user name " + userName);
    }
   
    if (password == null || password.length() < 0 || password.length() > 25) {
      logger.error("event=create_user error_code=invalid_password");
      throw new PersistenceException(CQSErrorCodes.InvalidRequest, "Invalid password");
    }

    if (getUserByName(userName) != null) {
      logger.error("event=create_user error_code=user_already_exists user_name=" + userName);
      throw new PersistenceException(CQSErrorCodes.InvalidRequest, "User with user name " + userName + " already exists");
    }
   
    try {

      String userId = Long.toString(System.currentTimeMillis()).substring(1);
           
            String hashedPassword = AuthUtil.hashPassword(password);
            String accessSecret = AuthUtil.generateRandomAccessSecret();
            String accessKey = AuthUtil.generateRandomAccessKey();

      user = new User(userId, userName, hashedPassword, accessKey, accessSecret, isAdmin, description);
     
      Map<String, String> userDataMap = new HashMap<String, String>();
     
      userDataMap.put(USER_ID, user.getUserId());
      //userDataMap.put(USER_NAME, user.getUserName());
      userDataMap.put(HASH_PASSWORD, user.getHashPassword());
      userDataMap.put(ACCESS_SECRET, user.getAccessSecret());   
      userDataMap.put(ACCESS_KEY, user.getAccessKey());
      userDataMap.put(IS_ADMIN, user.getIsAdmin().toString());
      userDataMap.put(USER_DESC, user.getDescription());
     
      cassandraHandler.insertRow(AbstractDurablePersistence.CMB_KEYSPACE, user.getUserName(), COLUMN_FAMILY_USERS, userDataMap, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, null);
     
    } catch (Exception e) {
      logger.error("event=create_user", e);
      throw new PersistenceException(CQSErrorCodes.InvalidRequest, e.getMessage());
    }
   
    return user;
   
  }
 
  @Override
  public void deleteUser(String userName) throws PersistenceException {
    cassandraHandler.delete(AbstractDurablePersistence.CMB_KEYSPACE, COLUMN_FAMILY_USERS, userName, null, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER);
  }
 
  @Override
  public long getNumUserQueues(String userId) throws PersistenceException {
    return PersistenceFactory.getQueuePersistence().getNumberOfQueuesByUser(userId);
  }
   
  @Override
  public long getNumUserTopics(String userId) throws PersistenceException {
    return PersistenceFactory.getTopicPersistence().getNumberOfTopicsByUser(userId);
  }

  @Override
  public User getUserById(String userId) throws PersistenceException {

    List<CmbRow<String, String, String>> rows = cassandraHandler.readRowsByIndex(AbstractDurablePersistence.CMB_KEYSPACE, COLUMN_FAMILY_USERS, USER_ID, userId, 10, 10, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER)
   
    if (rows == null || rows.size() == 0) {
      return null;
    }
   
    User user = fillUserFromRow(rows.get(0).getKey(), rows.get(0).getColumnSlice());
    return user;
  }

  @Override
  public User getUserByName(String userName) throws PersistenceException {

    CmbColumnSlice<String, String> slice = cassandraHandler.readColumnSlice(AbstractDurablePersistence.CMB_KEYSPACE, COLUMN_FAMILY_USERS, userName, null, null, 10, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER);

    if (slice == null) {
      return null;
    }
   
    return fillUserFromRow(userName, slice);
  }


  @Override
  public User getUserByAccessKey(String accessKey) throws PersistenceException {

    List<CmbRow<String, String, String>> rows = cassandraHandler.readRowsByIndex(AbstractDurablePersistence.CMB_KEYSPACE, COLUMN_FAMILY_USERS, ACCESS_KEY, accessKey, 10, 10, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER)
   
    if (rows == null || rows.size() == 0) {
      return null;
    }
   
    User user = fillUserFromRow(rows.get(0).getKey(), rows.get(0).getColumnSlice());
   
    return user;
  }

  public List<User> getAllUsers() throws PersistenceException {
   
    List<CmbRow<String, String, String>> rows = cassandraHandler.readAllRows(AbstractDurablePersistence.CMB_KEYSPACE, COLUMN_FAMILY_USERS, 1000, 10, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER, CMB_SERIALIZER.STRING_SERIALIZER)
    List<User> userList = new ArrayList<User>();

    if (rows == null || rows.size() == 0) {
      return userList;
    }
   
    for (CmbRow<String, String, String> row : rows) {
   
      User user = fillUserFromRow(row.getKey(), row.getColumnSlice());
     
      if (user != null) {
        userList.add(user);
      }
    }
   
    return userList;
  }

  private User fillUserFromRow(String userName, CmbColumnSlice<String, String> slice) {
   
    if (slice == null || slice.size() == 0) {
      return null;
    }
   
    String userId = null;
   
    if (slice.getColumnByName(USER_ID) != null) {
      userId = slice.getColumnByName(USER_ID).getValue();
    } else {
      return null;
    }
   
    String accessKey = null;
   
    if (slice.getColumnByName(ACCESS_KEY) != null) {
      accessKey = slice.getColumnByName(ACCESS_KEY).getValue();
    } else {
      return null;
    }
   
    String hashPassword = null;
   
    if (slice.getColumnByName(HASH_PASSWORD) != null) {
      hashPassword = slice.getColumnByName(HASH_PASSWORD).getValue();
    } else {
      return null;
    }
   
    String accessSecret = null;
   
    if (slice.getColumnByName(ACCESS_SECRET) != null) {
      accessSecret = slice.getColumnByName(ACCESS_SECRET).getValue();
    } else {
      return null;
    }
   
    Boolean isAdmin = false;
   
    if (slice.getColumnByName(IS_ADMIN) != null) {
      isAdmin = Boolean.parseBoolean(slice.getColumnByName(IS_ADMIN).getValue());
    } else  if (userName.equals(CMBProperties.getInstance().getCNSUserName())) {
      isAdmin = true;
    } else {
      isAdmin = false;
    }
   
    String description = "";
   
    if (slice.getColumnByName(USER_DESC) != null) {
      description = slice.getColumnByName(USER_DESC).getValue();
    } else {
      description = "";
    }
   
    User user = new User(userId, userName, hashPassword, accessKey, accessSecret, isAdmin, description);
   
    return user;
  }

  @Override
  public User createDefaultUser() throws PersistenceException {
    return createUser(CMBProperties.getInstance().getCNSUserName(), CMBProperties.getInstance().getCNSUserPassword(), true);
  }

}

TOP

Related Classes of com.comcast.cmb.common.persistence.UserCassandraPersistence

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.