From b719ff313a9452990e89d5d22aaae78bc49ba7f1 Mon Sep 17 00:00:00 2001 From: Eric Holub Date: Tue, 5 Nov 2024 16:12:48 -0700 Subject: [PATCH] switch to montoya, added persistence --- BappDescription.html | 2 +- build.gradle | 29 +- debug.png | Bin 37337 -> 34286 bytes settings.gradle | 1 - src/META-INF/MANIFEST.MF | 3 - src/burp/BurpExtender.java | 491 ------------------ .../timestampinjector/NumericFilter.java | 31 ++ .../timestampinjector/RequestModResult.java | 13 + .../TimestampHttpHandler.java | 118 +++++ .../timestampinjector/TimestampInjector.java | 142 +++++ .../TimestampInjectorTab.java | 280 ++++++++++ ui.png | Bin 12462 -> 12787 bytes 12 files changed, 595 insertions(+), 515 deletions(-) delete mode 100644 settings.gradle delete mode 100644 src/META-INF/MANIFEST.MF delete mode 100644 src/burp/BurpExtender.java create mode 100644 src/main/java/ericholub/timestampinjector/NumericFilter.java create mode 100644 src/main/java/ericholub/timestampinjector/RequestModResult.java create mode 100644 src/main/java/ericholub/timestampinjector/TimestampHttpHandler.java create mode 100644 src/main/java/ericholub/timestampinjector/TimestampInjector.java create mode 100644 src/main/java/ericholub/timestampinjector/TimestampInjectorTab.java diff --git a/BappDescription.html b/BappDescription.html index 502ac08..b46bbf2 100644 --- a/BappDescription.html +++ b/BappDescription.html @@ -20,7 +20,7 @@
  • URLTimeStamp — Same as previous command, but URL-encoded
  • -

    Custom timestamps are generated using the SimpleDateFormat Java class. Please see their documentation for a list of supported characters. You can include text as-is into your timestamp with single quotes:

    +

    Custom timestamps are generated using the SimpleDateFormat Java class. Please see their documentation for a list of supported characters. You can include text as-is into your timestamp with single quotes:

    yyyy-MM-dd'T'HH:mm:ss'Z'
    diff --git a/build.gradle b/build.gradle index fb8d22e..d7415af 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,20 @@ -apply plugin: 'java' +plugins { + id 'java' +} + +version '1.3.0' repositories { + mavenLocal() mavenCentral() } dependencies { - compile 'net.portswigger.burp.extender:burp-extender-api:1.7.22' + compileOnly 'net.portswigger.burp.extensions:montoya-api:2024.7' } -targetCompatibility = '1.8' -sourceCompatibility = '1.8' - -sourceSets { - main { - java { - srcDir 'src' - } - resources { - srcDir 'resources' - } +jar { + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } } - -task fatJar(type: Jar) { - baseName = project.name + '-all' - from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } - with jar -} diff --git a/debug.png b/debug.png index 2962a3c25eb3f186aaba0f15170fed0f2f2172c9..7ffbe2affed2f2ee2ebfa88659e8731b0a91d162 100644 GIT binary patch literal 34286 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 { - createBurpTab(); - startTimer(); - callbacks.addSuiteTab(this); - }); - - callbacks.registerExtensionStateListener(this); - - // Print out welcome message to output - stdout.println("Timestamp Injector successfully loaded. Here are the injection commands:\n\nUnixTimeS — inject unix time (seconds)\nUnixTimeMS — inject unix time (milliseconds)\nTimeStamp — inject custom timestamp\nURLTimeStamp — inject custom timestamp (URL-encoded)\n"); - } - - private void createBurpTab() { - - int row = 0; - - // Set grid layout - panel = new JPanel(new GridBagLayout()); - GridBagConstraints gbc = new GridBagConstraints(); - gbc.insets = new Insets(5, 5, 5, 5); // Padding around components - - // Create static label - gbc.gridx = 0; - JLabel currentTimeLabel = new JLabel("Current Time:"); - panel.add(currentTimeLabel, gbc); - - //Create label that displays current Unix time - currentUnixTimeLabel = new JLabel(""); - gbc.gridx = 1; - gbc.gridy = row; - panel.add(currentUnixTimeLabel, gbc); - - //Next row! - row++; - - // Create static label - gbc.gridx = 0; - gbc.gridy = row; - JLabel timeLabel = new JLabel("Time Offset:"); - panel.add(timeLabel, gbc); - - // Shove next few elements into subpanel - gbc.gridx = 1; - gbc.gridy = row; - JPanel subPanel2 = new JPanel(); - - // Create selector for + or - offset - String[] offsets = {"+","-"}; - JComboBox offsetSelector = new JComboBox<>(offsets); - offsetSelector.setPreferredSize(new Dimension(40, 20)); - offsetSelector.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - selectedOffset = (String) offsetSelector.getSelectedItem(); - } - }); - subPanel2.add(offsetSelector); - - // Create text field that only accepts numerical input for offset - JTextField offsetValueText = new JTextField("", 10); - offsetValueText.setPreferredSize(new Dimension(30, 20)); - ((PlainDocument) offsetValueText.getDocument()).setDocumentFilter(new NumericFilter()); - - offsetValueText.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - updateOffset(offsetValueText.getText()); - } - - @Override - public void removeUpdate(DocumentEvent e) { - updateOffset(offsetValueText.getText()); - } - - @Override - public void changedUpdate(DocumentEvent e) { - // Implemented but not used for plain text fields - } - }); - - subPanel2.add(offsetValueText); - - // Create selector for time unit - String[] units = {"msec","sec","min","hr","day"}; - JComboBox unitSelector = new JComboBox<>(units); - unitSelector.setPreferredSize(new Dimension(70, 20)); - unitSelector.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - selectedTimeUnit = (String) unitSelector.getSelectedItem(); - } - }); - unitSelector.setSelectedItem(selectedTimeUnit); - subPanel2.add(unitSelector); - - panel.add(subPanel2, gbc); - - // Next row! - row++; - - // Create static label - gbc.gridx = 0; - gbc.gridy = row; - JLabel timeWithOffsetLabel = new JLabel("Time w/ Offset:"); - panel.add(timeWithOffsetLabel, gbc); - - // Create label that displays Unix time with defined offset - currentUnixTimeWithOffsetLabel = new JLabel(""); - gbc.gridx = 1; - gbc.gridy = row; - panel.add(currentUnixTimeWithOffsetLabel,gbc); - - // Next row! - row++; - - // Create static label - gbc.gridx = 0; - gbc.gridy = row; - JLabel timezoneLabel = new JLabel("Timezone:"); - panel.add(timezoneLabel, gbc); - - // Create selector for timezone - String[] timezones = TimeZone.getAvailableIDs(); - JComboBox timezoneSelector = new JComboBox<>(timezones); - timezoneSelector.setSelectedItem(selectedTimezone); - gbc.gridx = 1; - gbc.gridy = row; - panel.add(timezoneSelector, gbc); - - timezoneSelector.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - selectedTimezone = (String) timezoneSelector.getSelectedItem(); - } - }); - panel.add(Box.createVerticalStrut(10)); - - // Next row! - row++; - - // Create static label - JLabel timestampLabel = new JLabel("Timestamp Format:"); - gbc.gridx = 0; - gbc.gridy = row; - panel.add(timestampLabel, gbc); - - // Create text field for timestamp format - JTextField textField = new JTextField(selectedDateFormat, 20); - textField.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - updateDateFormat(textField.getText()); - } - - @Override - public void removeUpdate(DocumentEvent e) { - updateDateFormat(textField.getText()); - } - - @Override - public void changedUpdate(DocumentEvent e) { - updateDateFormat(textField.getText()); - } - }); - gbc.gridx = 1; - gbc.gridy = row; - panel.add(textField, gbc); - - // Next row! - row++; - - // Create static label - gbc.gridx = 0; - gbc.gridy = row; - JLabel timneStampLabel = new JLabel("Timestamp w/ Offset:"); - panel.add(timneStampLabel, gbc); - - // Create label that displays current timestamp - currentTimeStampLabel = new JLabel(""); - gbc.gridx = 1; - gbc.gridy = row; - panel.add(currentTimeStampLabel, gbc); - } - - // Timer which updates Unix time and timestamps values for a live view - private void startTimer() { - this.timer = new Timer(1000, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - Instant offsetTime = getCurrentInstantWithOffset(); - long unixTimeWithOffset = offsetTime.getEpochSecond(); - Instant now = Instant.now(); - long unixTimeNow = now.getEpochSecond(); - - currentUnixTimeWithOffsetLabel.setText(Long.toString(unixTimeWithOffset)); - currentUnixTimeLabel.setText(Long.toString(unixTimeNow)); - - Date dateWithOffset = Date.from(offsetTime); - String timeStamp = formatDate(dateWithOffset); - - Color color = timeStamp == null ? Color.RED : Color.BLACK; - - updateTimestampLabel(timeStamp == null ? "Invalid Timestamp Format" : timeStamp, color); - - if (timeStamp != null) { - currentTimeStampLabel.setText(timeStamp); - } - - - } - }); - timer.start(); - } - - // Use defined timestamp format to create timestamp - private String formatDate(Date date) { - try { - SimpleDateFormat sdf = new SimpleDateFormat(selectedDateFormat); - sdf.setTimeZone(TimeZone.getTimeZone(selectedTimezone)); - String dateString = sdf.format(date); - return dateString; - } catch (IllegalArgumentException e) { - return null; - } - } - - // Calculate Unix time with defined offset - private Instant getCurrentInstantWithOffset() - { - Instant now = Instant.now(); - - int negMultiplier = selectedOffset == "+" ? 1 : -1; - long multiplier; - - switch (selectedTimeUnit) { - case "sec": - multiplier = 1000; - break; - case "min": - multiplier = 60000; - break; - case "hr": - multiplier = 3600000; - break; - case "day": - multiplier = 86400000; - break; - default: - multiplier = 1; - - } - - Duration offset = Duration.ofMillis(this.selectedOffsetValue * negMultiplier * multiplier); - return now.plus(offset); - } - - // Update timstamp label with text and color (indicates error) - private void updateTimestampLabel(String text, Color color) - { - currentTimeStampLabel.setForeground(color); - currentTimeStampLabel.setText(text); - } - - // Run when user updates the timestamp format text field. Check if they enter an invalid value - private void updateDateFormat(String dateFormat) - { - this.selectedDateFormat = dateFormat; - String formatedDate = formatDate(new Date()); - - Color color = formatedDate == null ? Color.RED : Color.BLACK; - String text = formatedDate == null ? "Invalid Timestamp Format" : formatedDate; - updateTimestampLabel(text, color); - } - - // Run when user updates the offset text field. Numeric filter already in place, convert string to int - private void updateOffset(String text) - { - try { - this.selectedOffsetValue = Integer.parseInt(text); - } catch (NumberFormatException e) { - stderr.println("Error parsing offset: " + text); - this.selectedOffsetValue = 0; - } - } - - // Search the HTTP request body and headers for strings to replace and replace them - private RequestModResult modifyRequestContent(String content, Instant now, Date dateNow) - { - String ret = content; - boolean updated = false; - - if (ret.contains("UnixTimeS")) { - long unixTimeSeconds = now.getEpochSecond(); - String unixTimeSecondsString = Long.toString(unixTimeSeconds); - ret = ret.replaceAll("UnixTimeS", unixTimeSecondsString); - updated = true; - } - - if (ret.contains("UnixTimeMS")) { - long unixTimeMilliseconds = now.toEpochMilli(); - String unixTimeMilliSsecondsString = Long.toString(unixTimeMilliseconds); - ret = ret.replaceAll("UnixTimeMS", unixTimeMilliSsecondsString); - updated = true; - } - - if (ret.contains("URLTimeStamp") || ret.contains("TimeStamp")) { - String formatedDate = formatDate(dateNow); - - if (formatedDate != null) { - try { - ret = ret.replaceAll("URLTimeStamp", URLEncoder.encode(formatedDate, "UTF-8")); - } catch (UnsupportedEncodingException e) { - stderr.println("Error URL-encoding value: " + ret); - } - - ret = ret.replaceAll("TimeStamp", formatedDate); - updated = true; - } - } - - return new RequestModResult(ret, updated); - } - - // Burp native function which runs whenever Burp executes an HTTP request - @Override - public void processHttpMessage(int toolFlag, boolean messageIsRequest, burp.IHttpRequestResponse messageInfo) - { - boolean updated = false; - Instant now = getCurrentInstantWithOffset(); - Date dateNow = Date.from(now); - - if (messageIsRequest) { - - burp.IHttpService httpService = messageInfo.getHttpService(); - burp.IRequestInfo iRequest = helpers.analyzeRequest(messageInfo); - - String request = new String(messageInfo.getRequest()); - List headers = iRequest.getHeaders(); - String reqBody = request.substring(iRequest.getBodyOffset()); - - RequestModResult reqBodyMod = modifyRequestContent(reqBody, now, dateNow); - reqBody = reqBodyMod.content; - updated = reqBodyMod.updated; - - for (int i = 0; i < headers.size(); i++) { - String header = headers.get(i); - RequestModResult headerBodyMod = modifyRequestContent(header, now, dateNow); - updated = updated ? true : headerBodyMod.updated; - headers.set(i, headerBodyMod.content); - } - - // Print to output whenever a HTTP request is changed - if (updated) { - stdout.println("-----Request Before Extension Update-------"); - stdout.println(helpers.bytesToString(messageInfo.getRequest())); - stdout.println("-----end output-------"); - - byte[] message = helpers.buildHttpMessage(headers, reqBody.getBytes()); - messageInfo.setRequest(message); - - stdout.println("-----Request After Extension Update-------"); - stdout.println(helpers.bytesToString(messageInfo.getRequest())); - stdout.println("-----end output-------"); - } - } - } - - // Define tab name - @Override - public String getTabCaption() { - return "Timestamp Injector"; - } - - // Return UI Tab - @Override - public Component getUiComponent() { - return panel; - } - - // Run Function when extension is unloaded from Burp Suite - @Override - public void extensionUnloaded() { - this.timer.stop(); - } -} - - -// Class that filters text input to only include numeric characters -class NumericFilter extends DocumentFilter { - @Override - public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { - if (isNumeric(string)) { - super.insertString(fb, offset, string, attr); - } - } - - @Override - public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attrs) throws BadLocationException { - if (isNumeric(string)) { - super.replace(fb, offset, length, string, attrs); - } - } - - @Override - public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { - super.remove(fb, offset, length); - } - - - private boolean isNumeric(String str) { - return str != null && str.matches("\\d*"); - } - } - -// Return result from HTTP request check -class RequestModResult { - public String content; - public boolean updated; - - public RequestModResult(String content, boolean updated) { - this.content = content; - this.updated = updated; - } -} diff --git a/src/main/java/ericholub/timestampinjector/NumericFilter.java b/src/main/java/ericholub/timestampinjector/NumericFilter.java new file mode 100644 index 0000000..5b3792a --- /dev/null +++ b/src/main/java/ericholub/timestampinjector/NumericFilter.java @@ -0,0 +1,31 @@ +package ericholub.timestampinjector; + +import javax.swing.text.DocumentFilter; +import javax.swing.text.BadLocationException; +import javax.swing.text.AttributeSet; + +class NumericFilter extends DocumentFilter { + @Override + public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { + if (isNumeric(string)) { + super.insertString(fb, offset, string, attr); + } + } + + @Override + public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attrs) throws BadLocationException { + if (isNumeric(string)) { + super.replace(fb, offset, length, string, attrs); + } + } + + @Override + public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { + super.remove(fb, offset, length); + } + + + private boolean isNumeric(String str) { + return str != null && str.matches("\\d*"); + } +} diff --git a/src/main/java/ericholub/timestampinjector/RequestModResult.java b/src/main/java/ericholub/timestampinjector/RequestModResult.java new file mode 100644 index 0000000..1dedec0 --- /dev/null +++ b/src/main/java/ericholub/timestampinjector/RequestModResult.java @@ -0,0 +1,13 @@ +package ericholub.timestampinjector; + +public class RequestModResult { + public String content; + public boolean updated; + + public RequestModResult(String content, boolean updated) { + this.content = content; + this.updated = updated; + } + + +} diff --git a/src/main/java/ericholub/timestampinjector/TimestampHttpHandler.java b/src/main/java/ericholub/timestampinjector/TimestampHttpHandler.java new file mode 100644 index 0000000..a23090a --- /dev/null +++ b/src/main/java/ericholub/timestampinjector/TimestampHttpHandler.java @@ -0,0 +1,118 @@ +package ericholub.timestampinjector; + +import burp.api.montoya.MontoyaApi; +import burp.api.montoya.core.Annotations; +import burp.api.montoya.core.HighlightColor; +import burp.api.montoya.http.handler.*; +import burp.api.montoya.http.message.requests.HttpRequest; +import burp.api.montoya.http.message.HttpHeader; +import burp.api.montoya.logging.Logging; +import java.util.Date; +import java.time.Instant; +import java.util.List; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +import ericholub.timestampinjector.RequestModResult; + +import static burp.api.montoya.http.handler.RequestToBeSentAction.continueWith; +import static burp.api.montoya.http.handler.ResponseReceivedAction.continueWith; +import static burp.api.montoya.http.message.params.HttpParameter.urlParameter; + +class TimestampHttpHandler implements HttpHandler { + + public TimestampInjector main; + + public TimestampHttpHandler(TimestampInjector main) { + this.main = main; + } + + + @Override + public RequestToBeSentAction handleHttpRequestToBeSent(HttpRequestToBeSent requestToBeSent) { + Annotations annotations = requestToBeSent.annotations(); + Instant now = main.getCurrentInstantWithOffset(); + Date dateNow = Date.from(now); + + List headers = requestToBeSent.headers(); + String body = requestToBeSent.bodyToString(); + + HttpRequest finalRequest = (HttpRequest) requestToBeSent; + + for (int i = 0; i < headers.size(); i++) { + HttpHeader header = headers.get(i); + RequestModResult headerMod = modifyRequestContent(header.value(), now, dateNow); + if (headerMod.updated) { + printBeforeAfter("Header", header.toString(), header.name()+": "+headerMod.content); + finalRequest = finalRequest.withHeader(HttpHeader.httpHeader(header.name(),headerMod.content)); + } + } + + + RequestModResult reqBodyMod = modifyRequestContent(body, now, dateNow); + + if (reqBodyMod.updated) { + printBeforeAfter("Body", body, reqBodyMod.content); + finalRequest = finalRequest.withBody(reqBodyMod.content); + } + + return continueWith(finalRequest, annotations); + } + + + @Override + public ResponseReceivedAction handleHttpResponseReceived(HttpResponseReceived responseReceived) { + Annotations annotations = responseReceived.annotations(); + return continueWith(responseReceived, annotations); + } + + + // Search the HTTP request body and headers for strings to replace and replace them + public RequestModResult modifyRequestContent(String content, Instant now, Date dateNow) + { + String ret = content; + boolean updated = false; + + if (ret.contains("UnixTimeS")) { + long unixTimeSeconds = now.getEpochSecond(); + String unixTimeSecondsString = Long.toString(unixTimeSeconds); + ret = ret.replaceAll("UnixTimeS", unixTimeSecondsString); + updated = true; + } + + if (ret.contains("UnixTimeMS")) { + long unixTimeMilliseconds = now.toEpochMilli(); + String unixTimeMilliSsecondsString = Long.toString(unixTimeMilliseconds); + ret = ret.replaceAll("UnixTimeMS", unixTimeMilliSsecondsString); + updated = true; + } + + if (ret.contains("URLTimeStamp") || ret.contains("TimeStamp")) { + String formatedDate = main.formatDate(dateNow); + + if (formatedDate != null) { + try { + ret = ret.replaceAll("URLTimeStamp", URLEncoder.encode(formatedDate, "UTF-8")); + } catch (UnsupportedEncodingException e) { + main.log.logToError("Error URL-encoding value: " + ret); + } + + ret = ret.replaceAll("TimeStamp", formatedDate); + updated = true; + } + } + + return new RequestModResult(ret, updated); + } + + private void printBeforeAfter(String callContent, String before, String after) + { + this.main.log.logToOutput("Modified: " + callContent); + this.main.log.logToOutput("Before: "); + this.main.log.logToOutput(before); + this.main.log.logToOutput("After: "); + this.main.log.logToOutput(after); + this.main.log.logToOutput("---------------------------------------\n"); + + } +} diff --git a/src/main/java/ericholub/timestampinjector/TimestampInjector.java b/src/main/java/ericholub/timestampinjector/TimestampInjector.java new file mode 100644 index 0000000..52fbf88 --- /dev/null +++ b/src/main/java/ericholub/timestampinjector/TimestampInjector.java @@ -0,0 +1,142 @@ +package ericholub.timestampinjector; + +import burp.api.montoya.*; +import burp.api.montoya.logging.Logging; +import javax.swing.*; +import java.awt.*; +import java.text.SimpleDateFormat; +import java.util.TimeZone; +import java.util.Date; +import java.time.Instant; +import java.util.List; +import java.time.ZonedDateTime; +import java.time.ZoneId; +import java.time.Duration; +import burp.api.montoya.persistence.PersistedObject; +import java.lang.reflect.Field; + +import ericholub.timestampinjector.NumericFilter; +import ericholub.timestampinjector.TimestampInjectorTab; +import ericholub.timestampinjector.TimestampHttpHandler; + + +//Burp will auto-detect and load any class that extends BurpExtension. +public class TimestampInjector implements BurpExtension { + + // Montoya Variables + public Logging log; + private TimestampInjectorTab tab; + public PersistedObject persist; + + // User-defined values w/ defaults + public String selectedTimezone = "UTC"; + public String selectedDateFormat = "yyyy-MM-dd HH:mm:ss z"; + public String selectedOffset = "+"; + public String selectedTimeUnit = "secs"; + public int selectedOffsetValue = 0; + + @Override + public void initialize(MontoyaApi api) { + String extensionTitle = "Timestamp Injector"; + + api.extension().setName(extensionTitle); + log = api.logging(); + persist = api.persistence().extensionData(); + + loadValuesFromPersistence(); + + tab = new TimestampInjectorTab(this); + tab.startTimer(); + api.userInterface().registerSuiteTab(extensionTitle, tab); + + log.logToOutput("Timestamp Injector successfully loaded. Here are the injection commands:\n\nUnixTimeS — inject unix time (seconds)\nUnixTimeMS — inject unix time (milliseconds)\nTimeStamp — inject custom timestamp\nURLTimeStamp — inject custom timestamp (URL-encoded)\n"); + + api.http().registerHttpHandler(new TimestampHttpHandler(this)); + + api.extension().registerUnloadingHandler(() -> { + log.logToOutput("Unloading Extension"); + tab.stopTimer(); + }); + } + + // Use defined timestamp format to create timestamp + public String formatDate(Date date) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(selectedDateFormat); + sdf.setTimeZone(TimeZone.getTimeZone(selectedTimezone)); + String dateString = sdf.format(date); + return dateString; + } catch (IllegalArgumentException e) { + return null; + } + } + + // Calculate Unix time with defined offset + public Instant getCurrentInstantWithOffset() + { + Instant now = Instant.now(); + + int negMultiplier = selectedOffset == "+" ? 1 : -1; + long multiplier; + + switch (selectedTimeUnit) { + case "secs": + multiplier = 1000; + break; + case "mins": + multiplier = 60000; + break; + case "hrs": + multiplier = 3600000; + break; + case "days": + multiplier = 86400000; + break; + default: + multiplier = 1; + + } + + Duration offset = Duration.ofMillis(this.selectedOffsetValue * negMultiplier * multiplier); + return now.plus(offset); + } + + + // Load user-defined values from persistence + private void loadValuesFromPersistence() { + String[] keys = {"selectedTimezone","selectedDateFormat","selectedOffset","selectedTimeUnit","selectedOffsetValue"}; + + for (int i=0; i offsetSelector = new JComboBox<>(offsets); + offsetSelector.setPreferredSize(new Dimension(40, 20)); + offsetSelector.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String value = (String) offsetSelector.getSelectedItem(); + main.selectedOffset = value; + main.persist.setString("selectedOffset", value); + } + }); + offsetSelector.setSelectedItem(main.selectedOffset); + subPanel2.add(offsetSelector); + + // Create text field that only accepts numerical input for offset + String offsetText = main.selectedOffsetValue == 0 ? "" : String.valueOf(main.selectedOffsetValue); + JTextField offsetValueText = new JTextField(offsetText, 10); + offsetValueText.setPreferredSize(new Dimension(30, 20)); + ((PlainDocument) offsetValueText.getDocument()).setDocumentFilter(new NumericFilter()); + + offsetValueText.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + updateOffset(offsetValueText.getText()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + updateOffset(offsetValueText.getText()); + } + + @Override + public void changedUpdate(DocumentEvent e) { + // Implemented but not used for plain text fields + } + }); + + subPanel2.add(offsetValueText); + + // Create selector for time unit + String[] units = {"msecs","secs","mins","hrs","days"}; + JComboBox unitSelector = new JComboBox<>(units); + unitSelector.setPreferredSize(new Dimension(70, 20)); + unitSelector.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String value = (String) unitSelector.getSelectedItem(); + main.selectedTimeUnit = value; + main.persist.setString("selectedTimeUnit", value); + } + }); + unitSelector.setSelectedItem(main.selectedTimeUnit); + subPanel2.add(unitSelector); + + this.add(subPanel2, gbc); + + // Next row! + row++; + + // Create static label + gbc.gridx = 0; + gbc.gridy = row; + JLabel timeWithOffsetLabel = new JLabel("Time w/ Offset:"); + this.add(timeWithOffsetLabel, gbc); + + // Create label that displays Unix time with defined offset + currentUnixTimeWithOffsetLabel = new JLabel(""); + gbc.gridx = 1; + gbc.gridy = row; + this.add(currentUnixTimeWithOffsetLabel,gbc); + + // Next row! + row++; + + // Create static label + gbc.gridx = 0; + gbc.gridy = row; + JLabel timezoneLabel = new JLabel("Timezone:"); + this.add(timezoneLabel, gbc); + + // Create selector for timezone + String[] timezones = TimeZone.getAvailableIDs(); + JComboBox timezoneSelector = new JComboBox<>(timezones); + timezoneSelector.setSelectedItem(main.selectedTimezone); + timezoneSelector.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String value = (String) timezoneSelector.getSelectedItem(); + main.selectedTimezone = value; + main.persist.setString("selectedTimezone", value); + } + }); + gbc.gridx = 1; + gbc.gridy = row; + this.add(timezoneSelector, gbc); + + + // Next row! + row++; + + // Create static label + JLabel timestampLabel = new JLabel("Timestamp Format:"); + gbc.gridx = 0; + gbc.gridy = row; + this.add(timestampLabel, gbc); + + // Create text field for timestamp format + JTextField textField = new JTextField(main.selectedDateFormat, 20); + textField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + updateDateFormat(textField.getText()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + updateDateFormat(textField.getText()); + } + + @Override + public void changedUpdate(DocumentEvent e) { + + } + }); + gbc.gridx = 1; + gbc.gridy = row; + this.add(textField, gbc); + + // Next row! + row++; + + // Create static label + gbc.gridx = 0; + gbc.gridy = row; + JLabel timneStampLabel = new JLabel("Timestamp w/ Offset:"); + this.add(timneStampLabel, gbc); + + // Create label that displays current timestamp + currentTimeStampLabel = new JLabel(""); + gbc.gridx = 1; + gbc.gridy = row; + this.add(currentTimeStampLabel, gbc); + + + } + + // Timer which updates Unix time and timestamps values for a live view + public void startTimer() { + this.timer = new Timer(1000, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Instant offsetTime = main.getCurrentInstantWithOffset(); + long unixTimeWithOffset = offsetTime.getEpochSecond(); + Instant now = Instant.now(); + long unixTimeNow = now.getEpochSecond(); + + currentUnixTimeWithOffsetLabel.setText(Long.toString(unixTimeWithOffset)); + currentUnixTimeLabel.setText(Long.toString(unixTimeNow)); + + Date dateWithOffset = Date.from(offsetTime); + String timeStamp = main.formatDate(dateWithOffset); + + Color color = timeStamp == null ? Color.RED : Color.BLACK; + + updateTimestampLabel(timeStamp == null ? "Invalid Timestamp Format" : timeStamp, color); + + if (timeStamp != null) { + currentTimeStampLabel.setText(timeStamp); + } + + + } + }); + timer.start(); + } + + + // Stop the timer to clean up resources + public void stopTimer() { + timer.stop(); + } + + + // Run when user updates the timestamp format text field. Check if they enter an invalid value + private void updateDateFormat(String dateFormat) + { + main.selectedDateFormat = dateFormat; + main.persist.setString("selectedDateFormat",dateFormat); + String formatedDate = main.formatDate(new Date()); + Color color = formatedDate == null ? Color.RED : Color.BLACK; + String text = formatedDate == null ? "Invalid Timestamp Format" : formatedDate; + updateTimestampLabel(text, color); + } + + // Run when user updates the offset text field. Numeric filter already in place, convert string to int + private void updateOffset(String text) + { + try { + int value = Integer.parseInt(text); + main.selectedOffsetValue = value; + main.persist.setInteger("selectedOffsetValue",value); + } catch (NumberFormatException e) { + main.selectedOffsetValue = 0; + main.persist.setInteger("selectedOffsetValue",0); + } + } + + // Update timstamp label with text and color (indicates error) + private void updateTimestampLabel(String text, Color color) + { + currentTimeStampLabel.setForeground(color); + currentTimeStampLabel.setText(text); + } + +} diff --git a/ui.png b/ui.png index 7866a1d7736e52c58621ee40cec24a6ddcaeb6d7..1a7a466939c553d75d6806e3402f958e2bef2391 100644 GIT binary patch literal 12787 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