metasploit-model 0.24.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +27 -0
  4. data/.rspec +4 -0
  5. data/.simplecov +38 -0
  6. data/.travis.yml +6 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +43 -0
  9. data/LICENSE +27 -0
  10. data/README.md +33 -0
  11. data/Rakefile +52 -0
  12. data/app/models/metasploit/model/association/reflection.rb +46 -0
  13. data/app/models/metasploit/model/module/ancestor/spec/template.rb +125 -0
  14. data/app/models/metasploit/model/module/class/spec/template.rb +92 -0
  15. data/app/models/metasploit/model/module/instance/spec/template.rb +97 -0
  16. data/app/models/metasploit/model/search/group/base.rb +21 -0
  17. data/app/models/metasploit/model/search/group/intersection.rb +4 -0
  18. data/app/models/metasploit/model/search/group/union.rb +4 -0
  19. data/app/models/metasploit/model/search/operation/base.rb +39 -0
  20. data/app/models/metasploit/model/search/operation/boolean.rb +36 -0
  21. data/app/models/metasploit/model/search/operation/date.rb +37 -0
  22. data/app/models/metasploit/model/search/operation/integer.rb +14 -0
  23. data/app/models/metasploit/model/search/operation/null.rb +26 -0
  24. data/app/models/metasploit/model/search/operation/set.rb +34 -0
  25. data/app/models/metasploit/model/search/operation/set/integer.rb +5 -0
  26. data/app/models/metasploit/model/search/operation/set/string.rb +5 -0
  27. data/app/models/metasploit/model/search/operation/string.rb +11 -0
  28. data/app/models/metasploit/model/search/operation/union.rb +59 -0
  29. data/app/models/metasploit/model/search/operator/association.rb +43 -0
  30. data/app/models/metasploit/model/search/operator/attribute.rb +60 -0
  31. data/app/models/metasploit/model/search/operator/base.rb +34 -0
  32. data/app/models/metasploit/model/search/operator/delegation.rb +40 -0
  33. data/app/models/metasploit/model/search/operator/deprecated/app.rb +27 -0
  34. data/app/models/metasploit/model/search/operator/deprecated/author.rb +33 -0
  35. data/app/models/metasploit/model/search/operator/deprecated/authority.rb +43 -0
  36. data/app/models/metasploit/model/search/operator/deprecated/platform.rb +45 -0
  37. data/app/models/metasploit/model/search/operator/deprecated/ref.rb +50 -0
  38. data/app/models/metasploit/model/search/operator/deprecated/text.rb +32 -0
  39. data/app/models/metasploit/model/search/operator/null.rb +44 -0
  40. data/app/models/metasploit/model/search/operator/single.rb +98 -0
  41. data/app/models/metasploit/model/search/operator/union.rb +33 -0
  42. data/app/models/metasploit/model/search/query.rb +171 -0
  43. data/app/models/metasploit/model/spec/template.rb +273 -0
  44. data/app/models/metasploit/model/visitation/visitor.rb +69 -0
  45. data/app/validators/derivation_validator.rb +17 -0
  46. data/app/validators/dynamic_length_validator.rb +45 -0
  47. data/app/validators/ip_format_validator.rb +31 -0
  48. data/app/validators/nil_validator.rb +16 -0
  49. data/app/validators/parameters_validator.rb +147 -0
  50. data/app/validators/password_is_strong_validator.rb +115 -0
  51. data/config/locales/en.yml +209 -0
  52. data/lib/metasploit/model.rb +38 -0
  53. data/lib/metasploit/model/architecture.rb +346 -0
  54. data/lib/metasploit/model/association.rb +49 -0
  55. data/lib/metasploit/model/association/error.rb +40 -0
  56. data/lib/metasploit/model/author.rb +58 -0
  57. data/lib/metasploit/model/authority.rb +134 -0
  58. data/lib/metasploit/model/authority/bid.rb +10 -0
  59. data/lib/metasploit/model/authority/cve.rb +10 -0
  60. data/lib/metasploit/model/authority/msb.rb +10 -0
  61. data/lib/metasploit/model/authority/osvdb.rb +10 -0
  62. data/lib/metasploit/model/authority/pmasa.rb +10 -0
  63. data/lib/metasploit/model/authority/secunia.rb +10 -0
  64. data/lib/metasploit/model/authority/us_cert_vu.rb +10 -0
  65. data/lib/metasploit/model/authority/waraxe.rb +31 -0
  66. data/lib/metasploit/model/authority/zdi.rb +10 -0
  67. data/lib/metasploit/model/base.rb +25 -0
  68. data/lib/metasploit/model/configuration.rb +72 -0
  69. data/lib/metasploit/model/configuration/autoload.rb +109 -0
  70. data/lib/metasploit/model/configuration/child.rb +12 -0
  71. data/lib/metasploit/model/configuration/error.rb +4 -0
  72. data/lib/metasploit/model/configuration/i18n.rb +54 -0
  73. data/lib/metasploit/model/configuration/parent.rb +50 -0
  74. data/lib/metasploit/model/configured.rb +46 -0
  75. data/lib/metasploit/model/derivation.rb +110 -0
  76. data/lib/metasploit/model/derivation/full_name.rb +25 -0
  77. data/lib/metasploit/model/email_address.rb +128 -0
  78. data/lib/metasploit/model/engine.rb +34 -0
  79. data/lib/metasploit/model/error.rb +7 -0
  80. data/lib/metasploit/model/file.rb +49 -0
  81. data/lib/metasploit/model/invalid.rb +17 -0
  82. data/lib/metasploit/model/module.rb +8 -0
  83. data/lib/metasploit/model/module/action.rb +58 -0
  84. data/lib/metasploit/model/module/ancestor.rb +494 -0
  85. data/lib/metasploit/model/module/architecture.rb +40 -0
  86. data/lib/metasploit/model/module/author.rb +47 -0
  87. data/lib/metasploit/model/module/class.rb +406 -0
  88. data/lib/metasploit/model/module/handler.rb +35 -0
  89. data/lib/metasploit/model/module/instance.rb +626 -0
  90. data/lib/metasploit/model/module/path.rb +165 -0
  91. data/lib/metasploit/model/module/platform.rb +38 -0
  92. data/lib/metasploit/model/module/rank.rb +91 -0
  93. data/lib/metasploit/model/module/reference.rb +38 -0
  94. data/lib/metasploit/model/module/stance.rb +22 -0
  95. data/lib/metasploit/model/module/target.rb +80 -0
  96. data/lib/metasploit/model/module/target/architecture.rb +42 -0
  97. data/lib/metasploit/model/module/target/platform.rb +42 -0
  98. data/lib/metasploit/model/module/type.rb +44 -0
  99. data/lib/metasploit/model/nilify_blanks.rb +53 -0
  100. data/lib/metasploit/model/platform.rb +250 -0
  101. data/lib/metasploit/model/real_pathname.rb +18 -0
  102. data/lib/metasploit/model/reference.rb +108 -0
  103. data/lib/metasploit/model/search.rb +63 -0
  104. data/lib/metasploit/model/search/association.rb +32 -0
  105. data/lib/metasploit/model/search/attribute.rb +51 -0
  106. data/lib/metasploit/model/search/operation.rb +31 -0
  107. data/lib/metasploit/model/search/operation/integer/value.rb +33 -0
  108. data/lib/metasploit/model/search/operation/string/value.rb +14 -0
  109. data/lib/metasploit/model/search/operator.rb +10 -0
  110. data/lib/metasploit/model/search/operator/help.rb +47 -0
  111. data/lib/metasploit/model/search/with.rb +40 -0
  112. data/lib/metasploit/model/spec.rb +140 -0
  113. data/lib/metasploit/model/spec/error.rb +9 -0
  114. data/lib/metasploit/model/spec/i18n_exception_handler.rb +19 -0
  115. data/lib/metasploit/model/spec/pathname_collision.rb +28 -0
  116. data/lib/metasploit/model/spec/template/write.rb +42 -0
  117. data/lib/metasploit/model/spec/temporary_pathname.rb +59 -0
  118. data/lib/metasploit/model/translation.rb +31 -0
  119. data/lib/metasploit/model/version.rb +31 -0
  120. data/lib/metasploit/model/visitation.rb +9 -0
  121. data/lib/metasploit/model/visitation/visit.rb +103 -0
  122. data/lib/tasks/yard.rake +30 -0
  123. data/metasploit-model.gemspec +39 -0
  124. data/script/rails +9 -0
  125. data/spec/app/models/metasploit/model/association/reflection_spec.rb +48 -0
  126. data/spec/app/models/metasploit/model/module/ancestor/spec/template_spec.rb +174 -0
  127. data/spec/app/models/metasploit/model/module/class/spec/template_spec.rb +222 -0
  128. data/spec/app/models/metasploit/model/module/instance/spec/template_spec.rb +201 -0
  129. data/spec/app/models/metasploit/model/search/group/base_spec.rb +5 -0
  130. data/spec/app/models/metasploit/model/search/group/intersection_spec.rb +5 -0
  131. data/spec/app/models/metasploit/model/search/group/union_spec.rb +5 -0
  132. data/spec/app/models/metasploit/model/search/operation/base_spec.rb +70 -0
  133. data/spec/app/models/metasploit/model/search/operation/boolean_spec.rb +56 -0
  134. data/spec/app/models/metasploit/model/search/operation/date_spec.rb +89 -0
  135. data/spec/app/models/metasploit/model/search/operation/integer_spec.rb +9 -0
  136. data/spec/app/models/metasploit/model/search/operation/null_spec.rb +64 -0
  137. data/spec/app/models/metasploit/model/search/operation/set/integer_spec.rb +7 -0
  138. data/spec/app/models/metasploit/model/search/operation/set/string_spec.rb +7 -0
  139. data/spec/app/models/metasploit/model/search/operation/set_spec.rb +126 -0
  140. data/spec/app/models/metasploit/model/search/operation/string_spec.rb +9 -0
  141. data/spec/app/models/metasploit/model/search/operation/union_spec.rb +124 -0
  142. data/spec/app/models/metasploit/model/search/operator/association_spec.rb +108 -0
  143. data/spec/app/models/metasploit/model/search/operator/attribute_spec.rb +104 -0
  144. data/spec/app/models/metasploit/model/search/operator/base_spec.rb +34 -0
  145. data/spec/app/models/metasploit/model/search/operator/delegation_spec.rb +108 -0
  146. data/spec/app/models/metasploit/model/search/operator/deprecated/app_spec.rb +62 -0
  147. data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +161 -0
  148. data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +123 -0
  149. data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +112 -0
  150. data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +327 -0
  151. data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +357 -0
  152. data/spec/app/models/metasploit/model/search/operator/null_spec.rb +41 -0
  153. data/spec/app/models/metasploit/model/search/operator/single_spec.rb +327 -0
  154. data/spec/app/models/metasploit/model/search/operator/union_spec.rb +92 -0
  155. data/spec/app/models/metasploit/model/search/query_spec.rb +742 -0
  156. data/spec/app/models/metasploit/model/spec/template_spec.rb +23 -0
  157. data/spec/app/models/metasploit/model/visitation/visitor_spec.rb +45 -0
  158. data/spec/app/validators/derivation_validator_spec.rb +92 -0
  159. data/spec/app/validators/dynamic_length_validator_spec.rb +293 -0
  160. data/spec/app/validators/ip_format_validator_spec.rb +124 -0
  161. data/spec/app/validators/nil_validator_spec.rb +69 -0
  162. data/spec/app/validators/parameters_validator_spec.rb +342 -0
  163. data/spec/app/validators/password_is_strong_validator_spec.rb +250 -0
  164. data/spec/dummy/Rakefile +7 -0
  165. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  166. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  167. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  168. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  169. data/spec/dummy/app/mailers/.gitkeep +0 -0
  170. data/spec/dummy/app/models/dummy/architecture.rb +92 -0
  171. data/spec/dummy/app/models/dummy/author.rb +15 -0
  172. data/spec/dummy/app/models/dummy/authority.rb +130 -0
  173. data/spec/dummy/app/models/dummy/email_address.rb +27 -0
  174. data/spec/dummy/app/models/dummy/module/action.rb +25 -0
  175. data/spec/dummy/app/models/dummy/module/ancestor.rb +67 -0
  176. data/spec/dummy/app/models/dummy/module/architecture.rb +19 -0
  177. data/spec/dummy/app/models/dummy/module/author.rb +28 -0
  178. data/spec/dummy/app/models/dummy/module/class.rb +69 -0
  179. data/spec/dummy/app/models/dummy/module/instance.rb +209 -0
  180. data/spec/dummy/app/models/dummy/module/path.rb +64 -0
  181. data/spec/dummy/app/models/dummy/module/platform.rb +19 -0
  182. data/spec/dummy/app/models/dummy/module/rank.rb +44 -0
  183. data/spec/dummy/app/models/dummy/module/reference.rb +19 -0
  184. data/spec/dummy/app/models/dummy/module/target.rb +62 -0
  185. data/spec/dummy/app/models/dummy/module/target/architecture.rb +19 -0
  186. data/spec/dummy/app/models/dummy/module/target/platform.rb +19 -0
  187. data/spec/dummy/app/models/dummy/platform.rb +58 -0
  188. data/spec/dummy/app/models/dummy/reference.rb +31 -0
  189. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  190. data/spec/dummy/config.ru +4 -0
  191. data/spec/dummy/config/application.rb +43 -0
  192. data/spec/dummy/config/boot.rb +10 -0
  193. data/spec/dummy/config/environment.rb +5 -0
  194. data/spec/dummy/config/environments/development.rb +27 -0
  195. data/spec/dummy/config/environments/production.rb +63 -0
  196. data/spec/dummy/config/environments/test.rb +29 -0
  197. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  198. data/spec/dummy/config/initializers/inflections.rb +15 -0
  199. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  200. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  201. data/spec/dummy/config/initializers/session_store.rb +3 -0
  202. data/spec/dummy/config/initializers/wrap_parameters.rb +9 -0
  203. data/spec/dummy/config/locales/en.yml +1 -0
  204. data/spec/dummy/config/routes.rb +2 -0
  205. data/spec/dummy/db/schema.rb +707 -0
  206. data/spec/dummy/lib/assets/.gitkeep +0 -0
  207. data/spec/dummy/log/.gitkeep +0 -0
  208. data/spec/dummy/public/404.html +26 -0
  209. data/spec/dummy/public/422.html +26 -0
  210. data/spec/dummy/public/500.html +25 -0
  211. data/spec/dummy/public/favicon.ico +0 -0
  212. data/spec/dummy/script/rails +6 -0
  213. data/spec/dummy/spec/factories/dummy/architectures.rb +13 -0
  214. data/spec/dummy/spec/factories/dummy/authorities.rb +32 -0
  215. data/spec/dummy/spec/factories/dummy/authors.rb +8 -0
  216. data/spec/dummy/spec/factories/dummy/email_addresses.rb +8 -0
  217. data/spec/dummy/spec/factories/dummy/module/actions.rb +13 -0
  218. data/spec/dummy/spec/factories/dummy/module/ancestors.rb +45 -0
  219. data/spec/dummy/spec/factories/dummy/module/architectures.rb +35 -0
  220. data/spec/dummy/spec/factories/dummy/module/authors.rb +10 -0
  221. data/spec/dummy/spec/factories/dummy/module/classes.rb +40 -0
  222. data/spec/dummy/spec/factories/dummy/module/instances.rb +86 -0
  223. data/spec/dummy/spec/factories/dummy/module/paths.rb +16 -0
  224. data/spec/dummy/spec/factories/dummy/module/platforms.rb +35 -0
  225. data/spec/dummy/spec/factories/dummy/module/ranks.rb +14 -0
  226. data/spec/dummy/spec/factories/dummy/module/references.rb +17 -0
  227. data/spec/dummy/spec/factories/dummy/module/target/architectures.rb +40 -0
  228. data/spec/dummy/spec/factories/dummy/module/target/platforms.rb +41 -0
  229. data/spec/dummy/spec/factories/dummy/module/targets.rb +46 -0
  230. data/spec/dummy/spec/factories/dummy/platforms.rb +3 -0
  231. data/spec/dummy/spec/factories/dummy/references.rb +26 -0
  232. data/spec/factories/metasploit/model/architectures.rb +6 -0
  233. data/spec/factories/metasploit/model/association/reflections.rb +9 -0
  234. data/spec/factories/metasploit/model/authorities.rb +28 -0
  235. data/spec/factories/metasploit/model/authors.rb +9 -0
  236. data/spec/factories/metasploit/model/bases.rb +10 -0
  237. data/spec/factories/metasploit/model/email_addresses.rb +14 -0
  238. data/spec/factories/metasploit/model/module/actions.rb +9 -0
  239. data/spec/factories/metasploit/model/module/ancestors.rb +180 -0
  240. data/spec/factories/metasploit/model/module/architectures.rb +15 -0
  241. data/spec/factories/metasploit/model/module/classes.rb +47 -0
  242. data/spec/factories/metasploit/model/module/handlers.rb +3 -0
  243. data/spec/factories/metasploit/model/module/instances.rb +83 -0
  244. data/spec/factories/metasploit/model/module/paths.rb +51 -0
  245. data/spec/factories/metasploit/model/module/platforms.rb +15 -0
  246. data/spec/factories/metasploit/model/module/ranks.rb +9 -0
  247. data/spec/factories/metasploit/model/module/references.rb +11 -0
  248. data/spec/factories/metasploit/model/module/stances.rb +3 -0
  249. data/spec/factories/metasploit/model/module/targets.rb +22 -0
  250. data/spec/factories/metasploit/model/module/types.rb +5 -0
  251. data/spec/factories/metasploit/model/references.rb +88 -0
  252. data/spec/factories/metasploit/model/search/operator/associations.rb +5 -0
  253. data/spec/factories/metasploit/model/search/operator/attributes.rb +7 -0
  254. data/spec/factories/metasploit/model/search/operator/bases.rb +5 -0
  255. data/spec/lib/metasploit/model/architecture_spec.rb +52 -0
  256. data/spec/lib/metasploit/model/association/error_spec.rb +48 -0
  257. data/spec/lib/metasploit/model/association_spec.rb +145 -0
  258. data/spec/lib/metasploit/model/author_spec.rb +6 -0
  259. data/spec/lib/metasploit/model/authority/bid_spec.rb +17 -0
  260. data/spec/lib/metasploit/model/authority/cve_spec.rb +17 -0
  261. data/spec/lib/metasploit/model/authority/msb_spec.rb +17 -0
  262. data/spec/lib/metasploit/model/authority/osvdb_spec.rb +17 -0
  263. data/spec/lib/metasploit/model/authority/pmasa_spec.rb +17 -0
  264. data/spec/lib/metasploit/model/authority/secunia_spec.rb +17 -0
  265. data/spec/lib/metasploit/model/authority/us_cert_vu_spec.rb +17 -0
  266. data/spec/lib/metasploit/model/authority/waraxe_spec.rb +51 -0
  267. data/spec/lib/metasploit/model/authority/zdi_spec.rb +21 -0
  268. data/spec/lib/metasploit/model/authority_spec.rb +10 -0
  269. data/spec/lib/metasploit/model/base_spec.rb +58 -0
  270. data/spec/lib/metasploit/model/configuration/autoload_spec.rb +165 -0
  271. data/spec/lib/metasploit/model/configuration/child_spec.rb +24 -0
  272. data/spec/lib/metasploit/model/configuration/error_spec.rb +5 -0
  273. data/spec/lib/metasploit/model/configuration/i18n_spec.rb +103 -0
  274. data/spec/lib/metasploit/model/configuration_spec.rb +106 -0
  275. data/spec/lib/metasploit/model/configured_spec.rb +41 -0
  276. data/spec/lib/metasploit/model/derivation/full_name_spec.rb +75 -0
  277. data/spec/lib/metasploit/model/derivation_spec.rb +217 -0
  278. data/spec/lib/metasploit/model/email_address_spec.rb +19 -0
  279. data/spec/lib/metasploit/model/engine_spec.rb +84 -0
  280. data/spec/lib/metasploit/model/file_spec.rb +43 -0
  281. data/spec/lib/metasploit/model/invalid_spec.rb +54 -0
  282. data/spec/lib/metasploit/model/module/action_spec.rb +6 -0
  283. data/spec/lib/metasploit/model/module/ancestor_spec.rb +6 -0
  284. data/spec/lib/metasploit/model/module/architecture_spec.rb +9 -0
  285. data/spec/lib/metasploit/model/module/author_spec.rb +6 -0
  286. data/spec/lib/metasploit/model/module/class_spec.rb +19 -0
  287. data/spec/lib/metasploit/model/module/handler_spec.rb +61 -0
  288. data/spec/lib/metasploit/model/module/instance_spec.rb +183 -0
  289. data/spec/lib/metasploit/model/module/path_spec.rb +6 -0
  290. data/spec/lib/metasploit/model/module/platform_spec.rb +9 -0
  291. data/spec/lib/metasploit/model/module/rank_spec.rb +29 -0
  292. data/spec/lib/metasploit/model/module/reference_spec.rb +9 -0
  293. data/spec/lib/metasploit/model/module/stance_spec.rb +30 -0
  294. data/spec/lib/metasploit/model/module/target/architecture_spec.rb +9 -0
  295. data/spec/lib/metasploit/model/module/target/platform_spec.rb +9 -0
  296. data/spec/lib/metasploit/model/module/target_spec.rb +9 -0
  297. data/spec/lib/metasploit/model/module/type_spec.rb +125 -0
  298. data/spec/lib/metasploit/model/nilify_blanks_spec.rb +156 -0
  299. data/spec/lib/metasploit/model/platform_spec.rb +100 -0
  300. data/spec/lib/metasploit/model/reference_spec.rb +21 -0
  301. data/spec/lib/metasploit/model/search/association_spec.rb +33 -0
  302. data/spec/lib/metasploit/model/search/attribute_spec.rb +99 -0
  303. data/spec/lib/metasploit/model/search/operation/integer/value_spec.rb +20 -0
  304. data/spec/lib/metasploit/model/search/operation/string/value_spec.rb +20 -0
  305. data/spec/lib/metasploit/model/search/operation_spec.rb +144 -0
  306. data/spec/lib/metasploit/model/search/operator/help_spec.rb +41 -0
  307. data/spec/lib/metasploit/model/search/with_spec.rb +81 -0
  308. data/spec/lib/metasploit/model/search_spec.rb +230 -0
  309. data/spec/lib/metasploit/model/spec/error_spec.rb +5 -0
  310. data/spec/lib/metasploit/model/spec/i18n_exception_handler_spec.rb +42 -0
  311. data/spec/lib/metasploit/model/spec/pathname_collision_spec.rb +55 -0
  312. data/spec/lib/metasploit/model/spec_spec.rb +114 -0
  313. data/spec/lib/metasploit/model/translation_spec.rb +82 -0
  314. data/spec/lib/metasploit/model/version_spec.rb +141 -0
  315. data/spec/lib/metasploit/model/visitation/visit_spec.rb +316 -0
  316. data/spec/lib/metasploit/model_spec.rb +68 -0
  317. data/spec/spec_helper.rb +48 -0
  318. data/spec/support/shared/contexts/metasploit/model/configuration.rb +11 -0
  319. data/spec/support/shared/contexts/metasploit/model/module/ancestor/contents/metasploit_module.rb +12 -0
  320. data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents.rb +10 -0
  321. data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents/metasploit_module.rb +15 -0
  322. data/spec/support/shared/contexts/metasploit/model/search/operator/union/children.rb +13 -0
  323. data/spec/support/shared/examples/derives.rb +115 -0
  324. data/spec/support/shared/examples/metasploit/model/architecture.rb +425 -0
  325. data/spec/support/shared/examples/metasploit/model/architecture/seed.rb +25 -0
  326. data/spec/support/shared/examples/metasploit/model/author.rb +27 -0
  327. data/spec/support/shared/examples/metasploit/model/authority.rb +124 -0
  328. data/spec/support/shared/examples/metasploit/model/authority/seed.rb +49 -0
  329. data/spec/support/shared/examples/metasploit/model/configuration/parent/child.rb +60 -0
  330. data/spec/support/shared/examples/metasploit/model/email_address.rb +220 -0
  331. data/spec/support/shared/examples/metasploit/model/module/action.rb +26 -0
  332. data/spec/support/shared/examples/metasploit/model/module/ancestor.rb +2004 -0
  333. data/spec/support/shared/examples/metasploit/model/module/ancestor/payload_factory.rb +63 -0
  334. data/spec/support/shared/examples/metasploit/model/module/architecture.rb +36 -0
  335. data/spec/support/shared/examples/metasploit/model/module/author.rb +29 -0
  336. data/spec/support/shared/examples/metasploit/model/module/class.rb +1514 -0
  337. data/spec/support/shared/examples/metasploit/model/module/handler.rb +21 -0
  338. data/spec/support/shared/examples/metasploit/model/module/instance.rb +1384 -0
  339. data/spec/support/shared/examples/metasploit/model/module/instance/class_methods.rb +537 -0
  340. data/spec/support/shared/examples/metasploit/model/module/instance/is_not_stanced_with_module_type.rb +22 -0
  341. data/spec/support/shared/examples/metasploit/model/module/instance/is_stanced_with_module_type.rb +38 -0
  342. data/spec/support/shared/examples/metasploit/model/module/instance/validates/dynamic_length_of.rb +131 -0
  343. data/spec/support/shared/examples/metasploit/model/module/path.rb +493 -0
  344. data/spec/support/shared/examples/metasploit/model/module/platform.rb +36 -0
  345. data/spec/support/shared/examples/metasploit/model/module/rank.rb +92 -0
  346. data/spec/support/shared/examples/metasploit/model/module/reference.rb +16 -0
  347. data/spec/support/shared/examples/metasploit/model/module/target.rb +29 -0
  348. data/spec/support/shared/examples/metasploit/model/module/target/architecture.rb +56 -0
  349. data/spec/support/shared/examples/metasploit/model/module/target/platform.rb +56 -0
  350. data/spec/support/shared/examples/metasploit/model/platform.rb +213 -0
  351. data/spec/support/shared/examples/metasploit/model/real_pathname.rb +29 -0
  352. data/spec/support/shared/examples/metasploit/model/reference.rb +410 -0
  353. data/spec/support/shared/examples/metasploit/model/search/operation/integer/value.rb +79 -0
  354. data/spec/support/shared/examples/metasploit/model/search/operation/string/value.rb +53 -0
  355. data/spec/support/shared/examples/metasploit/model/search/operator/help.rb +134 -0
  356. data/spec/support/shared/examples/metasploit/model/translation.rb +37 -0
  357. data/spec/support/shared/examples/search/query.rb +43 -0
  358. data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/app.rb +44 -0
  359. data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +60 -0
  360. data/spec/support/shared/examples/search_association.rb +13 -0
  361. data/spec/support/shared/examples/search_attribute.rb +27 -0
  362. data/spec/support/shared/examples/search_with.rb +36 -0
  363. data/spec/support/shared/matchers/allow_attribute.rb +17 -0
  364. data/spec/support/templates/metasploit/model/module/ancestors/_attributes.rb.erb +9 -0
  365. data/spec/support/templates/metasploit/model/module/ancestors/_methods.rb.erb +8 -0
  366. data/spec/support/templates/metasploit/model/module/ancestors/_validations.rb.erb +6 -0
  367. data/spec/support/templates/metasploit/model/module/ancestors/base.rb.erb +3 -0
  368. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_auxiliary.rb.erb +1 -0
  369. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_encoder.rb.erb +1 -0
  370. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_exploit.rb.erb +1 -0
  371. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_non_payload.rb.erb +5 -0
  372. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_nop.rb.erb +1 -0
  373. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_payload.rb.erb +4 -0
  374. data/spec/support/templates/metasploit/model/module/ancestors/module_types/_post.rb.erb +1 -0
  375. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_handled.rb.erb +20 -0
  376. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_single.rb.erb +1 -0
  377. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stage.rb.erb +0 -0
  378. data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stager.rb.erb +1 -0
  379. data/spec/support/templates/metasploit/model/module/classes/_methods.rb.erb +9 -0
  380. metadata +747 -0
