2018-03-29 19:45:41 +02:00
package application ;
import javafx.fxml.FXML ;
import javafx.geometry.Insets ;
import javafx.scene.Node ;
import javafx.scene.control.Alert ;
import javafx.scene.control.Alert.AlertType ;
import javafx.scene.control.Button ;
import javafx.scene.control.ButtonBar.ButtonData ;
import javafx.scene.control.ButtonType ;
import javafx.scene.control.Dialog ;
import javafx.scene.control.TreeTableColumn ;
import javafx.scene.control.TreeTableView ;
import javafx.scene.control.TextField ;
import javafx.scene.control.TreeItem ;
import java.awt.Desktop ;
import java.awt.Toolkit ;
import java.awt.datatransfer.Clipboard ;
import java.awt.datatransfer.StringSelection ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.io.OutputStream ;
import java.net.URI ;
import java.net.URISyntaxException ;
import java.sql.DriverManager ;
import java.util.Optional ;
import java.util.Properties ;
import javafx.application.Platform ;
import javafx.beans.value.ChangeListener ;
import javafx.beans.value.ObservableValue ;
import javafx.event.ActionEvent ;
import javafx.scene.control.Label ;
import javafx.scene.control.PasswordField ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.GridPane ;
import javafx.util.Pair ;
2018-03-29 19:51:34 +02:00
public class MainWindowController
{
2018-03-29 19:45:41 +02:00
private static final String String = null ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
Toolkit toolkit = Toolkit . getDefaultToolkit ( ) ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
Clipboard clipboard = toolkit . getSystemClipboard ( ) ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
@FXML
private AnchorPane mainAnchorpane ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
@FXML
2018-03-29 19:51:34 +02:00
private TreeTableView < tableData > mainTreeTable ;
2018-03-29 19:45:41 +02:00
@FXML
2018-03-29 19:51:34 +02:00
private TreeTableColumn < tableData , String > datumSpalte ;
2018-03-29 19:45:41 +02:00
@FXML
private TreeTableColumn < tableData , String > kontoSpalte ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
@FXML
2018-03-29 19:51:34 +02:00
private TreeTableColumn < tableData , Integer > idSpalte = new TreeTableColumn < > (
" " ) ;
2018-03-29 19:45:41 +02:00
@FXML
private Button ueberbtn ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
private Main main ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
private DBController dbc ;
2018-03-29 19:51:34 +02:00
private String filepathXMLWin = " C:/ProgramData/PWMaster/config.xml " ; // Pfad
// wo
// die
// XML
// liegt
private String filepathXMLLinux = System . getProperty ( " user.home " )
+ " /bin/PWMaster/config.xml " ; // Pfad wo die XML liegt
2018-03-29 19:45:41 +02:00
private boolean showPasswort = false ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
private String schluessel ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
private String base32Secret ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
private int id ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
@FXML
TreeItem < tableData > root = new TreeItem < > ( new tableData ( 0 , " 0 " , " 0 " ) ) ;
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
Properties props = new Properties ( ) ;
@FXML
2018-03-29 19:51:34 +02:00
public void ueberbtnAction ( ActionEvent event )
{ // Öffnet den Über-Dialog
2018-03-29 19:45:41 +02:00
// Erstellt einen Dialog
Dialog < Pair < String , String > > dialog = new Dialog < > ( ) ;
dialog . setTitle ( " Über PWMaster " ) ;
dialog . setHeaderText ( " Informationen und Lizenzen - Version 0.5 " ) ;
// Erzeugt den Button
dialog . getDialogPane ( ) . getButtonTypes ( ) . addAll ( ButtonType . OK ) ;
// Erzeugt die Textfelder und Label
GridPane grid = new GridPane ( ) ;
grid . setHgap ( 10 ) ;
grid . setVgap ( 10 ) ;
grid . setPadding ( new Insets ( 20 , 150 , 10 , 10 ) ) ;
2018-03-29 19:51:34 +02:00
grid . add ( new Label ( " Datenbank: sqlite.org - Public Domain "
+ " \ nBASE64Decoder: java2s.com/Code/Jar/s/DownloadsunmiscBASE64Decoderjar.htm - GPLv2 "
+ " \ nCrypo: blog.axxg.de/ - Copyright 2013 AxxG Alexander Grösel "
+ " \ nzwei Faktoren: github.com/j256/two-factor-auth - ISC License "
+ " \ nUI Design: eclipse.org/efxclipse/install.html - Eclipse Public License 1.0 "
+ " \ nUI - Datenbank Integration: basierend auf Project-HomeFlix - github.com/Seil0/Project-HomeFlix - GPLv3 \ n "
+ " \ nMaintainer: hendrik.schutter@icloud.com "
+ " \ n(c) 2017 Hendrik Schutter " ) , 0 , 0 ) ;
2018-03-29 19:45:41 +02:00
2018-03-29 19:51:34 +02:00
dialog . getDialogPane ( ) . setContent ( grid ) ; // Setzt die GridPane auf die
// DialogPane
2018-03-29 19:45:41 +02:00
dialog . showAndWait ( ) ;
}
2018-03-29 19:51:34 +02:00
2018-03-29 19:45:41 +02:00
@FXML
2018-03-29 19:51:34 +02:00
public void fuelleTablle ( )
{ // Lädt die Datenbank in die Tabelle
2018-03-29 19:45:41 +02:00
dbc . setSchluessel ( schluessel ) ;
2018-03-29 19:51:34 +02:00
for ( int i = 0 ; i < dbc . ladeTabelle ( ) . size ( ) ; i + + ) {
tableData helpTableData = new tableData (
dbc . ladeTabelle ( ) . get ( i ) . getID ( ) ,
dbc . ladeTabelle ( ) . get ( i ) . getDatum ( ) ,
dbc . ladeTabelle ( ) . get ( i ) . getKonto ( ) ) ;
2018-03-29 19:45:41 +02:00
root . getChildren ( ) . add ( new TreeItem < tableData > ( helpTableData ) ) ;
}
}
2018-03-29 19:51:34 +02:00
public void initUI ( )
{
2018-03-29 19:45:41 +02:00
mainTreeTable . setRoot ( root ) ;
mainTreeTable . setShowRoot ( false ) ;
mainTreeTable . setEditable ( false ) ;
2018-03-29 19:51:34 +02:00
// Setzt die Textfelder
2018-03-29 19:45:41 +02:00
2018-03-29 19:51:34 +02:00
idSpalte . setCellValueFactory (
cellData - > cellData . getValue ( ) . getValue ( ) . idProperty ( ) . asObject ( ) ) ;
datumSpalte . setCellValueFactory (
cellData - > cellData . getValue ( ) . getValue ( ) . datumProperty ( ) ) ;
kontoSpalte . setCellValueFactory (
cellData - > cellData . getValue ( ) . getValue ( ) . kontoProperty ( ) ) ;
2018-03-29 19:45:41 +02:00
mainTreeTable . getColumns ( ) . add ( idSpalte ) ;
mainTreeTable . getColumns ( ) . get ( 2 ) . setVisible ( false ) ;
2018-03-29 19:51:34 +02:00
mainTreeTable . getSelectionModel ( ) . selectedItemProperty ( )
. addListener ( new ChangeListener < Object > ( ) {
@Override
public void changed ( ObservableValue < ? > observable , Object oldVal ,
Object newVal )
{
// last = selected; //for auto-play
int selected = mainTreeTable . getSelectionModel ( )
. getSelectedIndex ( ) ; // get selected item
id = idSpalte . getCellData ( selected ) ; // Ausgewählte Spalte
showPasswort = false ;
try { // Setzt den entschlüsselten Inhalt in die Textfelder
// tf01.setText("Verschlüsseltes Passwort von " +
// crypo.entschluesseln(dbc.getKonto(id), schluessel) + " :
// " + dbc.getPasswort(id));
// tfNutzername.setText(crypo.entschluesseln(dbc.getNutzername(id),
// schluessel));
// tfEmail.setText(crypo.entschluesseln(dbc.getEmail(id),
// schluessel));
// tfPasswort.setText(crypo.entschluesseln(dbc.getPasswort(id),
// schluessel));
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
}
} ) ;
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public void setMain ( Main main , DBController dbc )
{
2018-03-29 19:45:41 +02:00
this . main = main ;
this . dbc = dbc ;
}
2018-03-29 19:51:34 +02:00
public String getSystemDatum ( )
{ // Gibt das System-Datum zurück
2018-03-29 19:45:41 +02:00
java . util . Date now = new java . util . Date ( ) ;
2018-03-29 19:51:34 +02:00
java . text . SimpleDateFormat sdf = new java . text . SimpleDateFormat (
" dd.MM.yyyy " ) ;
2018-03-29 19:45:41 +02:00
String heutigesDatum = sdf . format ( now ) ;
return heutigesDatum ;
}
2018-03-29 19:51:34 +02:00
public void saveSettings ( String schluessel , String base32Secret )
throws Exception
{
OutputStream outputStream ; // new output-stream
2018-03-29 19:45:41 +02:00
try {
2018-03-29 19:51:34 +02:00
// props.setProperty("key", crypo.verschluesseln(schluessel,
// crypo.getProgrammSchluessel())); //writes path into property
// props.setProperty("TOTPkey", crypo.verschluesseln(base32Secret,
// crypo.getProgrammSchluessel())); //writes path into property
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
2018-03-29 19:45:41 +02:00
outputStream = new FileOutputStream ( filepathXMLLinux ) ;
} else {
outputStream = new FileOutputStream ( filepathXMLWin ) ;
}
2018-03-29 19:51:34 +02:00
props . storeToXML ( outputStream , " PWMaster settings " ) ; // writes new .xml
2018-03-29 19:45:41 +02:00
outputStream . close ( ) ;
} catch ( IOException e ) {
}
}
2018-03-29 19:51:34 +02:00
public boolean loadSettings ( ) throws Exception
{ // Ladt die Daten aus der XML
2018-03-29 19:45:41 +02:00
InputStream inputStream ;
try {
2018-03-29 19:51:34 +02:00
if ( System . getProperty ( " os.name " ) . equals ( " Linux " ) ) {
2018-03-29 19:45:41 +02:00
inputStream = new FileInputStream ( filepathXMLLinux ) ;
} else {
inputStream = new FileInputStream ( filepathXMLWin ) ;
}
props . loadFromXML ( inputStream ) ;
2018-03-29 19:51:34 +02:00
// schluessel = crypo.entschluesseln(props.getProperty("key"),
// crypo.getProgrammSchluessel()); //liest schluessel von property
// base32Secret = crypo.entschluesseln(props.getProperty("TOTPkey"),
// crypo.getProgrammSchluessel()); //liest schluessel von property
2018-03-29 19:45:41 +02:00
inputStream . close ( ) ;
return true ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
return false ;
}
}
2018-03-29 19:51:34 +02:00
public String getSchluesselXML ( )
{ // Gibt den Schlüssel zurück für die Main
2018-03-29 19:45:41 +02:00
return schluessel ;
}
2018-03-29 19:51:34 +02:00
public void starteDB ( )
{ // Startet die Datenbank
2018-03-29 19:45:41 +02:00
dbc . verbindeDatenbank ( ) ;
}
2018-03-29 19:51:34 +02:00
public void erzeugeDB ( )
{ // Erzeuge die Datenbank
2018-03-29 19:45:41 +02:00
dbc . erstelleDatenbank ( ) ;
dbc . verbindeDatenbank ( ) ;
}
2018-03-29 19:51:34 +02:00
public String getbase32Secret ( )
{ // Gibt den base32Secret zurück für die Main
2018-03-29 19:45:41 +02:00
return base32Secret ;
}
}