/* * Copyright (c) 2012-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.security.authentication; import com.emc.storageos.db.client.model.StorageOSUserDAO; import com.emc.storageos.db.client.model.StringSet; import org.springframework.util.CollectionUtils; import java.io.*; import java.security.Principal; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * StorageOS user profile information. */ public class StorageOSUser extends StorageOSUserDAO implements Principal, Serializable { private Set<String> _roles = null; private String _token = null; private String _proxyToken = null; private boolean _isProxied = false; public StorageOSUser(String username, String tenantId) { _userName = username; _tenantId = tenantId; _isProxied = false; } public StorageOSUser(StorageOSUserDAO dao) { _userName = dao.getUserName(); _tenantId = dao.getTenantId(); _attributes = dao.getAttributes(); _groups = dao.getGroups(); _local = dao.getIsLocal(); _id = dao.getId(); _isProxied = false; } @Override public String getName() { return _userName; } public void setToken(final String token) { _token = token; } public String getToken() { return _token; } public void setProxyToken(final String ptoken) { _proxyToken = ptoken; } public String getProxyToken() { return _proxyToken; } public Set<String> getRoles() { return (_roles == null) ? new HashSet<String>() : Collections.unmodifiableSet(_roles); } public void setRoles(Set<String> roles) { _roles = roles; } public void addRole(String role) { if (_roles == null) { _roles = new HashSet<String>(); } _roles.add(role); } public boolean isLocal() { return _local; } public boolean isProxied() { return _isProxied; } public void setIsProxied(boolean proxied) { _isProxied = proxied; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(" user: "); sb.append(_userName); if (isProxied()) { sb.append(" proxied "); } sb.append("; tenantId: "); sb.append(_tenantId); sb.append("; roles: "); sb.append(setToString(_roles)); sb.append("; groups: "); sb.append(setToString(_groups)); sb.append("; attributes: "); sb.append(setToString(_attributes)); return sb.toString(); } /** * return the string representation of a string set. * * @param stringSet * @return */ private String setToString(Set stringSet) { if (CollectionUtils.isEmpty(stringSet)) { return "[]"; } StringBuilder sb = new StringBuilder(); sb.append("["); for (Object item : stringSet) { sb.append((String) item + ","); } sb.append("]"); return sb.toString(); } /** * clone StorageOSUser * * @return */ public StorageOSUser clone() { StorageOSUser clone = new StorageOSUser(this._userName, this._tenantId); clone._local = this._local; clone._isProxied = this._isProxied; clone._id = this._id; clone._proxyToken = this._proxyToken; clone._token = this._token; // attributes StringSet attributes = new StringSet(); Iterator<String> itAttr = _attributes.iterator(); while (itAttr.hasNext()) { attributes.add(itAttr.next()); } clone._attributes = attributes; // groups StringSet groups = new StringSet(); Iterator<String> itGroup = _groups.iterator(); while (itGroup.hasNext()) { groups.add(itGroup.next()); } clone._groups = groups; return clone; } public byte[] serialize() throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); try { out.writeObject(this); } finally { out.close(); } return bos.toByteArray(); } public static StorageOSUser deserialize(byte[] data) throws IOException, ClassNotFoundException { Object obj = null; ByteArrayInputStream bis = new ByteArrayInputStream(data); ObjectInputStream in = new ObjectInputStream(bis); try { obj = in.readObject(); } finally { in.close(); } return (StorageOSUser) obj; } }