auto_response 0.1.6 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -3
- data/Gemfile.lock +9 -12
- data/bin/ar +14 -3
- data/lib/ar/har.rb +133 -0
- data/lib/ar/proxy_server.rb +171 -0
- data/lib/ar/rule_dsl.rb +4 -0
- data/lib/ar/rule_manager.rb +2 -1
- data/lib/ar/session_viewer.rb +18 -13
- data/lib/ar/version.rb +3 -0
- data/lib/ar/viewer/Images/applicationCache.png +0 -0
- data/lib/ar/viewer/Images/back.png +0 -0
- data/lib/ar/viewer/Images/checker.png +0 -0
- data/lib/ar/viewer/Images/closeButtons.png +0 -0
- data/lib/ar/viewer/Images/cookie.png +0 -0
- data/lib/ar/viewer/Images/database.png +0 -0
- data/lib/ar/viewer/Images/databaseTable.png +0 -0
- data/lib/ar/viewer/Images/deleteIcon.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallDown.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallDownBlack.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallDownWhite.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRight.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRightBlack.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRightDown.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRightDownBlack.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRightDownWhite.png +0 -0
- data/lib/ar/viewer/Images/disclosureTriangleSmallRightWhite.png +0 -0
- data/lib/ar/viewer/Images/domain.png +0 -0
- data/lib/ar/viewer/Images/errorIcon.png +0 -0
- data/lib/ar/viewer/Images/errorMediumIcon.png +0 -0
- data/lib/ar/viewer/Images/errorRedDot.png +0 -0
- data/lib/ar/viewer/Images/fileSystem.png +0 -0
- data/lib/ar/viewer/Images/forward.png +0 -0
- data/lib/ar/viewer/Images/frame.png +0 -0
- data/lib/ar/viewer/Images/glossyHeader.png +0 -0
- data/lib/ar/viewer/Images/glossyHeaderPressed.png +0 -0
- data/lib/ar/viewer/Images/glossyHeaderSelected.png +0 -0
- data/lib/ar/viewer/Images/glossyHeaderSelectedPressed.png +0 -0
- data/lib/ar/viewer/Images/goArrow.png +0 -0
- data/lib/ar/viewer/Images/graphLabelCalloutLeft.png +0 -0
- data/lib/ar/viewer/Images/graphLabelCalloutRight.png +0 -0
- data/lib/ar/viewer/Images/indexedDB.png +0 -0
- data/lib/ar/viewer/Images/indexedDBIndex.png +0 -0
- data/lib/ar/viewer/Images/indexedDBObjectStore.png +0 -0
- data/lib/ar/viewer/Images/localStorage.png +0 -0
- data/lib/ar/viewer/Images/navigatorShowHideButton.png +0 -0
- data/lib/ar/viewer/Images/paneAddButtons.png +0 -0
- data/lib/ar/viewer/Images/paneBottomGrow.png +0 -0
- data/lib/ar/viewer/Images/paneBottomGrowActive.png +0 -0
- data/lib/ar/viewer/Images/paneElementStateButtons.png +0 -0
- data/lib/ar/viewer/Images/paneFilterButtons.png +0 -0
- data/lib/ar/viewer/Images/paneGrowHandleLine.png +0 -0
- data/lib/ar/viewer/Images/paneRefreshButtons.png +0 -0
- data/lib/ar/viewer/Images/paneSettingsButtons.png +0 -0
- data/lib/ar/viewer/Images/popoverArrows.png +0 -0
- data/lib/ar/viewer/Images/popoverBackground.png +0 -0
- data/lib/ar/viewer/Images/profileGroupIcon.png +0 -0
- data/lib/ar/viewer/Images/profileIcon.png +0 -0
- data/lib/ar/viewer/Images/profileSmallIcon.png +0 -0
- data/lib/ar/viewer/Images/profilesSilhouette.png +0 -0
- data/lib/ar/viewer/Images/programCounterBorder.png +0 -0
- data/lib/ar/viewer/Images/radioDot.png +0 -0
- data/lib/ar/viewer/Images/resourceCSSIcon.png +0 -0
- data/lib/ar/viewer/Images/resourceDocumentIcon.png +0 -0
- data/lib/ar/viewer/Images/resourceDocumentIconSmall.png +0 -0
- data/lib/ar/viewer/Images/resourceJSIcon.png +0 -0
- data/lib/ar/viewer/Images/resourcePlainIcon.png +0 -0
- data/lib/ar/viewer/Images/resourcePlainIconSmall.png +0 -0
- data/lib/ar/viewer/Images/resourcesSizeGraphIcon.png +0 -0
- data/lib/ar/viewer/Images/resourcesTimeGraphIcon.png +0 -0
- data/lib/ar/viewer/Images/scriptsSilhouette.png +0 -0
- data/lib/ar/viewer/Images/searchNext.png +0 -0
- data/lib/ar/viewer/Images/searchPrev.png +0 -0
- data/lib/ar/viewer/Images/searchSmallBlue.png +0 -0
- data/lib/ar/viewer/Images/searchSmallBrightBlue.png +0 -0
- data/lib/ar/viewer/Images/searchSmallGray.png +0 -0
- data/lib/ar/viewer/Images/searchSmallWhite.png +0 -0
- data/lib/ar/viewer/Images/segment.png +0 -0
- data/lib/ar/viewer/Images/segmentChromium.png +0 -0
- data/lib/ar/viewer/Images/segmentEnd.png +0 -0
- data/lib/ar/viewer/Images/segmentHover.png +0 -0
- data/lib/ar/viewer/Images/segmentHoverChromium.png +0 -0
- data/lib/ar/viewer/Images/segmentHoverEnd.png +0 -0
- data/lib/ar/viewer/Images/segmentHoverEndChromium.png +0 -0
- data/lib/ar/viewer/Images/segmentSelected.png +0 -0
- data/lib/ar/viewer/Images/segmentSelectedChromium.png +0 -0
- data/lib/ar/viewer/Images/segmentSelectedEnd.png +0 -0
- data/lib/ar/viewer/Images/segmentSelectedEndChromium.png +0 -0
- data/lib/ar/viewer/Images/sessionStorage.png +0 -0
- data/lib/ar/viewer/Images/spinner.gif +0 -0
- data/lib/ar/viewer/Images/spinnerActive.gif +0 -0
- data/lib/ar/viewer/Images/spinnerActiveSelected.gif +0 -0
- data/lib/ar/viewer/Images/spinnerInactive.gif +0 -0
- data/lib/ar/viewer/Images/spinnerInactiveSelected.gif +0 -0
- data/lib/ar/viewer/Images/splitviewDimple.png +0 -0
- data/lib/ar/viewer/Images/splitviewDividerBackground.png +0 -0
- data/lib/ar/viewer/Images/statusbarButtonGlyphs.png +0 -0
- data/lib/ar/viewer/Images/statusbarResizerHorizontal.png +0 -0
- data/lib/ar/viewer/Images/statusbarResizerVertical.png +0 -0
- data/lib/ar/viewer/Images/successGreenDot.png +0 -0
- data/lib/ar/viewer/Images/thumbActiveHoriz.png +0 -0
- data/lib/ar/viewer/Images/thumbActiveVert.png +0 -0
- data/lib/ar/viewer/Images/thumbHoriz.png +0 -0
- data/lib/ar/viewer/Images/thumbHoverHoriz.png +0 -0
- data/lib/ar/viewer/Images/thumbHoverVert.png +0 -0
- data/lib/ar/viewer/Images/thumbVert.png +0 -0
- data/lib/ar/viewer/Images/tickMark.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillBlue.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillGray.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillGreen.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillOrange.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillPurple.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillRed.png +0 -0
- data/lib/ar/viewer/Images/timelineHollowPillYellow.png +0 -0
- data/lib/ar/viewer/Images/timelinePillBlue.png +0 -0
- data/lib/ar/viewer/Images/timelinePillGray.png +0 -0
- data/lib/ar/viewer/Images/timelinePillGreen.png +0 -0
- data/lib/ar/viewer/Images/timelinePillOrange.png +0 -0
- data/lib/ar/viewer/Images/timelinePillPurple.png +0 -0
- data/lib/ar/viewer/Images/timelinePillRed.png +0 -0
- data/lib/ar/viewer/Images/timelinePillYellow.png +0 -0
- data/lib/ar/viewer/Images/toolbarIcons.png +0 -0
- data/lib/ar/viewer/Images/toolbarIconsSmall.png +0 -0
- data/lib/ar/viewer/Images/toolbarItemSelected.png +0 -0
- data/lib/ar/viewer/Images/trackHoriz.png +0 -0
- data/lib/ar/viewer/Images/trackVert.png +0 -0
- data/lib/ar/viewer/Images/treeDownTriangleBlack.png +0 -0
- data/lib/ar/viewer/Images/treeDownTriangleWhite.png +0 -0
- data/lib/ar/viewer/Images/treeRightTriangleBlack.png +0 -0
- data/lib/ar/viewer/Images/treeRightTriangleWhite.png +0 -0
- data/lib/ar/viewer/Images/treeUpTriangleBlack.png +0 -0
- data/lib/ar/viewer/Images/treeUpTriangleWhite.png +0 -0
- data/lib/ar/viewer/Images/userInputIcon.png +0 -0
- data/lib/ar/viewer/Images/userInputPreviousIcon.png +0 -0
- data/lib/ar/viewer/Images/userInputResultIcon.png +0 -0
- data/lib/ar/viewer/Images/warningIcon.png +0 -0
- data/lib/ar/viewer/Images/warningMediumIcon.png +0 -0
- data/lib/ar/viewer/Images/warningOrangeDot.png +0 -0
- data/lib/ar/viewer/Images/warningsErrors.png +0 -0
- data/lib/ar/viewer/chrome/Images/applicationCache.png +0 -0
- data/lib/ar/viewer/chrome/Images/back.png +0 -0
- data/lib/ar/viewer/chrome/Images/breakpointBorder.png +0 -0
- data/lib/ar/viewer/chrome/Images/breakpointConditionalBorder.png +0 -0
- data/lib/ar/viewer/chrome/Images/breakpointConditionalCounterBorder.png +0 -0
- data/lib/ar/viewer/chrome/Images/breakpointCounterBorder.png +0 -0
- data/lib/ar/viewer/chrome/Images/checker.png +0 -0
- data/lib/ar/viewer/chrome/Images/closeButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/cookie.png +0 -0
- data/lib/ar/viewer/chrome/Images/database.png +0 -0
- data/lib/ar/viewer/chrome/Images/databaseTable.png +0 -0
- data/lib/ar/viewer/chrome/Images/debuggerContinue.png +0 -0
- data/lib/ar/viewer/chrome/Images/debuggerPause.png +0 -0
- data/lib/ar/viewer/chrome/Images/debuggerStepInto.png +0 -0
- data/lib/ar/viewer/chrome/Images/debuggerStepOut.png +0 -0
- data/lib/ar/viewer/chrome/Images/debuggerStepOver.png +0 -0
- data/lib/ar/viewer/chrome/Images/deleteIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallDown.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallDownBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallDownWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRight.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRightBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRightDown.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRightDownBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRightDownWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/disclosureTriangleSmallRightWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/domain.png +0 -0
- data/lib/ar/viewer/chrome/Images/errorIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/errorMediumIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/errorRedDot.png +0 -0
- data/lib/ar/viewer/chrome/Images/fileSystem.png +0 -0
- data/lib/ar/viewer/chrome/Images/forward.png +0 -0
- data/lib/ar/viewer/chrome/Images/frame.png +0 -0
- data/lib/ar/viewer/chrome/Images/glossyHeader.png +0 -0
- data/lib/ar/viewer/chrome/Images/glossyHeaderPressed.png +0 -0
- data/lib/ar/viewer/chrome/Images/glossyHeaderSelected.png +0 -0
- data/lib/ar/viewer/chrome/Images/glossyHeaderSelectedPressed.png +0 -0
- data/lib/ar/viewer/chrome/Images/goArrow.png +0 -0
- data/lib/ar/viewer/chrome/Images/graphLabelCalloutLeft.png +0 -0
- data/lib/ar/viewer/chrome/Images/graphLabelCalloutRight.png +0 -0
- data/lib/ar/viewer/chrome/Images/indexedDB.png +0 -0
- data/lib/ar/viewer/chrome/Images/indexedDBIndex.png +0 -0
- data/lib/ar/viewer/chrome/Images/indexedDBObjectStore.png +0 -0
- data/lib/ar/viewer/chrome/Images/localStorage.png +0 -0
- data/lib/ar/viewer/chrome/Images/navigatorShowHideButton.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneAddButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneBottomGrow.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneBottomGrowActive.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneElementStateButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneFilterButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneGrowHandleLine.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneRefreshButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/paneSettingsButtons.png +0 -0
- data/lib/ar/viewer/chrome/Images/popoverArrows.png +0 -0
- data/lib/ar/viewer/chrome/Images/popoverBackground.png +0 -0
- data/lib/ar/viewer/chrome/Images/profileGroupIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/profileIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/profileSmallIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/profilesSilhouette.png +0 -0
- data/lib/ar/viewer/chrome/Images/programCounterBorder.png +0 -0
- data/lib/ar/viewer/chrome/Images/radioDot.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourceCSSIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourceDocumentIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourceDocumentIconSmall.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourceJSIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourcePlainIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourcePlainIconSmall.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourcesSizeGraphIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/resourcesTimeGraphIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/scriptsSilhouette.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchNext.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchPrev.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchSmallBlue.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchSmallBrightBlue.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchSmallGray.png +0 -0
- data/lib/ar/viewer/chrome/Images/searchSmallWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/segment.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentChromium.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentEnd.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentHover.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentHoverChromium.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentHoverEnd.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentHoverEndChromium.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentSelected.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentSelectedChromium.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentSelectedEnd.png +0 -0
- data/lib/ar/viewer/chrome/Images/segmentSelectedEndChromium.png +0 -0
- data/lib/ar/viewer/chrome/Images/sessionStorage.png +0 -0
- data/lib/ar/viewer/chrome/Images/spinner.gif +0 -0
- data/lib/ar/viewer/chrome/Images/spinnerActive.gif +0 -0
- data/lib/ar/viewer/chrome/Images/spinnerActiveSelected.gif +0 -0
- data/lib/ar/viewer/chrome/Images/spinnerInactive.gif +0 -0
- data/lib/ar/viewer/chrome/Images/spinnerInactiveSelected.gif +0 -0
- data/lib/ar/viewer/chrome/Images/splitviewDimple.png +0 -0
- data/lib/ar/viewer/chrome/Images/splitviewDividerBackground.png +0 -0
- data/lib/ar/viewer/chrome/Images/statusbarButtonGlyphs.png +0 -0
- data/lib/ar/viewer/chrome/Images/statusbarResizerHorizontal.png +0 -0
- data/lib/ar/viewer/chrome/Images/statusbarResizerVertical.png +0 -0
- data/lib/ar/viewer/chrome/Images/successGreenDot.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbActiveHoriz.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbActiveVert.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbHoriz.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbHoverHoriz.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbHoverVert.png +0 -0
- data/lib/ar/viewer/chrome/Images/thumbVert.png +0 -0
- data/lib/ar/viewer/chrome/Images/tickMark.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillBlue.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillGray.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillGreen.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillOrange.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillPurple.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillRed.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelineHollowPillYellow.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillBlue.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillGray.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillGreen.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillOrange.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillPurple.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillRed.png +0 -0
- data/lib/ar/viewer/chrome/Images/timelinePillYellow.png +0 -0
- data/lib/ar/viewer/chrome/Images/toolbarIcons.png +0 -0
- data/lib/ar/viewer/chrome/Images/toolbarIconsSmall.png +0 -0
- data/lib/ar/viewer/chrome/Images/toolbarItemSelected.png +0 -0
- data/lib/ar/viewer/chrome/Images/trackHoriz.png +0 -0
- data/lib/ar/viewer/chrome/Images/trackVert.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeDownTriangleBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeDownTriangleWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeRightTriangleBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeRightTriangleWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeUpTriangleBlack.png +0 -0
- data/lib/ar/viewer/chrome/Images/treeUpTriangleWhite.png +0 -0
- data/lib/ar/viewer/chrome/Images/userInputIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/userInputPreviousIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/userInputResultIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/warningIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/warningMediumIcon.png +0 -0
- data/lib/ar/viewer/chrome/Images/warningOrangeDot.png +0 -0
- data/lib/ar/viewer/chrome/Images/warningsErrors.png +0 -0
- data/lib/ar/viewer/chrome/dataGrid.css +218 -0
- data/lib/ar/viewer/chrome/devTools.css +97 -0
- data/lib/ar/viewer/chrome/dialog.css +55 -0
- data/lib/ar/viewer/chrome/elementsPanel.css +692 -0
- data/lib/ar/viewer/chrome/filteredItemSelectionDialog.css +41 -0
- data/lib/ar/viewer/chrome/heapProfiler.css +263 -0
- data/lib/ar/viewer/chrome/helpScreen.css +286 -0
- data/lib/ar/viewer/chrome/indexedDBViews.css +124 -0
- data/lib/ar/viewer/chrome/inspector.css +2878 -0
- data/lib/ar/viewer/chrome/inspectorCommon.css +177 -0
- data/lib/ar/viewer/chrome/inspectorSyntaxHighlight.css +111 -0
- data/lib/ar/viewer/chrome/nativeMemoryProfiler.css +86 -0
- data/lib/ar/viewer/chrome/navigatorView.css +142 -0
- data/lib/ar/viewer/chrome/networkLogView.css +559 -0
- data/lib/ar/viewer/chrome/networkPanel.css +340 -0
- data/lib/ar/viewer/chrome/panelEnablerView.css +168 -0
- data/lib/ar/viewer/chrome/popover.css +94 -0
- data/lib/ar/viewer/chrome/profilesPanel.css +201 -0
- data/lib/ar/viewer/chrome/resourceView.css +105 -0
- data/lib/ar/viewer/chrome/resourcesPanel.css +331 -0
- data/lib/ar/viewer/chrome/revisionHistory.css +90 -0
- data/lib/ar/viewer/chrome/scriptsPanel.css +286 -0
- data/lib/ar/viewer/chrome/splitView.css +91 -0
- data/lib/ar/viewer/chrome/tabbedPane.css +165 -0
- data/lib/ar/viewer/chrome/textEditor.css +181 -0
- data/lib/ar/viewer/chrome/textPrompt.css +69 -0
- data/lib/ar/viewer/chrome/timelinePanel.css +656 -0
- data/lib/ar/viewer/components/angular/angular.js +14760 -0
- data/lib/ar/viewer/components/angular/angular.min.js +162 -0
- data/lib/ar/viewer/components/angular/component.json +14 -0
- data/lib/ar/viewer/components/jquery/README.md +11 -0
- data/lib/ar/viewer/components/jquery/bower.json +14 -0
- data/lib/ar/viewer/components/jquery/component.json +22 -0
- data/lib/ar/viewer/components/jquery/composer.json +35 -0
- data/lib/ar/viewer/components/jquery/jquery-migrate.js +511 -0
- data/lib/ar/viewer/components/jquery/jquery-migrate.min.js +3 -0
- data/lib/ar/viewer/components/jquery/jquery.js +8755 -0
- data/lib/ar/viewer/components/jquery/jquery.min.js +6 -0
- data/lib/ar/viewer/components/jquery/package.json +7 -0
- data/lib/ar/viewer/css/style.css +186 -0
- data/lib/ar/viewer/index.html +422 -0
- data/lib/ar/viewer/js/controllers.js +124 -0
- data/lib/ar/viewer/js/libs/HAREntry.js +154 -0
- data/lib/ar/viewer/js/libs/devTools.js +371 -0
- data/lib/ar/viewer/js/libs/modernizr.custom.min.js +4 -0
- data/lib/ar/viewer/js/script.js +36 -0
- data/lib/ar/viewer/sample.har +6723 -0
- data/lib/ar/viewer/sass/style.scss +149 -0
- data/lib/{autoresponse.rb → auto_response.rb} +30 -31
- data/readme.md +4 -0
- data/rules.sample +9 -0
- data/test/helper.rb +1 -1
- metadata +365 -9
- data/bin/start_ar.rb +0 -5
- data/bin/start_ar.rb.pid +0 -1
- data/lib/ar/proxyserver.rb +0 -106
- data/lib/ar/viewer/tmpl/index.haml +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee5883eec73a27b407746617b71425860d071f19
|
4
|
+
data.tar.gz: 2cd5a5ca6ec272a54eb829cbd250c6470e0f99b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee950fc92e636d6171856b38688ba16c9b0dad2e22cee76354cf818c2897bf3c4879dacaf419f362c25ff3909ccc832deea1d20356c133f84d59ea229dc3ccfa
|
7
|
+
data.tar.gz: 0674a3690d01b43a0c42e252a12537729328e310239f3a4570142f05a0098ea33ac16f82eaa666fccc21150dc257908725cd1e3784e9df6b79db6cdf82d00be4
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
GEM
|
2
|
-
remote: http://
|
2
|
+
remote: http://ruby.taobao.org/
|
3
3
|
specs:
|
4
4
|
colorize (0.5.8)
|
5
5
|
daemons (1.1.9)
|
6
|
+
ffi (1.9.0)
|
6
7
|
gem-this (0.3.7)
|
7
|
-
haml (3.1.7)
|
8
8
|
listen (0.6.0)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
rack (~> 1.3, >= 1.3.6)
|
14
|
-
rack-protection (~> 1.2)
|
15
|
-
tilt (~> 1.3, >= 1.3.3)
|
9
|
+
ptools (1.2.2)
|
10
|
+
rb-inotify (0.9.0)
|
11
|
+
ffi (>= 0.5.0)
|
12
|
+
string_utf8 (0.1)
|
16
13
|
test-unit (2.5.3)
|
17
|
-
tilt (1.3.3)
|
18
14
|
|
19
15
|
PLATFORMS
|
20
16
|
ruby
|
@@ -23,7 +19,8 @@ DEPENDENCIES
|
|
23
19
|
colorize
|
24
20
|
daemons
|
25
21
|
gem-this
|
26
|
-
haml
|
27
22
|
listen
|
28
|
-
|
23
|
+
ptools
|
24
|
+
rb-inotify (~> 0.9)
|
25
|
+
string_utf8
|
29
26
|
test-unit
|
data/bin/ar
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'daemons'
|
3
2
|
|
4
|
-
|
3
|
+
## compatible with Ruby 1.8
|
4
|
+
unless Kernel.respond_to?(:require_relative)
|
5
|
+
module Kernel
|
6
|
+
def require_relative(path)
|
7
|
+
require File.expand_path(path.to_str, File.dirname(caller[0]))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'daemons'
|
13
|
+
require_relative '../lib/auto_response'
|
5
14
|
|
6
|
-
Daemons.
|
15
|
+
Daemons.run_proc 'auto_response', :backtrace => true do
|
16
|
+
AutoResp::AutoResponder.new.start
|
17
|
+
end
|
data/lib/ar/har.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'cgi'
|
3
|
+
require 'string/utf8'
|
4
|
+
|
5
|
+
module AutoResp
|
6
|
+
|
7
|
+
class HAR
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def sessions_to_har( sessions )
|
12
|
+
har = {
|
13
|
+
:log => {
|
14
|
+
:version => '1.2',
|
15
|
+
:creator => {
|
16
|
+
:name => 'auto_response',
|
17
|
+
:version => AutoResp::VERSION,
|
18
|
+
:comment => 'proxied by auto_response'
|
19
|
+
},
|
20
|
+
:pages => []
|
21
|
+
}
|
22
|
+
}
|
23
|
+
har[:log][:entries] = sessions.map do |session|
|
24
|
+
session_to_entry session
|
25
|
+
end
|
26
|
+
JSON.fast_generate har
|
27
|
+
end
|
28
|
+
|
29
|
+
def session_to_entry( session )
|
30
|
+
req, res, info = *session
|
31
|
+
{
|
32
|
+
pageref: nil,
|
33
|
+
startedDateTime: info[:start],
|
34
|
+
time: info[:end].to_i - info[:start].to_i,
|
35
|
+
request: request_data( req ),
|
36
|
+
response: response_data( res ),
|
37
|
+
cache: cache_data( req, res ),
|
38
|
+
|
39
|
+
#FIXME: add timing feature
|
40
|
+
timings: {
|
41
|
+
blocked: 0,
|
42
|
+
dns: -1,
|
43
|
+
connect: 15,
|
44
|
+
send: 20,
|
45
|
+
wait: 38,
|
46
|
+
receive: 12,
|
47
|
+
ssl: -1,
|
48
|
+
comment: ""
|
49
|
+
},
|
50
|
+
|
51
|
+
serverIPAddress: req.host,
|
52
|
+
#NOT implemented
|
53
|
+
connection: '',
|
54
|
+
comment: info[:matched] ? 'x-auto-response' : nil
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def request_data( req )
|
59
|
+
{
|
60
|
+
method: req.request_method,
|
61
|
+
url: req.unparsed_uri,
|
62
|
+
httpVersion: req.http_version,
|
63
|
+
cookies: req.cookies.map {|c| cookie_data( c ) },
|
64
|
+
headers: req.header.map { |h| header_data( h ) },
|
65
|
+
queryString: CGI.parse(req.query_string || ''),
|
66
|
+
#TODO: parse post data
|
67
|
+
postData: {},
|
68
|
+
headersSize: 0,
|
69
|
+
bodySize: (req.body ? req.content_length : 0),
|
70
|
+
comment: nil
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def cookie_data( cookie )
|
75
|
+
{
|
76
|
+
name: cookie.name,
|
77
|
+
value: cookie.value,
|
78
|
+
path: cookie.path,
|
79
|
+
domain: cookie.domain,
|
80
|
+
expires: cookie.expires,
|
81
|
+
#FIXME: check httponly
|
82
|
+
httpOnly: nil,
|
83
|
+
secure: cookie.secure,
|
84
|
+
comment: nil
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def header_data( header )
|
89
|
+
name, value = *header
|
90
|
+
value = value.join("\n") if value.is_a?(Array)
|
91
|
+
{
|
92
|
+
name: name,
|
93
|
+
value: value,
|
94
|
+
comment: nil
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
def response_data( res )
|
99
|
+
body = res.body
|
100
|
+
body.utf8!
|
101
|
+
body = '**raw data**' unless body.valid_encoding?
|
102
|
+
{
|
103
|
+
status: res.status,
|
104
|
+
statusText: res.message,
|
105
|
+
|
106
|
+
httpVersion: res.http_version,
|
107
|
+
cookies: res.cookies.map {|c|
|
108
|
+
cookie_data( WEBrick::Cookie.parse_set_cookie c) },
|
109
|
+
headers: res.header.map {|h| header_data(h) },
|
110
|
+
content: body,
|
111
|
+
|
112
|
+
#FIXME
|
113
|
+
redirectURL: '',
|
114
|
+
headerSize: 160,
|
115
|
+
|
116
|
+
bodySize: res.content_length,
|
117
|
+
comment: nil
|
118
|
+
}
|
119
|
+
end
|
120
|
+
|
121
|
+
def cache_data( req, res )
|
122
|
+
{
|
123
|
+
#FIXME
|
124
|
+
beforeRequest: nil,
|
125
|
+
afterRequest: nil
|
126
|
+
}
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'webrick/httpproxy'
|
2
|
+
require 'logger'
|
3
|
+
require 'ptools'
|
4
|
+
|
5
|
+
require_relative 'rule_manager'
|
6
|
+
require_relative 'parser'
|
7
|
+
|
8
|
+
module AutoResp
|
9
|
+
|
10
|
+
class ProxyServer < WEBrick::HTTPProxyServer
|
11
|
+
|
12
|
+
include Parser
|
13
|
+
attr_reader :sessions
|
14
|
+
|
15
|
+
def initialize(core, config={})
|
16
|
+
@core = core
|
17
|
+
super(config.update({
|
18
|
+
:AccessLog => [],
|
19
|
+
:Logger => WEBrick::Log.new("/dev/null")
|
20
|
+
}))
|
21
|
+
@sessions = []
|
22
|
+
@ar_logger = config[:logger] || Logger.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def service(req, res)
|
26
|
+
logger.info "[#{req.unparsed_uri}]"
|
27
|
+
info = { start: Time.now }
|
28
|
+
|
29
|
+
before_filters.each do |block|
|
30
|
+
if block.call( req, res ) == false
|
31
|
+
super req, res
|
32
|
+
return
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
header, body, status = find_auto_res(req.unparsed_uri)
|
37
|
+
res.status = status if status
|
38
|
+
|
39
|
+
if @rule
|
40
|
+
|
41
|
+
logger.debug "match".ljust(8) << ": #{req.unparsed_uri}"
|
42
|
+
logger.debug "header".ljust(8) << ": #{header}"
|
43
|
+
logger.debug "body".ljust(8) << ": \n#{body}"
|
44
|
+
logger.debug "-"*50
|
45
|
+
|
46
|
+
res['x-auto-response-condition'] = @rule.first.to_s
|
47
|
+
res['x-auto-response-with'] = @rule.last.to_s
|
48
|
+
if header
|
49
|
+
header.each do |k,v|
|
50
|
+
v = v.join("\n") if v.respond_to?(:join)
|
51
|
+
res[k] = v
|
52
|
+
end
|
53
|
+
end
|
54
|
+
res.body = body
|
55
|
+
info[:matched] = true
|
56
|
+
else
|
57
|
+
super(req, res)
|
58
|
+
end
|
59
|
+
|
60
|
+
info[:end] = Time.now
|
61
|
+
sessions << [req, res, info]
|
62
|
+
end
|
63
|
+
|
64
|
+
def before_filters
|
65
|
+
@before_filters ||= []
|
66
|
+
end
|
67
|
+
|
68
|
+
def before_filter(&block)
|
69
|
+
logger.info "add before_filter".green
|
70
|
+
before_filters << block
|
71
|
+
end
|
72
|
+
|
73
|
+
def clear_before_filters
|
74
|
+
@before_filters.clear
|
75
|
+
end
|
76
|
+
|
77
|
+
def find_auto_res(url)
|
78
|
+
rule = @core.rules.find do |condition, map_to|
|
79
|
+
matched? url, condition
|
80
|
+
end
|
81
|
+
|
82
|
+
@rule = rule
|
83
|
+
if rule
|
84
|
+
condition, handlers = *rule
|
85
|
+
handlers.each {|proc| proc.call if proc.respond_to?(:call) }
|
86
|
+
fetch(handlers.last, condition, url)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def matched?( url, rule )
|
91
|
+
trim_url(rule) === trim_url(url)
|
92
|
+
end
|
93
|
+
|
94
|
+
def fetch(txt, declare, uri)
|
95
|
+
|
96
|
+
case txt
|
97
|
+
when nil
|
98
|
+
Net::HTTP.get_response(URI(uri)) do |res|
|
99
|
+
return [res.to_hash, res.read_body, res.code]
|
100
|
+
end
|
101
|
+
when Proc
|
102
|
+
if Regexp === declare
|
103
|
+
mtc = uri.match(declare)
|
104
|
+
fetch( txt.call(*mtc), declare, uri )
|
105
|
+
else
|
106
|
+
fetch( txt.call, declare, uri )
|
107
|
+
end
|
108
|
+
when String
|
109
|
+
if goto = redirect_path(txt)
|
110
|
+
if is_uri?(goto)
|
111
|
+
Net::HTTP.get_response(URI(goto)) do |res|
|
112
|
+
return [res.to_hash, res.read_body, res.code]
|
113
|
+
end
|
114
|
+
else
|
115
|
+
file = File.expand_path( goto )
|
116
|
+
if File.exist?(file)
|
117
|
+
content = IO.read file
|
118
|
+
if File.binary? file
|
119
|
+
return [nil, content, 200]
|
120
|
+
else
|
121
|
+
return parse(content)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
else
|
126
|
+
parse(txt)
|
127
|
+
end
|
128
|
+
when Fixnum
|
129
|
+
[{}, "", txt]
|
130
|
+
when Array
|
131
|
+
[txt[1], txt[2], txt[0]]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
def redirect_path(t)
|
137
|
+
if is_single_line?(t)
|
138
|
+
(t.match(/^=GOTO=> (\S.*?)\s*$/) || [] )[1]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def is_uri?(txt)
|
143
|
+
/^[A-Za-z][A-Za-z0-9+\-\.]*:\/\/.+/ =~ txt
|
144
|
+
end
|
145
|
+
|
146
|
+
def header_hash(header)
|
147
|
+
h = header.to_hash
|
148
|
+
h.each do |n,v|
|
149
|
+
h[n] = v.join if Array === v
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def trim_url(url)
|
154
|
+
if url.is_a? String
|
155
|
+
url.sub(/\/$/, '')
|
156
|
+
else
|
157
|
+
url
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def is_single_line?(text)
|
162
|
+
text.count("\n") < 2
|
163
|
+
end
|
164
|
+
|
165
|
+
def logger
|
166
|
+
@ar_logger
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
data/lib/ar/rule_dsl.rb
CHANGED
data/lib/ar/rule_manager.rb
CHANGED
data/lib/ar/session_viewer.rb
CHANGED
@@ -1,22 +1,27 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'webrick/httpserver'
|
2
|
+
require 'ar/har'
|
3
3
|
|
4
4
|
module AutoResp
|
5
5
|
|
6
|
-
class SessionViewer
|
6
|
+
class SessionViewer
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
def initialize( proxy_server )
|
9
|
+
@proxy_server = proxy_server
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
def run
|
13
|
+
root = File.expand_path('./viewer', File.dirname(__FILE__))
|
14
|
+
server = WEBrick::HTTPServer.new({
|
15
|
+
:BindAddress => '0.0.0.0',
|
16
|
+
:Port => 9090,
|
17
|
+
:AccessLog => [],
|
18
|
+
:Logger => WEBrick::Log.new("/dev/null"),
|
19
|
+
:DocumentRoot => root
|
20
|
+
})
|
21
|
+
server.mount_proc '/sessions.har' do |req, res|
|
22
|
+
res.body = HAR.sessions_to_har( @proxy_server.sessions )
|
23
|
+
end
|
24
|
+
server.start
|
20
25
|
end
|
21
26
|
|
22
27
|
end
|
data/lib/ar/version.rb
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|