PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/dialogs/ConfigDialog.py

http://raft.googlecode.com/
Python | 168 lines | 119 code | 25 blank | 24 comment | 9 complexity | b94c31b1daf0eed15940b3662b772edb MD5 | raw file
Possible License(s): GPL-3.0
  1. #
  2. # configuration dialog
  3. #
  4. # Authors:
  5. # Gregory Fleischer (gfleischer@gmail.com)
  6. #
  7. # Copyright (c) 2011 RAFT Team
  8. #
  9. # This file is part of RAFT.
  10. #
  11. # RAFT is free software: you can redistribute it and/or modify
  12. # it under the terms of the GNU General Public License as published by
  13. # the Free Software Foundation, either version 3 of the License, or
  14. # (at your option) any later version.
  15. #
  16. # RAFT is distributed in the hope that it will be useful,
  17. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. # GNU General Public License for more details.
  20. #
  21. # You should have received a copy of the GNU General Public License
  22. # along with RAFT. If not, see <http://www.gnu.org/licenses/>.
  23. #
  24. from PyQt4.QtCore import (Qt, SIGNAL, QObject)
  25. from PyQt4.QtGui import *
  26. from ui import ConfigDialog
  27. from tabs import DataBankTab
  28. import json
  29. class ConfigDialog(QDialog, ConfigDialog.Ui_configDialog):
  30. """ The Config Dialog """
  31. def __init__(self, framework, parent=None):
  32. super(ConfigDialog, self).__init__(parent)
  33. self.setupUi(self)
  34. self.framework = framework
  35. self.buttonBox.clicked.connect(self.handle_buttonBox_clicked)
  36. self.checkBoxUseProxy.stateChanged.connect(self.handle_useProxy_stateChanged)
  37. self.browserCustomUserAgentCheckBox.stateChanged.connect(self.handle_browserCustomUserAgent_stateChanged)
  38. self.spiderExcludeDangerouPathCheckBox.stateChanged.connect(self.handle_spiderExcludeDangerouPath_stateChanged)
  39. self.framework.subscribe_raft_config_populated(self.configuration_populated)
  40. self.dataBankTab = DataBankTab.DataBankTab(self.framework, self)
  41. def configuration_populated(self):
  42. self.fill_values()
  43. def fill_values(self):
  44. self.bhNetworkBox.setChecked(self.framework.get_raft_config_value('black_hole_network', bool))
  45. self.checkBoxUseProxy.setChecked(self.framework.get_raft_config_value('use_proxy', bool))
  46. self.confProxyEdit.setText(self.framework.get_raft_config_value('proxy_host'))
  47. self.confProxyPort.setText(self.framework.get_raft_config_value('proxy_port'))
  48. self.set_enable_proxy_edits()
  49. self.fill_browser_edits()
  50. self.fill_crawler_edits()
  51. def handle_buttonBox_clicked(self, button):
  52. role = self.buttonBox.buttonRole(button)
  53. if role == QDialogButtonBox.AcceptRole:
  54. self.do_save_config()
  55. self.dataBankTab.do_save_databank()
  56. def do_save_config(self):
  57. self.framework.set_raft_config_value('black_hole_network', bool(self.bhNetworkBox.isChecked()))
  58. if self.checkBoxUseProxy.isChecked():
  59. self.framework.set_raft_config_value('proxy_host', str(self.confProxyEdit.text()))
  60. self.framework.set_raft_config_value('proxy_port', int(self.confProxyPort.text()))
  61. self.framework.set_raft_config_value('use_proxy', True)
  62. else:
  63. self.framework.set_raft_config_value('use_proxy', False)
  64. self.save_browser_config()
  65. self.save_crawler_config()
  66. def handle_useProxy_stateChanged(self, state):
  67. self.set_enable_proxy_edits()
  68. def set_enable_proxy_edits(self):
  69. if self.checkBoxUseProxy.isChecked():
  70. self.confProxyEdit.setEnabled(True)
  71. self.confProxyPort.setEnabled(True)
  72. else:
  73. self.confProxyEdit.setEnabled(False)
  74. self.confProxyPort.setEnabled(False)
  75. def fill_crawler_edits(self):
  76. self.fill_spider_edits()
  77. def save_crawler_config(self):
  78. self.save_spider_config()
  79. def value_or_default(self, obj, name, default_value):
  80. if obj.has_key(name):
  81. return obj[name]
  82. else:
  83. return default_value
  84. def handle_spiderExcludeDangerouPath_stateChanged(self):
  85. self.spiderDangerousPathEdit.setEnabled(self.spiderExcludeDangerouPathCheckBox.isChecked())
  86. def handle_browserCustomUserAgent_stateChanged(self):
  87. self.browserUserAgentEdit.setEnabled(self.browserCustomUserAgentCheckBox.isChecked())
  88. def fill_spider_edits(self):
  89. configuration = self.framework.get_raft_config_value('SPIDER', str)
  90. if configuration:
  91. obj = json.loads(configuration)
  92. else:
  93. obj = {}
  94. self.spiderSubmitFormsCheckBox.setChecked(bool(self.value_or_default(obj, 'submit_forms', True)))
  95. self.spiderUseDataBankCheckBox.setChecked(bool(self.value_or_default(obj, 'use_data_bank', True)))
  96. self.spiderSubmitUsernamePasswordCheckBox.setChecked(bool(self.value_or_default(obj, 'submit_user_name_password', True)))
  97. self.spiderEvaluateJavascriptCheckBox.setChecked(bool(self.value_or_default(obj, 'evaluate_javascript', True)))
  98. self.spiderIterateUserAgentsCheckBox.setChecked(bool(self.value_or_default(obj, 'iterate_user_agents', True)))
  99. self.spiderRetrieveMediaFilesCheckBox.setChecked(bool(self.value_or_default(obj, 'retrieve_media_files', True)))
  100. self.spiderExcludeDangerouPathCheckBox.setChecked(bool(self.value_or_default(obj, 'exclude_dangerous_paths', False)))
  101. self.spiderDangerousPathEdit.setText(str(self.value_or_default(obj, 'dangerous_path', 'delete|remove|destroy')))
  102. self.spiderMaxLinksEdit.setText(str(self.value_or_default(obj, 'max_links', 8192)))
  103. self.spiderMaxLinkDepthEdit.setText(str(self.value_or_default(obj, 'max_link_depth', 5)))
  104. self.spiderMaxChildrenEdit.setText(str(self.value_or_default(obj, 'max_children', 256)))
  105. self.spiderMaxUniqueParametersEdit.setText(str(self.value_or_default(obj, 'max_unique_parameters', 16)))
  106. self.spiderRedundantContentLimit.setText(str(self.value_or_default(obj, 'redundant_content_limit', 128)))
  107. self.spiderRedundantStructureLimit.setText(str(self.value_or_default(obj, 'redundant_structure_limit', 256)))
  108. self.spiderMediaExtensionsEdit.setText(str(self.value_or_default(obj, 'media_extensions', 'wmv,mp3,mp4,mpa,gif,jpg,jpeg,png')))
  109. def save_spider_config(self):
  110. obj = {}
  111. obj['submit_forms'] = self.spiderSubmitFormsCheckBox.isChecked()
  112. obj['use_data_bank'] = self.spiderUseDataBankCheckBox.isChecked()
  113. obj['submit_user_name_password'] = self.spiderSubmitUsernamePasswordCheckBox.isChecked()
  114. obj['evaluate_javascript'] = self.spiderEvaluateJavascriptCheckBox.isChecked()
  115. obj['iterate_user_agents'] = self.spiderIterateUserAgentsCheckBox.isChecked()
  116. obj['retrieve_media_files'] = self.spiderRetrieveMediaFilesCheckBox.isChecked()
  117. obj['exclude_dangerous_paths'] = self.spiderExcludeDangerouPathCheckBox.isChecked()
  118. obj['dangerous_path'] = str(self.spiderDangerousPathEdit.text().toUtf8())
  119. obj['max_links'] = int(self.spiderMaxLinksEdit.text().toUtf8())
  120. obj['max_link_depth'] = int(self.spiderMaxLinkDepthEdit.text().toUtf8())
  121. obj['max_children'] = int(self.spiderMaxChildrenEdit.text().toUtf8())
  122. obj['max_unique_parameters'] = int(self.spiderMaxUniqueParametersEdit.text().toUtf8())
  123. obj['redundant_content_limit'] = int(self.spiderRedundantContentLimit.text().toUtf8())
  124. obj['redundant_structure_limit'] = int(self.spiderRedundantStructureLimit.text().toUtf8())
  125. obj['media_extensions'] = str(self.spiderMediaExtensionsEdit.text().toUtf8())
  126. configuration = json.dumps(obj)
  127. self.framework.set_raft_config_value('SPIDER', configuration)
  128. def fill_browser_edits(self):
  129. self.browserEnableJavaScriptCheckBox.setChecked(self.framework.get_raft_config_value('browser_javascript_enabled', bool, True))
  130. self.browserEnableWebStorageCheckBox.setChecked(self.framework.get_raft_config_value('browser_web_storage_enabled', bool, True))
  131. self.browserEnablePluginsCheckBox.setChecked(self.framework.get_raft_config_value('browser_plugins_enabled', bool, True))
  132. self.browserEnableJavaCheckBox.setChecked(self.framework.get_raft_config_value('browser_java_enabled', bool, True))
  133. self.browserAutoLoadImagesCheckBox.setChecked(self.framework.get_raft_config_value('browser_auto_load_images', bool, True))
  134. self.browserCustomUserAgentCheckBox.setChecked(self.framework.get_raft_config_value('browser_custom_user_agent', bool, False))
  135. self.browserUserAgentEdit.setText(str(self.framework.get_raft_config_value('browser_user_agent_value', str, self.framework.useragent())))
  136. def save_browser_config(self):
  137. self.framework.set_raft_config_value('browser_javascript_enabled', self.browserEnableJavaScriptCheckBox.isChecked())
  138. self.framework.set_raft_config_value('browser_web_storage_enabled', self.browserEnableWebStorageCheckBox.isChecked())
  139. self.framework.set_raft_config_value('browser_plugins_enabled', self.browserEnablePluginsCheckBox.isChecked())
  140. self.framework.set_raft_config_value('browser_java_enabled', self.browserEnableJavaCheckBox.isChecked())
  141. self.framework.set_raft_config_value('browser_auto_load_images', self.browserAutoLoadImagesCheckBox.isChecked())
  142. self.framework.set_raft_config_value('browser_custom_user_agent', self.browserCustomUserAgentCheckBox.isChecked())
  143. self.framework.set_raft_config_value('browser_user_agent_value', self.browserUserAgentEdit.text().toUtf8())