Websteuer::Base Perl-Modul
Position: Kernmodul.
Verwendungszweck: vorerst nur Devellopment.
Kernmodul ohne Datenhaltung und GUI. Derzeit nur für Entwickler
geeignet.
Aktuelle Version: 0.01
Datum: 20.09.2005
Allgemeine Funktionsweise
Das Modul umfasst alle Kernfunktionen zum erstellen, prüfen und
versenden von Anmeldesteuern mit Elster/Coala. Hinweis: der JavaKern wird
weiterhin benötigt.
Hinweise:
- Flexibilität: Beliebige Anbindungen sind erstellbar
(GUI, Shell, Datenbankanbindung)
- HerstellerID: Die Beantragung einer eigenen HerstellerID
für eigene Entwicklungen wird nötig. Im Paket enthalten ist
eine Test-ID, die aber nicht für offizielle Einträge
freigeschalten ist.
JavaKlassen, Anbindungen an andere Systeme oder GUI sind derzeit nicht enthalten.
Funktionen
check_antrag
decrypt
encrypt
gen_antrag
get_user_permission
init_antrag
make_md5_hash
normalize_data
parse_herstellerID
read_antrag
read_user_config
save_antrag
send_antrag
sign_data
verify_signature
Vorgehensweisen
HerstellerID entschlüsseln
HerstellerID verschlüsseln
Funktionen
check_antrag
Antrag auf formelle Korrektheit prüfen
Beispiel:
use strict;
use Websteuer::Base;
my $antrag = {
'type' => 'ustva',
'data' => {
'kz83' => 12.34,
}
};
my %erg = check_antrag($antrag);
if ( $erg{'errorcode'} )
{
print STDERR 'Fehler: ('.$erg{'errorcode'}.') - '.$erg{'errormsg'}."\n";
exit 1;
}
Aufruf: | my %erg = check_antrag(\%antrag) |
erwartete Daten: | vollständigen und korrekten Antrag
in $antrag->{'data'} |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok |
1 | - | interner Fehler, übergebener hashref ist nicht angekommen |
2 | - | Pflichtfeld nicht belegt. |
3 | - | Feld ist keine ganze Zahl. |
4 | - | Feld darf nicht negativ sein. |
5 | - | Feld muß eine Fließkommazahl mit
2 Nachstellen sein. |
6 | - | frei |
7 | - | frei |
8 | - | frei |
9 | - | frei |
10 | - | Feld namens type ($antrag->{'type'})
nicht angegeben. |
11 | - | Feld namens type ($antrag->{'type'})
leer. |
12 | - | Feld namens type ($antrag->{'type'})
enthät einen unbekannten Wert. (bekannte Werte: 'lsta', 'dfv',
'ustsvz', 'ustva') |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
|
decrypt
Daten entschlüsseln
Beispiel:
use strict;
use Websteuer::Base;
my $datei = /tmp/decrypt.me;
my $key = 'foobar';
my %decrypt = decrypt($datei, $key);
print <<EOF;
Dateien: $datei
ERROR: $decrypt{'errorcode'}
errormsg: $decrypt{'errormsg'}
crypted:
$decrypt{'daten'}
EOF
Aufruf: | my %decrypt = decrypt(file, key); |
erwartete Daten: | File zum entschlüsseln, Passwort |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | File kann nicht geöffnet werden |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
daten - entschlüsselter Inhalt vom File.
|
encrypt
Daten verschlüsseln
Beispiel:
use strict;
use Websteuer::Base;
my $datei = '/tmp/encrypt.me';
my $key = 'foobar';
my %encrypt = encrypt($datei, $key);
print <<EOF;
Dateien: $datei
ERROR: $encrypt{'errorcode'}
errormsg: $encrypt{'errormsg'}
crypted:
$encrypt{'daten'}
EOF
Aufruf: | my %encrypt = encrypt(file, key); |
erwartete Daten: | File zum verschlüsseln, Passwort |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | File kann nicht geöffnet werden |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
daten - entschlüsselter Inhalt vom File.
|
gen_antrag
XML-Antrag zum Einpacken und verschicken generieren
Beispiel:
use strict;
use Websteuer::Base;
my $antrag = {
'type' => 'ustva',
'data' => {
'kz83' => 12.34,
}
};
my %erg = gen_antrag($antrag);
Aufruf: | my %erg = gen_antrag(\%daten) |
erwartete Daten: | Datensatz mit Antragsdaten |
Returns: |
errorcode:
errormsg:
|
get_user_permission
Eingetragene Permissions eines bestimmten Users einlesen
Beispiel:
use strict;
use Websteuer::Base;
my $user = 'joetester'
my %erg = get_user_permission($user);
2Do: Schnittstelle definieren und
implementieren.
Implementierungsvorlage arbeitet mit sqlite - verallgemeinern, damit
jedes db-Modul verwendet werden kann.
Aufruf: | my %erg = get_user_permission($user); |
erwartete Daten: | Username |
Returns: |
Hash mit folgenden Feldern:
errorcode
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
daten - entschlüsselter Inhalt vom File.
|
init_antrag
blanken Antrag (mit defaulteintragungen) erstellen.
Notiz: vorhandene Daten werden derzeit gnadenlos entsorgt.
Beispiel:
use strict;
use Websteuer::Base;
my %erg = init_antrag($type);
Aufruf: | my %erg = init_antrag($type); |
erwartete Daten: | Antragstyp. Derzeit: ustva.
Noch fehlend: lstva, ustsvz, dfv |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | kein Type bekommen |
2 | - | frei |
3 | - | Vorlage-File nicht gefunden |
4 | - | Vorlage-File kann nicht (zum lesen)
geöffnet werden. |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
data - Hashref mit Antragsdaten
|
make_md5_hash
MD5 Hash über eine anzugebende Anzahl Dateien erstellen
Beispiel:
use strict;
use Websteuer::Base;
my @dateien = @ARGV;
if ( $#ARGV < 0 )
{ @dateien = ('Websteuer/Base.pm'); }
my %md5_hash = make_md5_hash(@dateien);
print <<EOF;
RESULT
Dateien: @dateien
hashkey: $md5_hash{'key'}
ERROR: $md5_hash{'errorcode'}
errormsg: $md5_hash{'errormsg'}
EOF
Aufruf: | my %md5_hash = make_md5_hash(@dateien); |
erwartete Daten: | alle Dateien werden mit Hilfe von $INC
lokalisiert (oder auch nicht), hintereinander gehängt und ein MD5-Hash
darueber gebildet. |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | File kann nicht geöffnet werden |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
key - errechneter Hashkey
|
Anmerkung: Keine Dateien geben auch lustige
MD5-Hashes!!
normalize_data
Daten bereinigen
Ganze Zahlen in ganze Zahlen umrechnen, Zahlen mit Nachkommastellen
auf 2 Nachkommastellen zurechtstutzen. Alles numerisch (int, float %1.2f).
Beispiel:
use strict;
use Websteuer::Base;
my %erg = normalize_data($antrag);
Aufruf: | my %erg = normalize_data($antrag); |
erwartete Daten: | Hashref mit Antragsdaten in
$antrag->{'data'}; $antrag-%gt;{'type'} enthält den typ des
Antrags (z.B. ustva). |
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | kein Hashref bekommen |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
data - bereinigter Datensatz.
2Do: Fehlermeldung bei unbekanntem/fehlendem Typ
fehlt
|
parse_herstellerID
HerstellerID holen
Beispiel:
use strict;
use Websteuer::Base;
my %datenfeld = parse_herstellerID($data);
Aufruf: | my %datenfeld = parse_herstellerID($data); |
erwartete Daten: | Daten zum parsen |
Returns: |
Hash mit folgenden Feldern:
errorcode
HerstellerID - ausgelesene HerstellerID
Version - Version der Software, bzw. des Files, aus dem die ID
ausgelesen wurde
Hersteller - Softwarehersteller zu dieser ID
Key - md5hash zum Vergleich, stimmt der Key nicht mit dem
verwendeten Key bei der Entschlüsselung der Datei überein,
muß davon ausgegangen werden, dass die gelieferten Daten falsch
sind und der Datei Inhalt nur zufällig einen parsebaren Sinn ergeben
hat.
|
Anmerkung: diese Funktion ist nur in Verbindung
mit den Crypto-Funktionen sinnvoll, da die Daten verschlüsselt
vorliegen, aber hier unverschlüsselt übergeben werden.
read_antrag
gespeicherte Antragsdaten lesen und im ArbeitsHash ablegen
Beispiel:
use strict;
use Websteuer::Base;
my %erg = read_antrag(\%data);
Aufruf: | my %erg = read_antrag(\%data); |
erwartete Daten: | Hashref mit folgenden Angaben:
import | leer oder belegt | Daten aus einer Datei
importieren, siehe Feld file |
file | Filename | File, aus dem Daten importiert
werden sollen |
user | aus DB holen | Benutzerkennung - nicht
durchmplementiert |
type | ustva | Typ des einzulesenden Antrages. |
|
Returns: |
Hash mit folgenden Feldern:
errorcode
0 | - | alles ok. |
1 | - | intern kein hashref bekommen |
2 | - | intern kein type bekommen |
3 | - | zu importierende Datei nicht gefunden |
4 | - | zu importierende Datei konnte nicht
gelesen werden |
errormsg - derzeit freier Fehlertext, teils deutsch, teils english
2Do: Fehlertexte in versch. Sprachen extern
ziehen.
data - Antragsdaten
|
2Do: Bisher ist nur import aus einer Datei
implementiert, die Schnittstelle sieht verschiedene Import-Varianten
vor, implementieren.
read_user_config
Benutzerspezifische Configuration einlesen
Beispiel:
use strict;
use Websteuer::Base;
Aufruf: | |
erwartete Daten: | |
Returns: |
Hash mit folgenden Feldern:
errorcode
2Do: implementieren
|
Anmerkung: nicht implementiert, Schnittstelle
noch nicht definiert.
send_antrag
Antrag abschicken
Beispiel:
use strict;
use Websteuer::Base;
# not implemented
Aufruf: | |
erwartete Daten: | |
Returns: |
Hash mit folgenden Feldern:
errorcode
|
2Do: Schnittstelle definieren, implementieren
Anmerkung: Hier muss der alte JavaKern
angreifen, solange niemand was findet.
sign_data
Signatur über Datenblock erstellen
Beispiel:
use strict;
use Websteuer::Base;
my %sign_data = sign_data($data, $privKey);
Aufruf: | my %sign_data = sign_data($data, $privKey); |
erwartete Daten: | zu signierende Daten, private Key |
Returns: |
Hash mit folgenden Feldern:
errorcode
errormsg - Fehlertext, unused
signature - Signatur
|
Anmerkung: Crypto mit Perl ist nervig, deswegen
vorerst nur ein md5 Hash, der privKey wird vorerst
nicht verwendet, und nicht geprüft. Es sollte aber mal ein
Public Key Verfahren Anwendung finden.
verify_signature
gelesene Signatur, bzw. erstellte Signatur verifizieren
Beispiel:
use strict;
use Websteuer::Base;
my %sign_data = sign_data($data1, 'XXX');
my %verify_sig = verify_signature($data2, 'XXX', $sign_data{'signature'});
Aufruf: | siehe Beispiel |
erwartete Daten: | Datensatz, Key, Vergleichssignatur |
Returns: |
Hash mit folgenden Feldern:
errorcode
errormsg - derzeit frei unused
verified - 0|1 - Datensatz passt mit Key und Vergleichssignatur
zusammen = 1, sonst 0
|
Vorgehensweisen
HerstellerID entschlüsseln
- md5 hashkey base64 der entsprechenden Files
- als Schlüssel für TrippleDES Entschlüsselung
verwenden
- Ergebnis-Datei hat Format:
HerstellerID: <ID>
Version: <Versionsnummer>
Hersteller: NekoSoft Simone Demmel
Key: <verwendeter Schluessel>
Product: <Produktname>
ENDE
- bei Bedarf/Verdacht die Signatur (gegen den pub.Key) pruefen
HerstellerID verschlüsseln
- md5 hashkey base64 der entsprechenden Files
- Datei erstellen im Format:
HerstellerID: <ID>
Version: <Versionsnummer>
Hersteller: NekoSoft Simone Demmel
Key: <verwendeter Schluessel>
Product: <Produktname>
ENDE
- RSA Signatur über die Datei mit priv.Key erstellen und hinten
anhängen
- MD5Hashkey als Schlüssel für TrippleDES
Verschlüsselung verwenden
|
Anmeldung
* Login
* Zugang beantragen
* ONLINE DEMO
* Nutzungsbedingungen
* Feedback
Preise
Preisvarianten
System Requirements
Online Service
Nutzung als Online Service
Devellopment
Entwickler Infos
FAQ
alle Fragen
Developer Fragen
|