/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.zaproxy.zap.spider.parser;
import org.parosproxy.paros.network.HttpMessage;
/**
* The listener interface for receiving spiderParser events. The class that is interested in
* processing a spiderParser event implements this interface, and the object created with that class
* is registered with a component using the component's
* {@code addSpiderParserListener} method. When the spiderParser event occurs, that object's appropriate
* method is invoked.
*
*/
public interface SpiderParserListener {
/**
* Event triggered when a new resource URI is found. The responseMessage contains all the
* required information regarding the page which contains the URI.
*
* @param responseMessage the response message
* @param depth the depth of this resource in the crawling process
* @param uri the universal resource locator
*/
void resourceURIFound(HttpMessage responseMessage, int depth, String uri);
/**
* Event triggered when a new resource URI is found. The responseMessage contains all the
* required information regarding the page which contains the URI.
* <p>
* Also provides a {@code shouldIgnore} boolean that states that this resourceURI should be
* ignored in the fetching process, as it's probably a dead end (e.g. binary data, image, etc).
*
* @param responseMessage the response message
* @param depth the depth of this resource in the crawling process
* @param uri the universal resource locator
* @param shouldIgnore whether this resource has a high chance of being not useful if fetched
*/
void resourceURIFound(HttpMessage responseMessage, int depth, String uri, boolean shouldIgnore);
/**
* Event triggered when a new resource URI is found. However, if the URI needs to be fetched, it
* should be accessed with the HTTP POST method and the content of the request body message
* should be the one specified in {@code requestBody}.
* <p>
* For example, this method can be triggered if a parser finds the {@code uri} inside a form
* with the method set as {@code POST}. In this case, the messageContent should contain the form
* data set necessary for a successful submission of the form.
* </p>
* <p>
* The responseMessage contains all the required information regarding the page which contains
* the URI.
* </p>
*
* @param responseMessage the response message
* @param depth the depth of this resource in the crawling process
* @param uri the universal resource locator
* @param requestBody represents the content that a request message should have in its body, if
* fetching the resource
*/
void resourcePostURIFound(HttpMessage responseMessage, int depth, String uri, String requestBody);
}