Package org.kapott.hbci.tools

Source Code of org.kapott.hbci.tools.InitAndTest$MyCallback

/*  $Id: InitAndTest.java,v 1.1 2011/05/04 22:37:45 willuhn Exp $

    This file is part of HBCI4Java
    Copyright (C) 2001-2008  Stefan Palme

    HBCI4Java is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    HBCI4Java 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.kapott.hbci.tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Properties;

import org.kapott.hbci.callback.HBCICallbackConsole;
import org.kapott.hbci.manager.HBCIHandler;
import org.kapott.hbci.manager.HBCIUtils;
import org.kapott.hbci.passport.AbstractHBCIPassport;
import org.kapott.hbci.passport.HBCIPassport;

/** <p>Tool zum Initialisieren und Testen eines HBCI-Passports.  Dieses Tool dient
    einerseits als Vorlage f�r die Benutzung von <em>HBCI4Java</em> in eigenen Anwendungen und
    gleichzeitig als Tool, um ein HBCI-Passport einzurichten und zu initialisieren.</p><p>
    F�r das Einrichten und Initialisieren eines HBCI-Passports gibt es keine
    speziellen Funktionen, statt dessen wird ein Passport einfach so benutzt, als
    ob es schon vorhanden w�re. Alle fehlenden Daten holt sich <em>HBCI4Java</em> selbstst�ndig
    entweder �ber den Callback-Mechanismus vom Anwender oder durch spezielle
    HBCI-Dialoge von der Bank.</p><p>
    Aus diesem Grund kann dieses Tool sowohl zum Testen eines schon existierenden Passports
    wie auch zum Einrichten eines neuen Passports verwendet werden, ohne etwas am
    Programmcode zu �ndern. In der gleichen Weise wie dieses Tool kann auch eine
    komplexere Anwendung <em>HBCI4Java</em> benutzen, in diesem Tool fehlt nur das Hinzuf�gen
    von Gesch�ftsvorf�llen zum HBCI-Dialog.</p><p>
    Beim Start des Programmes mit
    <code>java&nbsp;org.kapott.hbci.tools.InitAndTest</code>
    werden verschiedene Parameter �ber die Standardeingabe abgefragt.
    Konkret handelt es sich dabei um alle HBCI-Parameter, die f�r die Initialisierung
    eines Passports und dessen Verwendung ben�tigt werden. Die HBCI-Parameter werden mit
    den eingegeben Werten initialisiert. Anschlie�end wird ein Passport-Objekt erzeugt
    und ein "leerer" HBCI-Dialog (d.h. einer, der keine Gesch�ftsvorf�lle enth�lt) ausgef�hrt.</p><p>
    Bei diesem Vorgang sorgt <em>HBCI4Java</em> selbst daf�r, dass alle relevanten Daten vorhanden sind
    bzw. initialisiert diese entspechend. L�uft das Programm fehlerfrei durch, so ist sichergestellt,
    dass das benutzte Passport (=Sicherheitsmedium) korrekt initialisiert und funktionsbereit
    ist.</p> */
public final class InitAndTest
{
    private static class MyCallback
        extends HBCICallbackConsole
    {
        @Override
        public synchronized void status(HBCIPassport passport, int statusTag,
                                        Object[] o)
        {
            // disable status output
        }

    }
 
    private static HBCIPassport passport;
    private static HBCIHandler  hbciHandle;
   
    public static void main(String[] args)
        throws IOException
    {
        try {
            HBCIUtils.init(null,new MyCallback());
            readBasicParams();

            readPassportParams();
            passport=AbstractHBCIPassport.getInstance();

            readHBCIVersion();
            readActions();
           
            if (HBCIUtils.getParam("action.resetBPD").equals("1")) {
              passport.clearBPD();
            }
            if (HBCIUtils.getParam("action.resetUPD").equals("1")) {
              passport.clearUPD();
            }
            hbciHandle=new HBCIHandler(HBCIUtils.getParam("client.passport.hbciversion.default"),
                                       passport);

            /* HBCIExecStatus ret=hbciHandle.execute();
            System.out.println("ExecStatus");
            System.out.println(ret.toString());
            System.out.println("ExecStatusEnd");
            System.out.println("ExecStatusError");
            System.out.println(ret.getErrorString());
            System.out.println("ExecStatusErrorEnd"); */
           
            printSupportedGVs(hbciHandle);
           
            System.out.println();
            System.out.println("finished.");
            System.out.println();
        } finally {
            if (hbciHandle!=null) {
                hbciHandle.close();
            } else if (passport!=null) {
                passport.close();
            }
        }
    }
   