@@ -0,0 +1,742 @@
1
+ require 'spec_helper'
2
+
3
+ describe Metasploit::Model::Search::Query do
4
+ context 'validations' do
5
+ it { should validate_presence_of :klass }
6
+
7
+ context 'operations' do
8
+ let(:errors) do
9
+ query.errors[:operations]
10
+ end
11
+
12
+ let(:klass) do
13
+ Class.new
14
+ end
15
+
16
+ let(:query) do
17
+ described_class.new(
18
+ :formatted => formatted,
19
+ :klass => klass
20
+ )
21
+ end
22
+
23
+ before(:each) do
24
+ stub_const('Queried', klass)
25
+
26
+ # include after stubbing constant so that Class#name can be used for search_i18n_scope
27
+ klass.send(:include, Metasploit::Model::Search)
28
+ end
29
+
30
+ context 'length' do
31
+ let(:error) do
32
+ I18n.translate(
33
+ 'metasploit.model.errors.models.metasploit/model/search/query.attributes.operations.too_short',
34
+ :count => 1
35
+ )
36
+ end
37
+
38
+ before(:each) do
39
+ query.valid?
40
+ end
41
+
42
+ context 'with empty' do
43
+ let(:formatted) do
44
+ ''
45
+ end
46
+
47
+ it 'should have no operations' do
48
+ query.operations.length.should == 0
49
+ end
50
+
51
+ it 'should record error on operations' do
52
+ errors.should include(error)
53
+ end
54
+ end
55
+
56
+ context 'without empty' do
57
+ let(:formatted) do
58
+ 'formatted_operator:formatted_value'
59
+ end
60
+
61
+ it 'should not record error on operations' do
62
+ errors.should_not include(error)
63
+ end
64
+ end
65
+ end
66
+
67
+ context 'valid' do
68
+ let(:error) do
69
+ 'is invalid'
70
+ end
71
+
72
+ let(:query) do
73
+ described_class.new
74
+ end
75
+
76
+ before(:each) do
77
+ operation = double('Invalid Operation', :valid? => valid)
78
+ query.stub(:operations).and_return([operation])
79
+ end
80
+
81
+ context 'with invalid operation' do
82
+ let(:valid) do
83
+ false
84
+ end
85
+
86
+ it 'should record error on operations' do
87
+ errors.should_not include(error)
88
+ end
89
+ end
90
+
91
+ context 'without invalid operation' do
92
+ let(:valid) do
93
+ true
94
+ end
95
+
96
+ it 'should not record error on options' do
97
+ errors.should_not include(error)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ context 'formatted_operations' do
105
+ subject(:formatted_operations) do
106
+ described_class.formatted_operations(formatted_query)
107
+ end
108
+
109
+ context 'with quoted value' do
110
+ let(:formatted_query) do
111
+ # embedded : in quotes to make sure it's not be being split on words around each :.
112
+ 'formatted_operator1:"formatted value:1" formatted_operator2:formatted_value2'
113
+ end
114
+
115
+ it 'should parse the correct number of formatted_operations' do
116
+ expect(formatted_operations.length).to eq(2)
117
+ end
118
+
119
+ it 'should include operation with space in value' do
120
+ formatted_operations.should include('formatted_operator1:formatted value:1')
121
+ end
122
+
123
+ it 'should include operation without space in value' do
124
+ formatted_operations.should include('formatted_operator2:formatted_value2')
125
+ end
126
+ end
127
+
128
+ context 'with unquoted value' do
129
+ let(:expected_formatted_operations) do
130
+ [
131
+ 'formatted_operator1:formatted_value1',
132
+ 'formatted_operator2:formatted_value2'
133
+ ]
134
+ end
135
+
136
+ let(:formatted_query) do
137
+ expected_formatted_operations.join(' ')
138
+ end
139
+
140
+ it 'should parse correct number of formatted operations' do
141
+ expect(formatted_operations.length).to eq(expected_formatted_operations.length)
142
+ end
143
+
144
+ it 'should include all formatted operations' do
145
+ expect(formatted_operations).to match_array(expected_formatted_operations)
146
+ end
147
+ end
148
+
149
+ context 'with nil' do
150
+ let(:formatted_operations) do
151
+ nil
152
+ end
153
+
154
+ it { be_empty }
155
+ end
156
+ end
157
+
158
+ context '#formatted_operations' do
159
+ subject(:formatted_operations) do
160
+ query.formatted_operations
161
+ end
162
+
163
+ context 'with :formatted_operations attribute' do
164
+ let(:expected_formatted_operations) do
165
+ double('#formatted_operations')
166
+ end
167
+
168
+ let(:query) do
169
+ described_class.new(
170
+ formatted_operations: expected_formatted_operations
171
+ )
172
+ end
173
+
174
+ it 'should equal attribute passed to #initialize' do
175
+ formatted_operations.should == expected_formatted_operations
176
+ end
177
+ end
178
+
179
+ context 'without :formatted_operations attribute' do
180
+ let(:formatted) do
181
+ "#{formatted_operator}:#{formatted_value}"
182
+ end
183
+
184
+ let(:formatted_operator) do
185
+ ''
186
+ end
187
+
188
+ let(:formatted_value) do
189
+ ''
190
+ end
191
+
192
+ let(:klass) do
193
+ Class.new
194
+ end
195
+
196
+ let(:query) do
197
+ described_class.new(
198
+ formatted: formatted,
199
+ klass: klass
200
+ )
201
+ end
202
+
203
+ before(:each) do
204
+ stub_const('QueriedClass', klass)
205
+
206
+ # include after stubbing const so that search_i18n_scope can use Class#name
207
+ klass.send(:include, Metasploit::Model::Search)
208
+ end
209
+
210
+ it 'should parse #formatted with formatted_operations' do
211
+ described_class.should_receive(:formatted_operations).with(formatted).and_return([])
212
+
213
+ formatted_operations
214
+ end
215
+ end
216
+ end
217
+
218
+ context '#operations' do
219
+ subject(:operations) do
220
+ query.operations
221
+ end
222
+
223
+ context 'with :operations attribute' do
224
+ let(:expected_operations) do
225
+ double('#operations')
226
+ end
227
+
228
+ let(:query) do
229
+ described_class.new(
230
+ operations: expected_operations
231
+ )
232
+ end
233
+
234
+ it 'should use attribute passed to #initialize' do
235
+ operations.should == expected_operations
236
+ end
237
+ end
238
+
239
+ context 'without :operations attribute' do
240
+ let(:attribute) do
241
+ :searchable
242
+ end
243
+
244
+ let(:formatted) do
245
+ "#{formatted_operator}:#{formatted_value}"
246
+ end
247
+
248
+ let(:formatted_operator) do
249
+ ''
250
+ end
251
+
252
+ let(:formatted_value) do
253
+ ''
254
+ end
255
+
256
+ let(:klass) do
257
+ Class.new
258
+ end
259
+
260
+ let(:query) do
261
+ described_class.new(
262
+ :formatted => formatted,
263
+ :klass => klass
264
+ )
265
+ end
266
+
267
+ before(:each) do
268
+ stub_const('QueriedClass', klass)
269
+
270
+ # include after stubbing const so that search_i18n_scope can use Class#name
271
+ klass.send(:include, Metasploit::Model::Search)
272
+ end
273
+
274
+ it 'should call #formatted_operations' do
275
+ query.should_receive(:formatted_operations).and_return([])
276
+
277
+ operations
278
+ end
279
+
280
+ context 'with known operator' do
281
+ subject(:operator) do
282
+ operations.first
283
+ end
284
+
285
+ let(:formatted_operator) do
286
+ @operator.name
287
+ end
288
+
289
+ let(:formatted_value) do
290
+ ''
291
+ end
292
+
293
+ before(:each) do
294
+ @operator = klass.search_attribute attribute, :type => type
295
+ end
296
+
297
+ context 'with boolean operator' do
298
+ let(:type) do
299
+ :boolean
300
+ end
301
+
302
+ it { should be_a Metasploit::Model::Search::Operation::Boolean }
303
+
304
+ context "with 'true'" do
305
+ let(:formatted_value) do
306
+ 'true'
307
+ end
308
+
309
+ it { should be_valid }
310
+ end
311
+
312
+ context "with 'false'" do
313
+ let(:formatted_value) do
314
+ 'false'
315
+ end
316
+
317
+ it { should be_valid }
318
+ end
319
+
320
+ context "without 'false' or 'true'" do
321
+ let(:formatted_value) do
322
+ 'no'
323
+ end
324
+
325
+ it { should_not be_valid }
326
+ end
327
+ end
328
+
329
+ context 'with date operator' do
330
+ let(:type) do
331
+ :date
332
+ end
333
+
334
+ it { should be_a Metasploit::Model::Search::Operation::Date }
335
+
336
+ context 'with date' do
337
+ let(:formatted_value) do
338
+ Date.today.to_s
339
+ end
340
+
341
+ it { should be_valid }
342
+ end
343
+
344
+ context 'without date' do
345
+ let(:formatted_value) do
346
+ 'yesterday'
347
+ end
348
+
349
+ it { should_not be_valid }
350
+ end
351
+ end
352
+
353
+ context 'with integer operator' do
354
+ let(:type) do
355
+ :integer
356
+ end
357
+
358
+ it { should be_a Metasploit::Model::Search::Operation::Integer }
359
+
360
+ context 'with integer' do
361
+ let(:formatted_value) do
362
+ '100'
363
+ end
364
+
365
+ it { should be_valid }
366
+ end
367
+
368
+ context 'with float' do
369
+ let(:formatted_value) do
370
+ '100.5'
371
+ end
372
+
373
+ it { should be_invalid }
374
+ end
375
+
376
+ context 'with integer embedded in text' do
377
+ let(:formatted_value) do
378
+ 'a2c'
379
+ end
380
+
381
+ it { should be_invalid }
382
+ end
383
+ end
384
+
385
+ context 'with string operator' do
386
+ let(:type) do
387
+ :string
388
+ end
389
+
390
+ it { should be_a Metasploit::Model::Search::Operation::String }
391
+
392
+ context 'with value' do
393
+ let(:formatted_value) do
394
+ 'formatted_value'
395
+ end
396
+
397
+ it { should be_valid }
398
+ end
399
+
400
+ context 'without value' do
401
+ let(:formatted_value) do
402
+ ''
403
+ end
404
+
405
+ it { should_not be_valid }
406
+ end
407
+ end
408
+ end
409
+
410
+ context 'without known operator' do
411
+ subject(:operation) do
412
+ operations.first
413
+ end
414
+
415
+ let(:formatted_operator) do
416
+ 'unknown_operator'
417
+ end
418
+
419
+ let(:formatted_value) do
420
+ 'unknown_value'
421
+ end
422
+
423
+ it { should be_a Metasploit::Model::Search::Operation::Base }
424
+
425
+ it { should be_invalid }
426
+ end
427
+ end
428
+ end
429
+
430
+ context '#operations_by_operator' do
431
+ subject(:operations_by_operator) do
432
+ query.operations_by_operator
433
+ end
434
+
435
+ let(:klass) do
436
+ Class.new
437
+ end
438
+
439
+ let(:query) do
440
+ described_class.new(
441
+ :formatted => formatted,
442
+ :klass => klass
443
+ )
444
+ end
445
+
446
+ before(:each) do
447
+ stub_const('Queried', klass)
448
+
449
+ klass.send(:include, Metasploit::Model::Search)
450
+
451
+ @operators = [:first, :second].collect { |attribute|
452
+ klass.search_attribute attribute, :type => :string
453
+ }
454
+ end
455
+
456
+ context 'with valid' do
457
+ let(:formatted) do
458
+ formatted_operators = []
459
+
460
+ @operators.each_with_index do |operator, i|
461
+ 2.times.each do |j|
462
+ formatted_operator = "#{operator.name}:formatted_value(#{i},#{j})"
463
+ formatted_operators << formatted_operator
464
+ end
465
+ end
466
+
467
+ formatted_operators.join(' ')
468
+ end
469
+
470
+ it 'should have correct number of groups' do
471
+ operations_by_operator.length.should == @operators.length
472
+ end
473
+
474
+ it 'should have correct value for each operator' do
475
+ @operators.each_with_index do |operator, i|
476
+ expected_formatted_values = 2.times.collect { |j|
477
+ "formatted_value(#{i},#{j})"
478
+ }
479
+
480
+ operations = operations_by_operator[operator]
481
+ actual_formatted_values = operations.map(&:value)
482
+
483
+ expect(actual_formatted_values).to match_array(expected_formatted_values)
484
+ end
485
+ end
486
+
487
+ context 'query' do
488
+ subject do
489
+ query
490
+ end
491
+
492
+ it { should be_valid }
493
+ end
494
+ end
495
+
496
+ context 'without valid' do
497
+ let(:formatted) do
498
+ 'unknown_formatted_operator:formatted_value'
499
+ end
500
+
501
+ context 'query' do
502
+ subject do
503
+ query
504
+ end
505
+
506
+ it { should_not be_valid }
507
+ end
508
+ end
509
+ end
510
+
511
+ context '#parse_operator' do
512
+ subject(:parse_operator) do
513
+ query.parse_operator(formatted_operator)
514
+ end
515
+
516
+ let(:attribute) do
517
+ :searched
518
+ end
519
+
520
+ let(:klass) do
521
+ Class.new
522
+ end
523
+
524
+ let(:query) do
525
+ described_class.new(
526
+ :klass => klass
527
+ )
528
+ end
529
+
530
+ before(:each) do
531
+ stub_const('QueriedClass', klass)
532
+
533
+ # include after stubbing const so that search_i18n_scope can use Class#name
534
+ klass.send(:include, Metasploit::Model::Search)
535
+ @operator = klass.search_attribute attribute, :type => :string
536
+ end
537
+
538
+ context 'with operator name' do
539
+ let(:formatted_operator) do
540
+ attribute.to_s
541
+ end
542
+
543
+ context 'with String' do
544
+ it 'should find operator' do
545
+ parse_operator.should == @operator
546
+ end
547
+ end
548
+
549
+ context 'with Symbol' do
550
+ let(:formatted_operator) do
551
+ attribute
552
+ end
553
+
554
+ it 'should find operator' do
555
+ parse_operator.should == @operator
556
+ end
557
+ end
558
+ end
559
+
560
+ context 'without operator name' do
561
+ let(:formatted_operator) do
562
+ 'unknown_operator'
563
+ end
564
+
565
+ it { should be_a Metasploit::Model::Search::Operator::Null }
566
+ end
567
+ end
568
+
569
+ context '#tree' do
570
+ subject(:tree) do
571
+ query.tree
572
+ end
573
+
574
+ let(:formatted) do
575
+ 'thing_one:1 thing_two:2 thing_one:a thing_two:b'
576
+ end
577
+
578
+ let(:klass) do
579
+ Class.new
580
+ end
581
+
582
+ let(:query) do
583
+ described_class.new(
584
+ :formatted => formatted,
585
+ :klass => klass
586
+ )
587
+ end
588
+
589
+ before(:each) do
590
+ stub_const('Queried', klass)
591
+
592
+ klass.send(:include, Metasploit::Model::Search)
593
+ klass.search_attribute :thing_one, :type => :string
594
+ klass.search_attribute :thing_two, :type => :string
595
+ end
596
+
597
+ context 'root' do
598
+ subject(:root) do
599
+ tree
600
+ end
601
+
602
+ it { should be_a Metasploit::Model::Search::Group::Intersection }
603
+
604
+ context 'children' do
605
+ subject(:children) do
606
+ root.children
607
+ end
608
+
609
+ it 'should be an Array<Metasploit::Model::Search::Group::Union>' do
610
+ children.each do |child|
611
+ child.should be_a Metasploit::Model::Search::Group::Union
612
+ end
613
+ end
614
+
615
+ it 'should have same operator for each child of a union' do
616
+ children.each do |child|
617
+ operator_set = child.children.inject(Set.new) { |operator_set, operation|
618
+ operator_set.add operation.operator
619
+ }
620
+
621
+ operator_set.length.should == 1
622
+ end
623
+ end
624
+
625
+ context 'grandchildren' do
626
+ let(:grandchildren) do
627
+ grandchildren = []
628
+
629
+ children.each do |child|
630
+ grandchildren.concat child.children
631
+ end
632
+
633
+ grandchildren
634
+ end
635
+
636
+ it 'should be Array<Metasploit::Model::Search::Operation::Base>' do
637
+ grandchildren.each do |grandchild|
638
+ grandchild.should be_a Metasploit::Model::Search::Operation::Base
639
+ end
640
+ end
641
+ end
642
+ end
643
+ end
644
+ end
645
+
646
+ context '#without_operator' do
647
+ subject(:without_operator) do
648
+ query.without_operator(filtered_operator)
649
+ end
650
+
651
+ #
652
+ # lets
653
+ #
654
+
655
+ let(:attributes) do
656
+ Array.new(2) { |i|
657
+ "attribute_#{i}".to_sym
658
+ }
659
+ end
660
+
661
+ let(:filtered_operator) do
662
+ operators.sample
663
+ end
664
+
665
+ let(:klass) do
666
+ Class.new
667
+ end
668
+
669
+ let(:operators) do
670
+ attributes.collect { |attribute|
671
+ klass.search_attribute attribute, type: :string
672
+ }
673
+ end
674
+
675
+ let(:query) do
676
+ described_class.new(
677
+ formatted_operations: formatted_operations,
678
+ klass: klass
679
+ )
680
+ end
681
+
682
+ let(:unfiltered_operators) do
683
+ operators - [filtered_operator]
684
+ end
685
+
686
+ #
687
+ # Callbacks
688
+ #
689
+
690
+ before(:each) do
691
+ stub_const('Queried', klass)
692
+
693
+ klass.send(:include, Metasploit::Model::Search)
694
+ end
695
+
696
+ context 'with operator' do
697
+ let(:formatted_operations) do
698
+ operators.collect { |operator|
699
+ "#{operator.name}:value"
700
+ }
701
+ end
702
+
703
+ it 'should return a new query' do
704
+ without_operator.should_not be query
705
+ end
706
+
707
+ it 'should not have operations on the removed operator' do
708
+ without_operator.operations_by_operator[filtered_operator].should be_blank
709
+ end
710
+
711
+ it 'should have same #klass as this query' do
712
+ without_operator.klass.should == query.klass
713
+ end
714
+
715
+ context 'with no other operators' do
716
+ let(:formatted_operations) do
717
+ [
718
+ "#{filtered_operator.name}:value"
719
+ ]
720
+ end
721
+
722
+ it { should_not be_valid }
723
+ end
724
+
725
+ context 'with other operators' do
726
+ it { should be_valid }
727
+ end
728
+ end
729
+
730
+ context 'without operator' do
731
+ let(:formatted_operations) do
732
+ unfiltered_operators.collect { |operator|
733
+ "#{operator.name}:value"
734
+ }
735
+ end
736
+
737
+ it 'should return this query' do
738
+ without_operator.should be query
739
+ end
740
+ end
741
+ end
742
+ end