Package org.kapott.hbci.rewrite

Source Code of org.kapott.hbci.rewrite.RSecTypeTAN

/*  $Id: RSecTypeTAN.java,v 1.1 2011/05/04 22:37:57 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.rewrite;

import java.util.Iterator;

import org.kapott.hbci.manager.HBCIUtils;
import org.kapott.hbci.manager.HBCIUtilsInternal;
import org.kapott.hbci.manager.MsgGen;
import org.kapott.hbci.protocol.MSG;
import org.kapott.hbci.protocol.MultipleSyntaxElements;
import org.kapott.hbci.protocol.SyntaxElement;
import org.kapott.hbci.protocol.factory.MSGFactory;

/** <p>Rewriter-Modul f�r falsche Informationen �ber TAN-Verfahren. Einige Banken
* mit HBCI+ (HBCI-PIN/TAN) -Unterst�tzung stellen f�lschlicherweise in die BPD
* die Information ein, dass das Sicherheitsverfahren "TAN" unterst�tzt wird.
* "TAN" ist aber kein g�ltiger Code f�r Sicherheitsmechanismen, so dass dieses
* Rewriter-Modul die "TAN"-Information aus den BPD entfernt.</p>
* <p>Ist dieses Modul aktiv, so muss auch das Modul "<code>Olly</code>" aktiv
* sein, weil einige hier vorgenommene �nderungen wiederum fehlerhafte Nachrichten
* erzeugen, die aber durch "<code>Olly</code>" wieder korrigiert werden.</p> */
public class RSecTypeTAN
    extends Rewrite
{
    // TODO: den rewriter umschreiben, so dass er nur string-operationen
    // benutzt, weil nicht sichergestellt werden kann, dass die eingehende
    // nachricht hier tats�chlich schon geparst werden kann
    public String incomingClearText(String st,MsgGen gen)
    {
        // empfangene Nachricht parsen, dabei die validvalues-�berpr�fung weglassen
        String myMsgName=(String)getData("msgName")+"Res";
        MSG    msg=MSGFactory.getInstance().createMSG(myMsgName,st,st.length(),
                gen,
                MSG.CHECK_SEQ,MSG.DONT_CHECK_VALIDS);
       
        // in einer Schleife durch alle SuppSecMethods-Datens�tze laufen
        for (int i=0;;i++) {
            String        elemBaseName=HBCIUtilsInternal.withCounter(myMsgName+".BPD.SecMethod.SuppSecMethods",i);
            SyntaxElement elem=msg.getElement(elemBaseName+".method");

            if (elem==null) {
                break;
            }
           
            // Methodenbezeichner extrahieren
            String method=elem.toString();
            if (method.equals("TAN")) { // "TAN" ist ung�ltiger Bezeichner
                HBCIUtils.log("there is an invalid sec type (TAN) in this BPD - removing it",HBCIUtils.LOG_WARN);

                // Elternelement finden (Segment "SecMethods")
                SyntaxElement parent=elem.getParent().getParent().getParent().getParent();
                String        parentPath=parent.getPath();
                int           number=0;
               
                // durch alle Elemente dieses Segmentes laufen, bis die Multiple-DEG
                // mit den unterst�tzten SecMethods gefunden wurde
                for (Iterator<MultipleSyntaxElements> it=parent.getChildContainers().iterator();it.hasNext();) {
                    MultipleSyntaxElements childContainer= it.next();
                    if (childContainer.getPath().equals(parentPath+".SuppSecMethods")) {
                        // die Anzahl der eingestellten unterst�tzten SecMethods herausholen
                        number=childContainer.getElements().size();
                        break;
                    }
                }
               
                int startpos;
                int endpos;
               
                /* wenn mehr als eine SecMethod im Segment stand, dann braucht nur
                 * das eine der multiplen DEGs entfernt werden. Wenn aber nur die eine
                 * fehlerhafte Info enthalten war, dann muss das gesamte Segment
                 * entfernt werden, weil ein SecMethods-Segment ohne tats�chliche Daten
                 * �ber unterst�tzte SecMethods ung�ltig ist. */
               
                if (number>1) { // nur das eine fehlerhafte TAN:1 l�schen
                    startpos=elem.getPosInMsg();
                    endpos=startpos
                        +1
                        +elem.toString(0).length()
                        +1
                        +msg.getElement(elemBaseName+".version").toString(0).length();
                } else { // komplettes segment "SecMethod" l�schen
                    startpos=parent.getPosInMsg()+1;
                    endpos=startpos+parent.toString(0).length();
                    /* der Fehler, der hier gemacht wird (nachfolgende Segment-
                     * Sequenznummern sind falsch), wird durch ein nachgeschaltetes
                     * Olly-Modul korrigiert */
                }
               
                st=new StringBuffer(st).delete(startpos,endpos).toString();
                HBCIUtils.log("new message after removing: "+st,HBCIUtils.LOG_DEBUG);
                break;
            }
        }
       
        MSGFactory.getInstance().unuseObject(msg);
        return st;
    }
}
TOP

Related Classes of org.kapott.hbci.rewrite.RSecTypeTAN

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.