    private static void readParam(String paramName,String def,String descr)
        throws IOException
    {
        System.out.println();
        System.out.println(descr);
        System.out.println("press ENTER to accept the default; '-' to set no value for this parameter");
        System.out.print(paramName+" ["+def+"]: ");
        System.out.flush();
       
        String value=new BufferedReader(new InputStreamReader(System.in)).readLine();
       
        if (value.equals("-")) {
            value=null;
        } else if (value.length()==0) {
            value=def;
        }
       
        if (value!=null) {
            System.out.println(paramName+"="+value);
            HBCIUtils.setParam(paramName,value);
        }
    }
   
    private static void readBasicParams()
        throws IOException
    {
        readParam("client.connection.localPort",null,"local tcp-port to be used for outgoing connections");
        readParam("comm.standard.socks.server",null,"SOCKS server to be used for outgoing connections (will be ignored for PIN/TAN)");
        readParam("log.loglevel.default","5","loglevel for HBCI4Java-messages (from 0(no logging) to 5(really heavy)");
        readParam("kernel.rewriter",HBCIUtils.getParam("kernel.rewriter"),"rewriter modules to be activated");
    }
   
    private static void readPassportParams()
        throws IOException
    {
        readParam("client.passport.default",null,"enter type of media you have (Anonymous, DDV, RDHNew, RDH (deprecated), PinTan, SIZRDHFile or RDHXFile)");
        String type=HBCIUtils.getParam("client.passport.default","");
       
        if (type.equals("Anonymous")) {
            readParam("client.passport.Anonymous.filename","passport_anon.dat","filename to be used for your HBCI4Java keyfile.");
            readParam("client.passport.Anonymous.init","1","never change this value!");
        } else if (type.equals("DDV")) {
            readParam("client.passport.DDV.path","./","the path where to store a file to cash information about your HBCI account");
            readParam("client.passport.DDV.libname.ddv","/home/kleiner/projects/hbci2/chipcard/lib/libhbci4java-card-linux.so","the name of the library needed to use the CTAPI interface of your chipcard terminal");
            readParam("client.passport.DDV.libname.ctapi","/usr/lib/libctapi-cyberjack.so","the name of the library containing the CTAPI interface to your chipcard terminal");
            readParam("client.passport.DDV.port","1","the port to which your chipcard terminal is connected (in most cases 1, 0 or 2)");
            readParam("client.passport.DDV.ctnumber","0","the logical number for your chipcard terminal, can be 0 in most cases");
            readParam("client.passport.DDV.usebio","0","use the biometric interface of Reiner-SCT chipcard terminals (0 or 1)");
            readParam("client.passport.DDV.softpin","0","use the keypad of your chipcard terminal (0) or your PC-keyboard (1) to enter the PIN for your HBCI chipcard");
            readParam("client.passport.DDV.entryidx","1","enter the index, which HBCI account stored on the card should be used");
        } else if (type.equals("RDH")) {
            readParam("client.passport.RDH.filename","my_passport.dat","filename to be used for your HBCI4Java keyfile. DONT LOOSE THIS FILE!");
            readParam("client.passport.RDH.init","1","never change this value!");
        } else if (type.equals("RDHNew")) {
            readParam("client.passport.RDHNew.filename","my_passport.dat","filename to be used for your HBCI4Java keyfile. DONT LOOSE THIS FILE!");
            readParam("client.passport.RDHNew.init","1","never change this value!");
        } else if (type.equals("PinTan")) {
            readParam("client.passport.PinTan.filename","my_passport_pintan.dat","filename to be used for your PIN/TAN keyfile");
            readParam("client.passport.PinTan.checkcert","1","whether to check the HTTPS-certificate of the server (1) or not (0)");
            readParam("client.passport.PinTan.certfile",null,"filename with a SSL-certificate for HTTPS-communication; leave blank when you don't want to check the certificate or when the certificate can be checked with the java-builtin CA database");
            readParam("client.passport.PinTan.proxy",null,"host:port for proxy server to be used; leave blank when you want direct connections to be made");
            readParam("client.passport.PinTan.proxyuser",null,"when you need proxy authentication enter the username here; leave empty to be queried on demand");
            readParam("client.passport.PinTan.proxypass",null,"when you need proxy authentication enter the passphrase here; leave empty to be queried on demand");
            readParam("client.passport.PinTan.init","1","never change this value!");
        } else if (type.equals("SIZRDHFile")) {
            readParam("client.passport.SIZRDHFile.filename","secret.key","filename of SIZ-RDH-keyfile to be used. MAKE A BACKUP OF THIS FILE BEFORE USE!");
            readParam("client.passport.SIZRDHFile.libname","/usr/lib/libhbci4java-sizrdh.so","filename of native library for accessing SIZ RDH files");
            readParam("client.passport.SIZRDHFile.init","1","never change this value!");
        } else if (type.equals("RDHXFile")) {
            readParam("client.passport.RDHXFile.filename","secret.key","filename of SIZ-RDH2-keyfile to be used. MAKE A BACKUP OF THIS FILE BEFORE USE!");
            readParam("client.passport.RDHXFile.init","1","never change this value!");
        }
    }
   
