/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.security.geo; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.model.StorageOSUserDAO; import com.emc.storageos.db.client.model.Token; import com.emc.storageos.geomodel.TokenResponse; import com.emc.storageos.security.authentication.TokenKeyGenerator.TokenKeysBundle; import com.emc.storageos.security.SerializerUtils; /** * Utility class to build a TokenResponse using Token, TokenKeyBundle and StorageOSUserDAO * objects as inputs */ public class TokenResponseBuilder { private static final Logger log = LoggerFactory.getLogger(TokenResponseBuilder.class); /** * Creates a TokenResponse from a token and user dao object * * @param token * @param user * @return */ public static TokenResponse buildTokenResponse(Token token, StorageOSUserDAO user, TokenKeysBundle tokenBundle) { TokenResponse response = new TokenResponse(); try { if (user != null) { response.setUserDAO(SerializerUtils.serializeAsBase64EncodedString(user)); } if (token != null) { response.setToken(SerializerUtils.serializeAsBase64EncodedString(token)); } if (tokenBundle != null) { response.setTokenKeysBundle(SerializerUtils.serializeAsBase64EncodedString(tokenBundle)); } } catch (IOException e) { log.error("Could not serialize/encode TokenReponse artifacts", e); return null; } return response; } /** * Creates a TokenResponseArtifacts holder for items retrieved in a TokenResponse. * Today, Token and StorageOSUserDAO objects * * @param response * @return */ public static TokenResponseArtifacts parseTokenResponse(TokenResponse response) { String userEncoded = response.getUserDAO(); String tokenEncoded = response.getToken(); String tokenKeysBundleEncoded = response.getTokenKeysBundle(); StorageOSUserDAO user = null; Token token = null; TokenKeysBundle tokenKeysBundle = null; if (StringUtils.isNotBlank(userEncoded)) { try { user = (StorageOSUserDAO) SerializerUtils.deserialize(userEncoded); } catch (UnsupportedEncodingException e) { log.error("Could not decode user: ", e); } catch (Exception e) { log.error("Could not deserialize user: ", e); } } if (StringUtils.isNotBlank(tokenEncoded)) { try { token = (Token) SerializerUtils.deserialize(tokenEncoded); } catch (UnsupportedEncodingException e) { log.error("Could not decode token: ", e); } catch (Exception e) { log.error("Could not deserialize token: ", e); } } if (StringUtils.isNotBlank(tokenKeysBundleEncoded)) { try { tokenKeysBundle = (TokenKeysBundle) SerializerUtils.deserialize(tokenKeysBundleEncoded); } catch (UnsupportedEncodingException e) { log.error("Could not decode token keys bundle: ", e); } catch (Exception e) { log.error("Could not deserialize token keys bundle: ", e); } } return new TokenResponseBuilder.TokenResponseArtifacts(user, token, tokenKeysBundle); } /** * Wrapper class to hold user record, token, and token keys * */ public static class TokenResponseArtifacts { private StorageOSUserDAO user; private Token token; private TokenKeysBundle bundle; public TokenResponseArtifacts(StorageOSUserDAO u, Token t, TokenKeysBundle b) { user = u; token = t; bundle = b; } public StorageOSUserDAO getUser() { return user; } public Token getToken() { return token; } public TokenKeysBundle getTokenKeysBundle() { return bundle; } } }