Package edu.wpi.cs.wpisuitetng.authentication

Source Code of edu.wpi.cs.wpisuitetng.authentication.BasicAuth

/*******************************************************************************
* Copyright (c) 2012 -- WPI Suite
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    twack
*******************************************************************************/

package edu.wpi.cs.wpisuitetng.authentication;

import java.util.logging.Level;
import java.util.logging.Logger;

import edu.wpi.cs.wpisuitetng.exceptions.AuthenticationException;

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

/**
* BasicAuth implementation of the Authenticator.
*   BasicAuth: "Authorization: Basic [Base64:]username:password"
* @author twack
*
*/
public class BasicAuth extends Authenticator {
  private static final Logger logger = Logger.getLogger(BasicAuth.class.getName());

  public BasicAuth()
  {
    super("BasicAuth");
  }
 
  @Override
  protected String[] parsePost(String post) throws AuthenticationException
  {   
    // format: ["Authorization:", "Basic", Base64-encoded credentials]
    String[] parts = post.split(" ");
   
    if(!isValidBasicAuth(parts))
    {
      logger.log(Level.WARNING, "Login attempted with invalid BasicAuth token");
      throw new AuthenticationException("The <" + this.getAuthType() + "> authentication token is invalid format");
    }
   
    byte[] decoded = Base64.decodeBase64(parts[1]);
   
    String[] credentials = (new String(decoded)).split(":"); // split decoded token username:password
   
    // check if the credential array has space for username and password elements.
    if(credentials.length != 2)
    {
      logger.log(Level.WARNING, "Login attempted with invalid BasicAuth token");
      throw new AuthenticationException("The <" + this.getAuthType() + "> token's encoded portion is missing a piece");
    }
   
    return credentials;
  }
 
  /**
   * Inspects the authString and determines if it is a valid BasicAuth string.
   *   Checks if it has all 3 parts, then checks the validity of the parts.
   * @param authString  the authorization string to be validated
   * @return  true if valid, false otherwise.
   */
  private boolean isValidBasicAuth(String[] authParts)
  {
    // check if the post string is in the correct format
    if((authParts.length != 2) || (!authParts[0].equalsIgnoreCase("Basic")))
    {
      return false;
    }
   
    // check if the credential section is encoded properly
    if(!Base64.isBase64(authParts[1]))
    {
      return false;
    }
   
    return true;
  }
 
  /**
   * Static utility for generating a BasicAuth token.
   *     Format: "Authorization: Basic " + [Base64Encoded]username:password
   * @param username
   * @param pass
   * @return  a String containing a BasicAuth token for the given parameters.
   */
  public static String generateBasicAuth(String username, String pass)
  {
    String authToken = "Basic ";
    String credentials = username + ":" + pass;
   
    authToken += Base64.encodeBase64String(credentials.getBytes());
   
    return authToken;
  }

}
TOP

Related Classes of edu.wpi.cs.wpisuitetng.authentication.BasicAuth

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.