Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scripts: Use main output panel for output #6044

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

ricekot
Copy link
Member

@ricekot ricekot commented Dec 30, 2024

Overview

  • Use the main Output panel for script output.

Related Issues

Checklist

  • Update help
  • Update changelog
  • Run ./gradlew spotlessApply for code formatting
  • Write tests
  • Check code coverage
  • Sign-off commits
  • Squash commits
  • Use a descriptive title

@ricekot ricekot force-pushed the scripts/diff-output branch 2 times, most recently from f2032f0 to 677ff14 Compare December 30, 2024 13:48
@ricekot
Copy link
Member Author

ricekot commented Dec 30, 2024

Rebased on #6041 to make it easier to pull and test.

@psiinon
Copy link
Member

psiinon commented Dec 30, 2024

Logo
Checkmarx One – Scan Summary & Detailsaba676eb-2e1b-4a4a-b2b6-48c23f20433c

Fixed Issues (1)

Great job! The following issues were fixed in this Pull Request

Severity Issue Source File / Package
LOW Use_Of_Hardcoded_Password /addOns/authhelper/src/test/java/org/zaproxy/addon/authhelper/internal/ClientSideHandlerUnitTest.java: 67

@ricekot ricekot force-pushed the scripts/diff-output branch from 677ff14 to cea9f7f Compare January 14, 2025 17:41
@ricekot ricekot marked this pull request as ready for review January 14, 2025 17:41
@thc202
Copy link
Member

thc202 commented Jan 15, 2025

I think we should make it clear when there's new output in the tabs (might be something for commonlib though, e.g. icon with some overlay, asterisk, bold title), right now it's difficult to know if any script outputted something new after the tab was shown for the first time.

I'd suggest having the following behaviour (optional?) too:

  • Show the tab on output.
  • Show the corresponding output tab when the script is selected.

The output tab does not have the title updated when the script is renamed and when the script is removed the tab is not removed.

@ricekot
Copy link
Member Author

ricekot commented Mar 13, 2025

I think this is now ready for review again. commonlib was updated in other PRs to show an indicator for new output. We now show the output tab when standalone scripts are run, and the rename and remove behaviours were also fixed (the tab is removed in both cases).

@ricekot ricekot force-pushed the scripts/diff-output branch from f6b3d33 to 222e474 Compare March 19, 2025 05:56
@thc202
Copy link
Member

thc202 commented Mar 19, 2025

Thank you!

@thc202 thc202 requested a review from psiinon March 19, 2025 07:35
@psiinon
Copy link
Member

psiinon commented Mar 19, 2025

I get a popup on startup saying "Error creating new session" with the following stack trace:

17760 [AWT-EventQueue-0] ERROR org.zaproxy.zap.GuiBootstrap - Index -1 out of bounds for length 6
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 6
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?]
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?]
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) ~[?:?]
        at java.base/java.util.Objects.checkIndex(Objects.java:359) ~[?:?]
        at java.base/java.util.ArrayList.get(ArrayList.java:427) ~[?:?]
        at java.desktop/javax.swing.JTabbedPane.getTabComponentAt(JTabbedPane.java:2465) ~[?:?]
        at org.zaproxy.zap.view.TabbedPanel2.setIconAt(TabbedPanel2.java:616) ~[main/:?]
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.setOutputPanelIcon(TabbedOutputPanel.java:278) ~[?:?]
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.clear(TabbedOutputPanel.java:371) ~[?:?]
        at org.parosproxy.paros.control.Control.newSession(Control.java:517) ~[main/:?]
        at org.parosproxy.paros.control.MenuFileControl.newSession(MenuFileControl.java:184) ~[main/:?]
        at org.zaproxy.zap.GuiBootstrap$3.run(GuiBootstrap.java:310) ~[main/:?]
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308) ~[?:?]
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) ~[?:?]
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) ~[?:?]
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) ~[?:?]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) [?:?]
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) [?:?]
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741) [?:?]
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) [?:?]
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) [?:?]
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) [?:?]
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) [?:?]
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:?]
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) [?:?]
2025-03-19T10:09:52.651091Z AWT-EventQueue-0 ERROR An exception occurred processing Appender ZAP-ErrorAppender java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 6
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
        at java.base/java.util.Objects.checkIndex(Objects.java:359)
        at java.base/java.util.ArrayList.get(ArrayList.java:427)
        at java.desktop/javax.swing.JTabbedPane.getTabComponentAt(JTabbedPane.java:2465)
        at org.zaproxy.zap.view.TabbedPanel2.setIconAt(TabbedPanel2.java:616)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.setOutputPanelIcon(TabbedOutputPanel.java:278)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel$3.insertUpdate(TabbedOutputPanel.java:242)
        at java.desktop/javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:226)
        at java.desktop/javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:780)
        at java.desktop/javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:739)
        at java.desktop/javax.swing.text.PlainDocument.insertString(PlainDocument.java:131)
        at java.desktop/javax.swing.JTextArea.append(JTextArea.java:482)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.doAppend(TabbedOutputPanel.java:411)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.lambda$append$5(TabbedOutputPanel.java:345)
        at org.zaproxy.zap.utils.ThreadUtils.invokeAndWait(ThreadUtils.java:53)
        at org.zaproxy.zap.utils.ThreadUtils.invokeAndWaitHandled(ThreadUtils.java:70)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.append(TabbedOutputPanel.java:345)
        at org.zaproxy.addon.commonlib.ui.TabbedOutputPanel.append(TabbedOutputPanel.java:337)
        at org.zaproxy.addon.dev.error.LoggedErrorsHandler.handleError(LoggedErrorsHandler.java:103)
        at org.zaproxy.addon.dev.error.LoggedErrorsHandler$ErrorAppender.append(LoggedErrorsHandler.java:131)
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:160)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:133)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:124)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:88)
        at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:714)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:672)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:648)
        at org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:705)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:674)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:648)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:584)
        at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:92)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:240)
        at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2904)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2857)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2839)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2618)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:2565)
        at org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:806)
        at org.zaproxy.zap.GuiBootstrap$3.run(GuiBootstrap.java:312)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
        at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

@psiinon
Copy link
Member

psiinon commented Mar 19, 2025

I think its also worth adding a note to the "Script Console" panel, e.g. something like

To get started click the Scroll with a plus icon (New Script...) in the Scripts tab on the left hand side.
Or you can right click on a script template and choose New Script...

Script output is now shown in the main "Ouput" panel, with each script getting its own tab.

@ricekot ricekot force-pushed the scripts/diff-output branch from 222e474 to 43ddf5a Compare March 19, 2025 11:54
@ricekot ricekot force-pushed the scripts/diff-output branch from 43ddf5a to 1e26b57 Compare March 19, 2025 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Allow to differentiate scripts' output
4 participants