com.abiquo.abiserver.business.authentication.TokenUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.abiquo.abiserver.business.authentication.TokenUtils.java

Source

/**
 * Abiquo community edition
 * cloud management application for hybrid clouds
 * Copyright (C) 2008-2010 - Abiquo Holdings S.L.
 *
 * This application is free software; you can redistribute it and/or
 * modify it under the terms of the GNU LESSER GENERAL PUBLIC
 * LICENSE as published by the Free Software Foundation under
 * version 3 of the License
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * LESSER GENERAL PUBLIC LICENSE v.3 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

package com.abiquo.abiserver.business.authentication;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

/**
 * Utility methods to manipulate authentication tokens.
 * 
 * @author ibarrera
 */
public class TokenUtils {
    /**
     * Creates the authentication token signature.
     * 
     * @param tokenExpiryTime The token expiration time.
     * @param username The token user name.
     * @param password The token password.
     * @param key The token key.
     * @return The token.
     */
    public static String makeTokenSignature(final long tokenExpiryTime, final String username,
            final String password) {
        return DigestUtils.md5Hex(username + ":" + tokenExpiryTime + ":" + password + ":abiquo-auth-key");
    }

    /**
     * Returns an array containing each token field
     * <ul>
     * <li>[0] => The token signature.</li>
     * <li>[1] => The token user name.</li>
     * <li>[2] => The token expiration time.</li>
     * </ul>
     * 
     * @param token The token.
     * @return The token fields.
     * @throws Exception
     */
    public static String[] getTokenFields(final String token) throws Exception {
        String base64Token = token;
        for (int j = 0; j < base64Token.length() % 4; j++) {
            base64Token = base64Token + "=";
        }

        if (!Base64.isArrayByteBase64(base64Token.getBytes())) {
            throw new Exception("Token is not Base64 encoded");
        }

        String decodedToken = new String(Base64.decodeBase64(base64Token.getBytes()));
        return decodedToken.split(":");
    }

    /**
     * Checks if the token is expired.
     * 
     * @param tokenExpiryTime The token expiration time.
     * @return A boolean indicating if the token is expired.
     */
    public static boolean isTokenExpired(final long tokenExpiryTime) {
        return tokenExpiryTime < System.currentTimeMillis();
    }

    /**
     * Get the user from the token.
     * 
     * @param token The token.
     * @return The user.
     */
    public static String getTokenUser(final String[] token) {
        return token[0];
    }

    /**
     * Get the expiration from the token.
     * 
     * @param token The token.
     * @return The expiration.
     */
    public static long getTokenExpiration(final String[] token) {
        return new Long(token[1]).longValue();
    }

    /**
     * Get the signature from the token.
     * 
     * @param token The token.
     * @return The signature.
     */
    public static String getTokenSignature(final String[] token) {
        return token[2];
    }

}