    private static void readHBCIVersion()
        throws IOException
    {
        String pversion=passport.getHBCIVersion();
        readParam("client.passport.hbciversion.default",((pversion.length()!=0)?pversion:"210"),"the hbci-version to be used; may be '201', '210', '220', '300' or 'plus'");
    }
   
    private static void readActions()
      throws IOException
    {
      readParam("action.resetBPD","1","reset and refetch BPD (1/0)");
      readParam("action.resetUPD","1","reset and refetch UPD (1/0)");
    }
   
    private static void printSupportedGVs(HBCIHandler handle)
    {
        Properties gvcodes=getGVCodes();
       
        String[] codes=gvcodes.keySet().toArray(new String[0]);
        Arrays.sort(codes);
       
        System.out.println();
        System.out.println("lowlevel GVs supported by institute and HBCI4Java:");
        for (int i=0; i<codes.length; i++) {
            String gvcode=codes[i];
            String name=gvcodes.getProperty(gvcode);
            if (!name.startsWith("Template")) {
                System.out.println("  "+gvcode+" ("+name+")");
            }
        }
        System.out.println();
        System.out.println("lowlevel GVs supported by institute but unknown to HBCI4Java:");
        for (int i=0; i<codes.length; i++) {
            String gvcode=codes[i];
            String name=gvcodes.getProperty(gvcode);
            if (name.startsWith("Template")) {
                System.out.println("  "+gvcode);
            }
        }
    }
   
    private static Properties getGVCodes()
    {
        Properties ret=new Properties();
        Properties bpd=passport.getBPD();
       
        for (Enumeration e=bpd.propertyNames();e.hasMoreElements();) {
            String key=(String)e.nextElement();
           
            if (key.startsWith("Params") &&
                key.endsWith(".SegHead.code"))
            {
                String gvcode=bpd.getProperty(key);
                   
                int dotPos=key.indexOf('.');
                int dotPos2=key.indexOf('.',dotPos+1);
               
                String gvname=key.substring(dotPos+1,dotPos2);
                int    len=gvname.length();
                int    versionPos=-1;
               
                for (int i=len-1;i>=0;i--) {
                    char ch=gvname.charAt(i);
                    if (!(ch>='0' && ch<='9')) {
                        versionPos=i+1;
                        break;
                    }
                }
               
                String version=gvname.substring(versionPos);
                if (version.length()!=0) {
                    gvname=gvname.substring(0,versionPos-3); // remove version and "Par"
                }
                ret.setProperty(gvcode,gvname);
            }
        }
       
        return ret;
    }
}
TOP

Related Classes of org.kapott.hbci.tools.InitAndTest$MyCallback

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.