Package org.ejbca.ui.cli.hardtoken.importer

Source Code of org.ejbca.ui.cli.hardtoken.importer.StandardFileHardTokenImporter

/*************************************************************************
*                                                                       *
*  EJBCA: The OpenSource Certificate Authority                          *
*                                                                       *
*  This software 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; either         *
*  version 2.1 of the License, or any later version.                    *
*                                                                       *
*  See terms of license at gnu.org.                                     *
*                                                                       *
*************************************************************************/

package org.ejbca.ui.cli.hardtoken.importer;

import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import org.ejbca.core.model.SecConst;
import org.ejbca.core.model.hardtoken.HardTokenData;
import org.ejbca.core.model.hardtoken.types.EnhancedEIDHardToken;
import org.ejbca.core.model.hardtoken.types.HardToken;
import org.ejbca.core.model.hardtoken.types.SwedishEIDHardToken;

/**
* The standard file hard token importer, reading the a textfile line by line.
*
* The Importer have the following properties:
* separator   : indicates which column separator that should be used.
*
* columnorder : A list of columnnames separated by ',' of how the columns
* are ordered. Valid values are 'tokensn', 'pin1', 'pin2', 'bothpin', 'puk1', 'puk2', 'bothpuk'
* Example the line: 'columnorder=tokensn, pin1, pin2, bothpuk' will generate a
* hardtokendata with the tokensn from first column, basicpin from the secondcolumn,
* signaturepin from third and finally both puk codes from the forth column.
*
* tokentype : either 'enhancedeid' or 'swedisheid'. And inidcates what type of token that will be created.
*
*
* @author Philip Vendil 2007 apr 23
*
* @version $Id: StandardFileHardTokenImporter.java 5585 2008-05-01 20:55:00Z anatom $
*/

public class StandardFileHardTokenImporter extends FileReadHardTokenImporter {

  public static final String PROPERTY_SEPARATOR   = "separator";
  public static final String PROPERTY_COLUMNORDER = "columnorder";
  public static final String PROPERTY_TOKENTYPE   = "tokentype";
 
  private static final int COLUMN_TOKENSN = 1;
  private static final int COLUMN_PIN1    = 2;
  private static final int COLUMN_PIN2    = 3;
  private static final int COLUMN_BOTHPIN = 4;
  private static final int COLUMN_PUK1    = 5;
  private static final int COLUMN_PUK2    = 6;
  private static final int COLUMN_BOTHPUK = 7;
 
  private String columnSeparator;
  private int[] columns = null;
  private String hardTokenType = null;
 
  public void startImport(Properties props) throws IOException {   
    super.startImport(props);   
   
    getColumns(props);
   
    if(props.getProperty(PROPERTY_SEPARATOR) == null){
      throw new IOException("Error property " + PROPERTY_SEPARATOR + " not set.");
    }
    columnSeparator = props.getProperty(PROPERTY_SEPARATOR);
   
    if(props.getProperty(PROPERTY_TOKENTYPE) == null){
      throw new IOException("Error property " + PROPERTY_TOKENTYPE + " not set.");
    }   
    hardTokenType = props.getProperty(PROPERTY_TOKENTYPE);
    if(!hardTokenType.equalsIgnoreCase("enhancedeid") && !hardTokenType.equalsIgnoreCase("swedisheid")){
      throw new IOException("Error property " + PROPERTY_TOKENTYPE + " must have either the value 'enhancedeid' or 'swedisheid'.");
    }
  }

  private void getColumns(Properties props) throws IOException{
    if(props.getProperty("columnorder") == null){
      throw new IOException("Error the required property 'columnorder' isn't set.");
    }
   
    String[] c = props.getProperty(PROPERTY_COLUMNORDER).split(",");
    columns = new int[c.length];
    for(int i=0;i<c.length;i++){
      columns[i] = getColumn(c[i].trim());
    }
   
  }

  private int getColumn(String column) throws IOException {
    if(column.equalsIgnoreCase("tokensn")){
      return COLUMN_TOKENSN;
    }
    if(column.equalsIgnoreCase("pin1")){
      return COLUMN_PIN1;
    }
    if(column.equalsIgnoreCase("pin2")){
      return COLUMN_PIN2;
    }
    if(column.equalsIgnoreCase("bothpin")){
      return COLUMN_BOTHPIN;
    }
    if(column.equalsIgnoreCase("puk1")){
      return COLUMN_PUK1;
    }
    if(column.equalsIgnoreCase("puk2")){
      return COLUMN_PUK2;
    }
    if(column.equalsIgnoreCase("bothpuk")){
      return COLUMN_BOTHPUK;
    }
    throw new IOException("Error illegal column " + column + " in the " + PROPERTY_COLUMNORDER + " property.");
  }

  /**
   * @see org.ejbca.ui.cli.hardtoken.importer.FileReadHardTokenImporter#readHardTokenData()
   */
  public HardTokenData readHardTokenData() throws IOException {
    HardTokenData retval = null;
   
   
    String line = bufferedReader.readLine();
    if(line != null){
      String basicPIN = "";
      String signaturePIN = "";
      String basicPUK = "";
      String signaturePUK = "";
      String tokenSN = "";
     
     
      String[] lineColumns = line.split(columnSeparator);
      for(int i=0;i < lineColumns.length;i++){
        lineColumns[i] = lineColumns[i].trim();
        switch(columns[i]){
        case COLUMN_TOKENSN :
          tokenSN = lineColumns[i];
          break;
        case COLUMN_PIN1 :
          basicPIN = lineColumns[i];
          break;
        case COLUMN_PIN2 :
          signaturePIN = lineColumns[i];
          break;
        case COLUMN_BOTHPIN :
          basicPIN = lineColumns[i];
          signaturePIN = lineColumns[i];
          break;
        case COLUMN_PUK1:
          basicPUK = lineColumns[i];
          break;
        case COLUMN_PUK2 :
          signaturePUK = lineColumns[i];
          break;   
        case COLUMN_BOTHPUK :
          basicPUK = lineColumns[i];
          signaturePUK = lineColumns[i];
          break;   
        default:
          throw new IOException("Error reading column + " + i + " of hard token import data.");
        }
      }
      int tokenType = SecConst.TOKEN_SWEDISHEID;
      if(hardTokenType.equalsIgnoreCase("enhancedeid")){
        tokenType = SecConst.TOKEN_ENHANCEDEID;       
      }
      HardToken ht = getHardTokenType(basicPIN, basicPUK, signaturePIN, signaturePUK);
      retval = new HardTokenData(tokenSN,null,new Date(),new Date(), tokenType,null, ht,null,null);
    }
   
   
    return retval;
  }
 
 
  private HardToken getHardTokenType(String basicPIN, String basicPUK, String signaturePIN, String signaturePUK){
    if(hardTokenType.equalsIgnoreCase("enhancedeid")){
      return new EnhancedEIDHardToken(signaturePIN,signaturePUK,basicPIN,basicPUK,false,0);
    }
    return new SwedishEIDHardToken(basicPIN,basicPUK,signaturePIN,signaturePUK,0);
  }

}
TOP

Related Classes of org.ejbca.ui.cli.hardtoken.importer.StandardFileHardTokenImporter

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.