public class ConfigAuthentication extends Object implements Authentication
Modifier and Type | Class and Description |
---|---|
private class |
ConfigAuthentication.ConfigAuthenticationEntityResolver
Implementierung eines EntityResolvers, der Referenzen auf den Public-Identifier "-//K2S//DTD Verwaltung//DE" ersetzt durch die verwaltungsdaten.dtd
Resource-Datei in diesem Package.
|
private class |
ConfigAuthentication.SingleServingPassword
Speichert alle Informationen zu einem "Einmal-Passwort" (Passwort, Index, "schon gebraucht")
|
private class |
ConfigAuthentication.UserAccount
Diese Klasse Speichert alle Informationen, die zu Benutzerkonto gehören.
|
Modifier and Type | Field and Description |
---|---|
private DataModel |
_dataModel
Wird benötigt um bei den entsprechenden Konfigurationsbereichen neue Benutzer anzulegen
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private FileLock |
_lockAuthenticationFile |
private LinkedList<String> |
_randomText
Diese Liste speichert alle Texte, die mit
getText() erzeugt wurden. |
private URI |
_uriBase
Speichert die Basis der Verzeichnisse für die Konfigurationsbereiche.
|
private Map<String,ConfigAuthentication.UserAccount> |
_userAccounts
Als Schlüssel dient der Benutzername (String) als Value werden alle Informationen, die zu einem Benutzer gespeichert wurden, zurückgegeben.
|
private Document |
_xmlDocument
Repräsentiert die vollständige XML-Datei.
|
private File |
_xmlFile
XML-Datei, wird zum anlagen einer Sicherheitskopie gebraucht
|
Constructor and Description |
---|
ConfigAuthentication(File userFile,
DataModel dataModel)
Lädt alle Informationen aus der angegebenen Datei.
|
Modifier and Type | Method and Description |
---|---|
private void |
changeUserPassword(String username,
String userNameForPasswordChange,
String newPassword)
Setzt bei einem Benutzer das Passwort neu.
|
private void |
changeUserRights(String username,
String usernameChangeRights,
boolean newUserRights) |
private void |
checkRandomText(byte[] randomText)
Prüft, ob der übergebene Text in der Liste der zufällig erzeugten Texte
_randomText vorhanden ist. |
private void |
clearSingleServingPasswords(String orderer,
String username)
Löscht für einen angegebenen Benutzer alle Einmalpasswörter bzw.
|
void |
close()
Diese Methode wird aufgerufen, wenn das System heruntergefahren wird.
|
private int |
countRemainingSingleServingPasswords(String orderer,
String username)
Zählt die verbleibenden Einmalpasswörter für einen angegeben Benutzer.
|
void |
createBackupFile(File targetDirectory)
Sicher die Benutzerverwaltungsdatei in das angegebene Verzeichnis
|
private void |
createNewUser(String username,
String newUserName,
String newUserPid,
String newUserPassword,
boolean admin,
String configurationArea,
Collection<DataAndATGUsageInformation> data)
Legt einen neuen Benutzer mit den übergebenen Parametern an.
|
private void |
createSingleServingPassword(String username,
String usernameSingleServingPasswort,
String passwortSingleServingPasswort) |
private void |
createUserObject(String pidConfigurationArea,
String username,
String pid,
Collection<DataAndATGUsageInformation> data)
Erzeugt ein Objekt vom Typ "typ.Benutzer".
|
private void |
createUserXML(String newUserName,
String newUserPassword,
boolean admin)
Erzeugt einen neuen Benutzer im speicher und speichert diesen in einer XML-Datei.
|
private Element |
createXMLSingleServingPasswort(String newPassword,
int passwortindex,
String usable)
Erzeugt ein XML Objekt, das einem Einmal-Passwort entspricht.
|
private Element |
createXMLUserAccount(String name,
String password,
String admin)
Erzeugt ein XML Objekt, das einem Benutzerkonto entspricht.
|
private void |
deleteUser(String username,
String userToDelete)
Löscht einen angegebenen Benutzer.
|
private void |
deleteUserObject(String userToDelete)
Entfernt das dynamische Benutzerobjekt aus dem Datenmodell
|
private void |
deleteUserXML(String userToDelete)
Löscht einen Benutzer aus der XML-Datei
|
private Deserializer |
getDeserializer(byte[] encryptedMessage,
String decryptenText,
String authentificationProcessName)
Erzeugt einen Desirialisierer auf den mit den üblichen Methoden zugegriffen werden kann.
|
private int |
getSerializerVersion(byte[] message)
Ließt aus einem Byte-Array die ersten 4 Bytes aus und erzeugt daraus die benutztes Serializerversion
|
byte[] |
getText()
Erzeugt einen Zufallstext und gibt diesen als Byte-Array zurück.
|
private boolean |
isAdmin(String username)
Prüft ob der Benutzer Admin-Rechte besitzt.
|
private EncryptDecryptProcedure |
isEncryptDecryptProcedureAllowed(String usedEncryptDecryptProcedure)
Prüft, ob das Verfahren, das zum ver/entschlüsseln benutzt wurde, zugelassen ist.
|
private boolean |
isUserAdmin(String orderer,
String userToCheck)
Prüft ob ein Benutzer Adminrechte hat.
|
void |
isValidUser(String username,
byte[] encryptedPassword,
String authentificationText,
String authentificationProcessName)
Die Implementierung dieser Methode stellt die Authentifizierung des Benutzers sicher.
|
int |
processTask(String usernameCustomer,
byte[] encryptedMessage,
String authentificationProcessName)
Führt einen Auftrag der Benutzerverwaltung aus und entschlüsselt dabei das übergebene Byte-Array
|
private Collection<DataAndATGUsageInformation> |
readDataAndATGUsageInformation(Deserializer deserializer)
Hilfsmethode die eine
Collection<DataAndATGUsageInformation> aus einem Deserializer deserialisiert. |
private void |
readUserAccounts()
Ließt alle Benutzer aus der XML-Datei ein und erzeugt entsprechende Java-Objekte.
|
private byte[] |
removeFirst4Bytes(byte[] byteArray)
Entfernt die ersten 4 Bytes eines Byte-Arrays und gibt ein neues Array zurück, bei dem genau die ersten 4 Bytes fehlen.
|
private void |
saveXMLFile()
Speichert alle Benutzerdaten in einer XML-Datei.
|
private boolean |
userHasObject(String username,
String pid)
Prüft, ob es zu der Kombination Benutzername und Pid ein gültiges Objekt gibt.
|
private final Map<String,ConfigAuthentication.UserAccount> _userAccounts
private final File _xmlFile
private static final Debug _debug
private final Document _xmlDocument
private URI _uriBase
private final LinkedList<String> _randomText
getText()
erzeugt wurden. Die Texte werden immer an das Ender der Liste eingefügt. Wird ein Text empfangen,
wird dieser aus der Liste gelöscht.
Erreicht die eine bestimmte Größe, wird das erste Element gelöscht, da das erste Element am längsten in der Liste vorhanden ist.
Die Liste ist nicht synchronisiert.private DataModel _dataModel
private final FileLock _lockAuthenticationFile
public ConfigAuthentication(File userFile, DataModel dataModel) throws ParserConfigurationException
userFile
- XML-Datei, in der alle Benutzer gespeichert sind.ParserConfigurationException
private void readUserAccounts()
public void isValidUser(String username, byte[] encryptedPassword, String authentificationText, String authentificationProcessName) throws Exception
Authentication
authentificationText
verschlüsselt und mit dem übergebenen verschlüsselten
Passwort verglichen. Sind beide Passwörter gleich, und der übergebene Benutzername stimmt mit dem Benutzernamen des
original Passworts überein, so war die Authentifkation erfolgreich.
Konnte das original Passwort nicht benutzt werden, muss geprüft werden, ob es ein Einmal-Passwort gibt. Das
Einmal-Passwort muss das derzeit aktuell gültige sein und muss mit dem übergebenen verschlüsseltem Passwort
übereinstimmen. Gibt es ein entsprechendes Einmal-Passwort, so ist es für immer zu sperren.
Konnte kein Passwort gefunden werden, wird eine IllegalArgumentException geworfen.isValidUser
in interface Authentication
username
- Benutzername, der zu dem übergebenen verschlüsselten Passwort gehörtencryptedPassword
- Passwort, das mit dem übergebenen Text authentificationText
verschlüsselt wurdeauthentificationText
- Text, der benutzt wurde um das übergebene Passwort encryptedPassword
zu verschlüsselnauthentificationProcessName
- Name des Verschlüsslungsverfahren, das benutzt wurde. Mit diesem Verfahren wird
das Originalpasswort verschlüsseltException
- Fehler beim schreiben der neuen Informationen oder ein technisches Problem beim
verschlüsseln der DatenIllegalArgumentException
- Dem Benutzernamen konnte das Passwort nicht zugeordnet werden oder der Benutzer war
unbekanntpublic byte[] getText()
Authentication
getText
in interface Authentication
public void close()
Authentication
close
in interface Authentication
private void checkRandomText(byte[] randomText) throws ConfigurationTaskException
_randomText
vorhanden ist. Kann der Text nicht gefunden werden, wird
eine Exception geworfen. Konnte der Text gefunden werden, wird der Text aus der Liste entfernt.randomText
- Text, der in der Liste der verschickten Texte zu finden sein mussConfigurationTaskException
- Der übergebene Text konnte in der Liste der verschickten Texte nicht gefunden werdenpublic int processTask(String usernameCustomer, byte[] encryptedMessage, String authentificationProcessName) throws RequestException, ConfigurationTaskException
processTask
in interface Authentication
usernameCustomer
- Benutzer, der den Auftrag erteiltencryptedMessage
- verschlüsselte Aufgabe, die ausgeführt werden sollauthentificationProcessName
- EntschlüsselungsverfahrenConfigAuthentication.UserAccount.NO_RESULT
(-1) falls die Aufgabe keine Rückgabe liefert.RequestException
- Fehler in der AnfrageConfigurationTaskException
- Fehler beim Ausführen der Anweisungprivate void clearSingleServingPasswords(String orderer, String username) throws FileNotFoundException, ConfigurationTaskException
orderer
- Der Auftraggeber der Aktionusername
- Der Benutzer, dessen Einmalpasswörter gelöscht werden sollenFileNotFoundException
ConfigurationTaskException
private int countRemainingSingleServingPasswords(String orderer, String username) throws FileNotFoundException, ConfigurationTaskException
orderer
- Der Auftraggeber der Aktionusername
- Der Benutzer, dessen Einmalpasswörter gezählt werden sollenFileNotFoundException
ConfigurationTaskException
private boolean isUserAdmin(String orderer, String userToCheck) throws ConfigurationTaskException
orderer
- Der Auftraggeber der Aktion. Wird in dieser Funktion derzeit nicht berücksichtigt, da jeder diese Abfrage ausführen darfuserToCheck
- Der Benutzer, dessen Rechte geprüft werden sollen.ConfigurationTaskException
- Der Auftrag kann nicht ausgeführt werden, weil der Benutzer nicht existiertprivate Collection<DataAndATGUsageInformation> readDataAndATGUsageInformation(Deserializer deserializer) throws IOException
Collection<DataAndATGUsageInformation>
aus einem Deserializer deserialisiert.deserializer
- Quelle der DatenCollection<DataAndATGUsageInformation>
mit den Daten aus dem DeserializerIOException
ConfigurationArea.createDynamicObject(de.bsvrz.dav.daf.main.config.DynamicObjectType, String, String, java.util.Collection)
private void createSingleServingPassword(String username, String usernameSingleServingPasswort, String passwortSingleServingPasswort) throws RequestException, ConfigurationTaskException
username
- Benutzer, der den Auftrag angestossen hatusernameSingleServingPasswort
- Benutzer für den das Einmal-Passwort gedacht istpasswortSingleServingPasswort
- Einmal-PasswortRequestException
- Technischer Fehler, der Auftrag konnte nicht bearbeitet werden.ConfigurationTaskException
- Die Konfiguration weigert sich den Auftrag auszuführen weil z.b. das Passwort falsch war, der Benutzer nicht die nötigen
Rechte besitzt usw..private EncryptDecryptProcedure isEncryptDecryptProcedureAllowed(String usedEncryptDecryptProcedure) throws ConfigurationTaskException
usedEncryptDecryptProcedure
- Benutztes Verfahren als StringConfigurationTaskException
private boolean isAdmin(String username)
username
- Benutzername, der geprüft werden soll ob Admin-Rechte vorhanden sindprivate void createNewUser(String username, String newUserName, String newUserPid, String newUserPassword, boolean admin, String configurationArea, Collection<DataAndATGUsageInformation> data) throws ConfigurationTaskException, RequestException
username
- Benutzer, der den Auftrag erteiltnewUserName
- Name des neuen BenutzersnewUserPassword
- Passwort des neuen Benutzersadmin
- Rechte des neuen Benutzers (true = Adminrechte; false = normaler Benutzerrechte)newUserPid
- Pid, die der neue Benutzer erhalten soll. Wird ein Leerstring ("") übergeben, so bekommt der Benutzer keine expliziete PidconfigurationArea
- Pid des Konfigurationsbereichs, in dem der neue Benutzer angelegt werden solldata
- Konfigurierende Datensätze, die angelegt werden sollen (falls leere Liste oder null
werden keine Daten angelegt)ConfigurationTaskException
- Der neue Benutzer durfte nicht anglegt werden (Keine Rechte, Bentuzer bereits vorhanden)RequestException
- technischer Fehler beim Zugriff auf die XML-DateiConfigurationArea.createDynamicObject(de.bsvrz.dav.daf.main.config.DynamicObjectType, String, String, java.util.Collection)
private void createUserObject(String pidConfigurationArea, String username, String pid, Collection<DataAndATGUsageInformation> data) throws ConfigurationChangeException
pidConfigurationArea
- Pid des Konfiguratinsbereichs, in dem der neue Benutzer angelegt werden sollusername
- Name des Objektspid
- Pid des Objektsdata
- Konfigurierende Datensätze, die angelegt werden sollen, oder null
falls keine angelgt werden sollenConfigurationChangeException
- Fehler beim Erzeugen des neuen Benutzersprivate void createUserXML(String newUserName, String newUserPassword, boolean admin) throws FileNotFoundException, TransformerException
newUserName
- BenutzernamenewUserPassword
- Passwortadmin
- Adminrechte ja/neinFileNotFoundException
TransformerException
private boolean userHasObject(String username, String pid)
username
- Benutzernamepid
- Pid des BenutzersIllegalStateException
- Es gibt ein Objekt mit der angegebenen Pid, aber der Name des Objekts ist anders, als der übergebene Nameprivate final int getSerializerVersion(byte[] message)
message
- Nachricht, die ersten 4 Bytes werden ausgelesenprivate final byte[] removeFirst4Bytes(byte[] byteArray)
byteArray
- Array, aus dem die ersten 4 Bytes entfernt werdenprivate void changeUserPassword(String username, String userNameForPasswordChange, String newPassword) throws ConfigurationTaskException, RequestException
createNewUser(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String, java.util.Collection<de.bsvrz.dav.daf.main.DataAndATGUsageInformation>)
angelegt. Das neue Benutzerkonto besitzt dabei keine Adminrechte. Das neue Benutzerkonto wird dabei das Passwort erhalten, das neu gesetzt
werden sollte.
Gibt es zwar ein Benutzerkonto, aber kein Objekt in der Konfiguration, wird ein Fehler ausgegeben.
Sind weder Objekt noch Benutzerkonto vorhanden wird ein Fehler ausgegeben.username
- Benutzer, der den Auftrag zum ändern des Passworts erteilt hatuserNameForPasswordChange
- Benutzer, dessen Passwort geändert werden sollnewPassword
- neues PasswortConfigurationTaskException
- Der Benutzer ist unbekannt oder es gibt zu dem Benutzer kein entsprechendes Objekt oder der Benutzer darf das Passwort
nicht ändern (kein Admin oder der Besitzer des Passwords).RequestException
- Fehler beim Zugriff auf die XML-Dateiprivate void changeUserRights(String username, String usernameChangeRights, boolean newUserRights) throws ConfigurationTaskException, RequestException
username
- Benutzer, der den Auftrag erteilt hat (dieser muss Adminrechte besitzen)usernameChangeRights
- Benutzer, dessen Rechte geändert werden sollnewUserRights
- Neue Rechte des Benutzers (true = Admin-Rechte, false = normaler BenutzerrechteConfigurationTaskException
- Der Benutzer ist unbekannt oder der Auftraggeber besitzt nicht die nötigen RechteRequestException
- Fehler beim Zugriff auf die XML-Dateiprivate final Deserializer getDeserializer(byte[] encryptedMessage, String decryptenText, String authentificationProcessName) throws Exception
encryptedMessage
- Verschlüsselte Nachricht, diese wird entschlüsseltdecryptenText
- Text, mit dem die verschlüsselte Nachricht entschlüsselt wirdauthentificationProcessName
- Verfahren, mit dem die Nachricht verschlüsselt wurdeException
- Fehler beim entschlüsseln oder beim erstellen des Desirialisierersprivate void deleteUser(String username, String userToDelete) throws RequestException, ConfigurationTaskException
username
- Veranlasser der AktionuserToDelete
- Benutzername des Benutzers, der gelöscht werden sollRequestException
- Das Löschen kann aufgrund eines Problems nicht durchgeführt werdenConfigurationTaskException
- Die Anfrage ist fehlerhaft weil der Veranlasser nicht die nötigen Rechte hat oder der zu löschende Benutzer nicht existiertprivate void deleteUserXML(String userToDelete) throws TransformerException, FileNotFoundException
userToDelete
- Benutzer, der gelöscht werden sollTransformerException
- Fehler beim XML-ZugriffFileNotFoundException
- XMl-Datei nciht gefundenprivate void deleteUserObject(String userToDelete) throws ConfigurationChangeException
userToDelete
- Benutzer, der gelöscht werden sollConfigurationChangeException
- Fehler beim durchführen der Aktionprivate void saveXMLFile() throws TransformerException, FileNotFoundException
public void createBackupFile(File targetDirectory) throws IOException
targetDirectory
- ZielverzeichnisIOException
- IO-Fehlerprivate Element createXMLSingleServingPasswort(String newPassword, int passwortindex, String usable)
newPassword
- Passwort des neuen Einmal-Passwortspasswortindex
- Index des Einmal-Passwortsusable
- ja = Das Einmal-Passwort ist noch zu benutzen; nein = Das Einmal-Passwort kann nicht mehr benutzt werdenprivate Element createXMLUserAccount(String name, String password, String admin)
name
- Name des Benutzerspassword
- Passwort des Benutzers (in Klarschrift)admin
- ja = Der Benutzer besitzt Admin-Rechte; nein = Der Benutzer besitzt keine Admin-Rechte