Skip to content

Commit

Permalink
Moved everything to JavaFX.
Browse files Browse the repository at this point in the history
  • Loading branch information
vdbaan committed Sep 20, 2017
1 parent 216196d commit 5891f23
Show file tree
Hide file tree
Showing 32 changed files with 3,059 additions and 44 deletions.
6 changes: 4 additions & 2 deletions .gitignore
Expand Up @@ -49,10 +49,12 @@ fabric.properties
# IntelliJ project files
.idea
*.iml
out

gen### Gradle template
.gradle
/build/
build
backup
testdata

# Ignore Gradle GUI config
gradle-app.setting
Expand Down
30 changes: 20 additions & 10 deletions build.gradle
Expand Up @@ -18,6 +18,7 @@
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'distribution'
//apply plugin: 'antlr'

def getVersionName = { ->
try {
Expand All @@ -40,28 +41,37 @@ repositories {
}

dependencies {
compile 'org.codehaus.groovy:groovy:2.4.8'
compile 'org.codehaus.groovy:groovy-xml:2.4.8'
compile 'org.codehaus.groovy:groovy-json:2.4.8'
compile 'org.codehaus.groovy:groovy-swing:2.4.8'
compile 'net.java.dev.glazedlists:glazedlists_java15:1.9.1'
compile 'com.miglayout:miglayout-swing:5.0'
compile 'org.slf4j:slf4j-api:1.7.22'
compile 'org.antlr:antlr4-runtime:4.7'

compile 'org.codehaus.groovy:groovy-all:2.4.8'
// compile 'org.codehaus.groovy:groovy-xml:2.4.8'
// compile 'org.codehaus.groovy:groovy-json:2.4.8'
compile 'org.apache.commons:commons-pool2:2.4.2'
compile 'org.groovyfx:groovyfx:8.0.0'
// compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'
// compile 'org.codehaus.groovy:groovy-swing:2.4.8'
// compile 'net.java.dev.glazedlists:glazedlists_java15:1.9.1'
// compile 'com.miglayout:miglayout-swing:5.0'
// compile 'org.slf4j:slf4j-api:1.7.22'
// https://mvnrepository.com/artifact/org.apache.commons/commons-pool2
compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.2'

// https://mvnrepository.com/artifact/org.json/json
compile group: 'org.json', name: 'json', version: '20170516'


testCompile 'junit:junit:4.12'
testCompile 'org.assertj:assertj-swing-junit:3.5.0'
// testCompile 'org.assertj:assertj-swing-junit:3.5.0'
}

jar {
baseName = 'IF'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }

manifest {
attributes 'Main-Class':' net.vdbaan.issuefinder.App',
attributes 'Main-Class':' net.vdbaan.issuefinder.Runner',
// 'Class-Path':'.',
'version':project.version

}
}

Expand Down
113 changes: 113 additions & 0 deletions src/main/antlr/Predicate.g4
@@ -0,0 +1,113 @@
grammar Predicate;

//IP == "127.0.0.1"
//SCANNER ~= 'nmap'
//SERVICE LIKE 'http'
//PORT LIKE "443"
//EXPLOITABLE
//(SERVICE LIKE 'SMB') && !EXPLOITABLE
// (PORT LIKE "443") || (SERVICE LIKE "http")
// ((IP == "127.0.0.1") && (!EXPLOITABLE)) || ((PORT LIKE "443") && (SERVICE LIKE "http"))
// Predicate(Predicate(IP,==,"127.0.0.1).and(Predicate.not(EXPLOITABLE)).or(Predicate(PORT,LIKE,"443").and(Predicate(SERVICE,LIKE,'http')))

@header {
package net.vdbaan.issuefinder.parser;
}

expr: expr AND expr # andExpr
| expr OR expr # orExpr
| LPAREN expr RPAREN # enclosedExpr
| NOT expr # notExpr
| column operator STRING # assign
| column rangeOperator RANGE # range
| column groupOperator GROUP # group
| NOT column # notColumn
;

LPAREN: '(';
RPAREN: ')';
AND : '&&' | 'AND';
OR : '||' | 'OR';
NOT : '!';

//SCANNER("SCANNER"),IP("IP"),PORT("PORT"),SERVICE("SERVICE"),RISK("RISK"),EXPLOITABLE("EXPLOITABLE"),DESCRIPTION("DESCRIPTION")
column
: SCANNER
| IP
| PORT
| SERVICE
| RISK
| EXPLOITABLE
| DESCRIPTION
| PLUGIN
;

groupOperator: IN;
rangeOperator: BETWEEN;

operator
: '=='
| '!='
| '<'
| '<='
| '>'
| '=>'
| '~='
| LIKE
;

IP: I P;
SCANNER: S C A N N E R;
PORT: P O R T;
SERVICE: S E R V I C E;
RISK: R I S K;
EXPLOITABLE: E X P L O I T A B L E;
DESCRIPTION: D E S C R I P T I O N;
PLUGIN: P L U G I N;

IN: I N;
LIKE: L I K E;
BETWEEN: B E T W E E N;

GROUP: '[' STRING (',' STRING)+ ']';
RANGE: LPAREN STRING ',' STRING RPAREN;
STRING
: DQUOTE ~["]+? DQUOTE
| SQUOTE ~[']+? SQUOTE
| CHAR
;
fragment A: [aA];
fragment B: [bB];
fragment C: [cC];
fragment D: [dD];
fragment E: [eE];
fragment F: [fF];
fragment G: [gG];
fragment H: [hH];
fragment I: [iI];
fragment J: [jJ];
fragment K: [kK];
fragment L: [lL];
fragment M: [mM];
fragment N: [nN];
fragment O: [oO];
fragment P: [pP];
fragment Q: [qQ];
fragment R: [rR];
fragment S: [sS];
fragment T: [tT];
fragment U: [uU];
fragment V: [vV];
fragment W: [wW];
fragment X: [xX];
fragment Y: [yY];
fragment Z: [zZ];
SQUOTE: '\'' -> skip;
DQUOTE: '"' -> skip;
//CHAR : ~[ \t\r\n"']+ ; // // match any chars except space tab, newline, double and single quote

CHAR: [a-zA-Z/\\.0-9:;]+;
WS : [ \t\n\r]+ -> skip ; // skip spaces, tabs, newlines, \r (Windows)
89 changes: 89 additions & 0 deletions src/main/groovy/net/vdbaan/issuefinder/MainApp.groovy
@@ -0,0 +1,89 @@
package net.vdbaan.issuefinder

import javafx.collections.FXCollections
import javafx.collections.ObservableList
import javafx.fxml.FXMLLoader
import javafx.scene.Parent
import javafx.scene.Scene
import javafx.scene.control.Label
import javafx.stage.Modality
import javafx.stage.Stage
import javafx.stage.StageStyle
import net.vdbaan.issuefinder.controller.DialogController
import net.vdbaan.issuefinder.controller.EditorController
import net.vdbaan.issuefinder.controller.FXMLController
import net.vdbaan.issuefinder.controller.ProgressController
import net.vdbaan.issuefinder.model.Finding


import static groovyx.javafx.GroovyFX.start

class MainApp {
Stage primaryStage
private ObservableList<Finding> masterData = FXCollections.observableArrayList()

def run(String... args) {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/layout.fxml"))
start {
primaryStage = stage(title: 'Issue Finder', width: 1200, height: 500, visible: true, maximized: true) {
def mainScene = scene() {
}
mainScene.root = fxmlLoader.load()
}
FXMLController controller = fxmlLoader.getController()
controller.setMasterData(masterData)
controller.setup(this)
// controller.openFiles(args.collect { new File(it) })
}
}

def showAbout() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/about.fxml"))
Parent root = loader.load()
Stage dialog = new Stage()
dialog.initOwner(primaryStage)
Scene scene = new Scene(root)
dialog.initStyle(StageStyle.UNDECORATED)
dialog.setScene(scene)
DialogController controller = loader.getController()
controller.dialogPane = dialog
dialog.showAndWait()
}

void showProgressDialog(List<File> files, Label statusLabel) {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/progress.fxml"))
Parent root = loader.load()
Stage dialog = new Stage()
dialog.initOwner(primaryStage)
Scene scene = new Scene(root)
dialog.initStyle(StageStyle.UNDECORATED)
dialog.initModality(Modality.APPLICATION_MODAL)
dialog.setScene(scene)
ProgressController controller = loader.getController()
controller.dialogPane = dialog
controller.statusLabel = statusLabel
controller.fileList = files
controller.masterData = masterData
controller.process()
dialog.showAndWait()
}

void showEditor(Finding finding) {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/editor.fxml"))
Parent root = loader.load()
Stage dialog = new Stage()
dialog.initOwner(primaryStage)
Scene scene = new Scene(root)
dialog.initStyle(StageStyle.UNDECORATED)
dialog.initModality(Modality.APPLICATION_MODAL)
dialog.setScene(scene)
EditorController controller = loader.getController()
controller.dialogPane = dialog
controller.masterData = masterData
controller.finding = finding
controller.setup()
dialog.showAndWait()
}


}
20 changes: 20 additions & 0 deletions src/main/groovy/net/vdbaan/issuefinder/Runner.groovy
@@ -0,0 +1,20 @@
package net.vdbaan.issuefinder

class Runner {
static void main(String... args) {
testJavaFX()
MainApp app = new MainApp()
app.run(args)
}

static void testJavaFX() {
try {
Class.forName('javafx.stage.Stage')
} catch(ClassNotFoundException e) {
System.err.println 'JavaFX8 Missing'
System.err.println 'Please install JavaFX, for example:'
System.err.println '- sudo apt-get install openjfx'
System.exit(1)
}
}
}
@@ -0,0 +1,32 @@
package net.vdbaan.issuefinder.controller

import javafx.fxml.FXML
import javafx.fxml.Initializable
import javafx.scene.control.Label
import javafx.stage.Stage

import java.util.jar.Manifest


class DialogController implements Initializable {

Stage dialogPane

@FXML
Label version

@Override
void initialize(URL url, ResourceBundle rb) {
def vers
getClass().classLoader.getResources('META-INF/MANIFEST.MF').each { uri ->
uri.openStream().withStream { is ->
def attributes = new Manifest(is).mainAttributes
vers = attributes.getValue('version')
}
}
version.text = (vers == null)?'Version: DEV':'Version: '+vers
}
def closeAction() {
dialogPane.hide()
}
}
@@ -0,0 +1,51 @@
package net.vdbaan.issuefinder.controller

import javafx.collections.ObservableList
import javafx.fxml.FXML
import javafx.scene.control.*
import javafx.stage.Stage
import net.vdbaan.issuefinder.model.Finding


class EditorController {
@FXML TextField editScanner
@FXML TextField editHostname
@FXML TextField editIp
@FXML TextField editPort
@FXML TextField editService
@FXML TextField editPlugin
@FXML ChoiceBox editRisk

Stage dialogPane
ObservableList<Finding> masterData
Finding finding

def setup() {
editRisk.items.addAll(Finding.Severity.values())
editScanner.setText(finding.scanner)
editHostname.setText(finding.hostName)
editIp.setText(finding.ip)
editPort.setText(finding.port)
editService.setText(finding.service)
editPlugin.setText(finding.plugin)
editRisk.setValue(finding.severity)
}

boolean okClicked = false

def doOk() {
finding.scanner = editScanner.text
finding.hostName = editHostname.text
finding.ip = editIp.text
finding.port = editPort.text
finding.service = editService.text
finding.plugin = editPlugin.text
finding.severity = editRisk.getValue()
okClicked = true
dialogPane.hide()
}

def doCancel() {
dialogPane.hide()
}
}

0 comments on commit 5891f23

Please sign in to comment.