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,97 @@
1
+ # Writes templates for the {#module_instance #module_instance's}
2
+ # {Metasploit::Model::Module::Instance#module_class #module_class's} {Metasploit::Model::Module::Class#ancestors} to
3
+ # disk.
4
+ #
5
+ # @example Update files after changing associations
6
+ # module_instance = FactoryGirl.build(
7
+ # :dummy_module_instance,
8
+ # module_architectures_length: 0
9
+ # )
10
+ # # factory already wrote template when build returned
11
+ #
12
+ # # update associations
13
+ # architecture = FactoryGirl.generate :dummy_architecture
14
+ # module_instance.module_architectures = FactoryGirl.build_list(
15
+ # :dummy_module_architecture,
16
+ # 1,
17
+ # architecture: architecture
18
+ # )
19
+ #
20
+ # # Now the template on disk is different than the module_instance, so regenerate the template
21
+ # Metasploit::Model::Module::Instance::Spec::Template.write(module_instance: module_instance)
22
+ class Metasploit::Model::Module::Instance::Spec::Template < Metasploit::Model::Base
23
+ extend Metasploit::Model::Spec::Template::Write
24
+
25
+ #
26
+ # Attributes
27
+ #
28
+
29
+ # @!attribute [rw] module_instance
30
+ # The {Metasploit::Model::Module::Instance} whose {Metasploit::Model::Module::Instance#module_class} needs to be
31
+ # templated in {#class_template}.
32
+ #
33
+ # @return [Metasploit::Model::Module::Instance]
34
+ attr_accessor :module_instance
35
+
36
+ #
37
+ # Validations
38
+ #
39
+
40
+ validates :class_template,
41
+ presence: true
42
+ validates :module_instance,
43
+ presence: true
44
+ validate :class_template_valid
45
+
46
+ #
47
+ # Methods
48
+ #
49
+
50
+ # Template for {#module_instance} {Metasploit::Model::Module::Instance#module_class} with the addition of
51
+ # {#module_instance} to the {Metasploit::Model::Spec::Template#locals} and adding 'module/instances' to the front of
52
+ # the {Metasploit::Model::Spec::Template#search_pathnames}.
53
+ #
54
+ # @return [Metasploit::Model::Module::Class::Spec::Template] if {#module_instance} present.
55
+ # @return [nil] if {#module_instance} is `nil`.
56
+ def class_template
57
+ unless instance_variable_defined? :@class_template
58
+ if module_instance
59
+ class_template = Metasploit::Model::Module::Class::Spec::Template.new(
60
+ module_class: module_instance.module_class
61
+ )
62
+ class_template.ancestor_templates.each do |ancestor_template|
63
+ ancestor_template.locals[:module_instance] = module_instance
64
+
65
+ ancestor_template.search_pathnames.unshift(
66
+ Pathname.new('module/instances')
67
+ )
68
+ end
69
+
70
+ @class_template = class_template
71
+ else
72
+ @class_template = nil
73
+ end
74
+ end
75
+
76
+ @class_template
77
+ end
78
+
79
+ # @!method write
80
+ # Writes {#class_template} to disk.
81
+ #
82
+ # @return [void]
83
+ # @raise (see Metasploit::Model::Spec::Template)
84
+ delegate :write,
85
+ to: :class_template
86
+
87
+ private
88
+
89
+ # Validates that {#class_template} is valid when present.
90
+ #
91
+ # @return [void]
92
+ def class_template_valid
93
+ if class_template && !class_template.valid?
94
+ errors.add(:class_template, :invalid, value: class_template)
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,21 @@
1
+ # Groups together {Metasploit::Model::Search::Operation::Base operations} and/or or nested groups.
2
+ class Metasploit::Model::Search::Group::Base < Metasploit::Model::Base
3
+ #
4
+ # Attributes
5
+ #
6
+
7
+ # @!attribute [rw] children
8
+ # {Metasploit::Model::Search::Operation::Base Operations} or nested {Metasploit::Model::Search::Group::Base groups}.
9
+ #
10
+ # @return [Array<Metasploit::Model::Search::Group::Base, Metasploit::Model::Search::Operation::Base>]
11
+ attr_accessor :children
12
+
13
+ #
14
+ # Validations
15
+ #
16
+
17
+ validates :children,
18
+ :length => {
19
+ :minimum => 1
20
+ }
21
+ end
@@ -0,0 +1,4 @@
1
+ # The intersection (ANDing) of {Metasploit::Model::Search::Operation::Base operations} and/or or nested groups.
2
+ class Metasploit::Model::Search::Group::Intersection < Metasploit::Model::Search::Group::Base
3
+
4
+ end
@@ -0,0 +1,4 @@
1
+ # The union (ORing) of {Metasploit::Model::Search::Operation::Base operations} and/or or nested groups.
2
+ class Metasploit::Model::Search::Group::Union < Metasploit::Model::Search::Group::Base
3
+
4
+ end
@@ -0,0 +1,39 @@
1
+ # Base of all search operations that combine an {#operator} with the {#value} it is operating on. Subclasses allow
2
+ # validations specific to the {#operator} {Metasploit::Model::Search::Operator::Single#type type}.
3
+ class Metasploit::Model::Search::Operation::Base < Metasploit::Model::Base
4
+ #
5
+ # Attributes
6
+ #
7
+
8
+ # @!attribute [rw] operator
9
+ # The operator operating on {#value}.
10
+ #
11
+ # @return [Metasploit::Model::Search::Operator::Base]
12
+ attr_accessor :operator
13
+
14
+ # @!attribute [rw] value
15
+ # The value cast to the correct type from the formatted_value from the formatted operation.
16
+ #
17
+ # @return [String]
18
+ attr_accessor :value
19
+
20
+ #
21
+ # Validations
22
+ #
23
+
24
+ validates :operator,
25
+ :presence => true
26
+ # validate_associated is defined by ActiveRecord, so have to do it manually here.
27
+ validate :operator_valid
28
+
29
+ private
30
+
31
+ # Validates that {#operator} is valid
32
+ #
33
+ # @return [void]
34
+ def operator_valid
35
+ if operator and !operator.valid?
36
+ errors.add(:operator, :invalid, :value => operator)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ # Search operation with {Metasploit::Model::Search::Operation::Base#operator} with `#type` `:boolean`. Validates that
2
+ # value is a proper boolean (`false` or `true`) or the `String` version of either.
3
+ class Metasploit::Model::Search::Operation::Boolean < Metasploit::Model::Search::Operation::Base
4
+ #
5
+ # CONSTANTS
6
+ #
7
+
8
+ # Take a String formatted {#value} and returns its unformatted value for validation.
9
+ FORMATTED_VALUE_TO_VALUE = {
10
+ 'false' => false,
11
+ 'true' => true
12
+ }
13
+
14
+ #
15
+ # Validations
16
+ #
17
+
18
+ validates :value,
19
+ :inclusion => {
20
+ :in => [
21
+ false,
22
+ true
23
+ ],
24
+ :message => :boolean
25
+ }
26
+
27
+ # Sets {Metasploit::Model::Search::Operation::Base#value} by type casting String boolean to actual `false` or `true`.
28
+ #
29
+ # @param formatted_value [Object]
30
+ # @return [false] if `formatted_value` is `'false'`.
31
+ # @return [true] if `formatted_value` is `'true'`.
32
+ # @return [Object] `formatted_value` otherwise.
33
+ def value=(formatted_value)
34
+ @value = FORMATTED_VALUE_TO_VALUE.fetch(formatted_value, formatted_value)
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ # Search operation with {Metasploit::Model::Search::Operation::Base#operator} with `#type` ':date'. Validates that
2
+ # value is `String` that can parsed with `Date.parse` or already a `Date`.
3
+ class Metasploit::Model::Search::Operation::Date < Metasploit::Model::Search::Operation::Base
4
+ #
5
+ # Validations
6
+ #
7
+
8
+ validate :date_value
9
+
10
+ #
11
+ # Methods
12
+ #
13
+
14
+ # Sets {Metasploit::Model::Search::Operation::Base#value} by type casting String to actual Date.
15
+ #
16
+ # @param formatted_value [#to_s]
17
+ # @return [Date] if `formatted_value.to_s` is parseable with `Date.parse`.
18
+ # @return [#to_s] `formatted_value` if `formatted_value` is not parseable with `Date.parse`.
19
+ def value=(formatted_value)
20
+ begin
21
+ @value = Date.parse(formatted_value.to_s)
22
+ rescue ArgumentError
23
+ @value = formatted_value
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ # Validates that {#value} is a `Date`.
30
+ #
31
+ # @return [void]
32
+ def date_value
33
+ unless value.is_a? Date
34
+ errors.add(:value, :unparseable_date)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ # Search operation with {Metasploit::Model::Search::Operation::Base#operator} with `#type` `:integer`. Validates that
2
+ # value is an integer.
3
+ class Metasploit::Model::Search::Operation::Integer < Metasploit::Model::Search::Operation::Base
4
+ include Metasploit::Model::Search::Operation::Integer::Value
5
+
6
+ #
7
+ # Validations
8
+ #
9
+
10
+ validates :value,
11
+ :numericality => {
12
+ :only_integer => true
13
+ }
14
+ end
@@ -0,0 +1,26 @@
1
+ # Operation that uses a {Metasploit::Model::Search::Operation::Null null operator}.
2
+ class Metasploit::Model::Search::Operation::Null < Metasploit::Model::Search::Operation::Base
3
+ #
4
+ # Validations
5
+ #
6
+
7
+ validate :null_operator
8
+
9
+ #
10
+ # Methods
11
+ #
12
+
13
+ private
14
+
15
+ # Validates that {Metasploit::Model::Search::Operation::Base#operator} is a
16
+ # {Metasploit::Model::Search::Operator::Null}, as {Metasploit::Model::Search::Operation::Null} won't validate
17
+ # correctly (and be invalid) if {Metasploit::Model::Search::Operation::Base#operator} is not a
18
+ # {Metasploit::Model::Search::Operator::Null}.
19
+ #
20
+ # @return [void]
21
+ def null_operator
22
+ unless operator.is_a? Metasploit::Model::Search::Operator::Null
23
+ errors.add(:operator, :type, :type => Metasploit::Model::Search::Operator::Null)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ # Operation on an attribute that has a constrained Set of valid
2
+ # {Metasploit::Model::Search::Operation::Base#value values}.
3
+ class Metasploit::Model::Search::Operation::Set < Metasploit::Model::Search::Operation::Base
4
+ #
5
+ # Validations
6
+ #
7
+
8
+ validate :membership
9
+
10
+ private
11
+
12
+ # Validates that {#value} is a member of {Metasploit::Model::Search::Operation::Base#operator}
13
+ # {Metasploit::Model::Search::Operator::Attribute#attribute_set}.
14
+ #
15
+ # @return [void]
16
+ def membership
17
+ if operator
18
+ attribute_set = operator.attribute_set
19
+
20
+ unless attribute_set.include? value
21
+ # sort (because Sets are unordered) before inspecting so that lexigraphical sorting is NOT used
22
+ sorted = attribute_set.sort
23
+ # use inspect to differentiate between strings and integers or string and symbols
24
+ inspected = sorted.map(&:inspect)
25
+
26
+ # format as a human readable Set using { }
27
+ comma_separated = inspected.join(', ')
28
+ human_set = "{#{comma_separated}}"
29
+
30
+ errors.add(:value, :inclusion, set: human_set)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ # Search operation on an attribute that has a `Set<Integer>` for acceptable
2
+ # {Metasploit::Model::Search::Operation::Base values}.
3
+ class Metasploit::Model::Search::Operation::Set::Integer < Metasploit::Model::Search::Operation::Set
4
+ include Metasploit::Model::Search::Operation::Integer::Value
5
+ end
@@ -0,0 +1,5 @@
1
+ # Search operation on an attribute that has a `Set<String>` for acceptable
2
+ # {Metasploit::Model::Search::Operation::Base values}.
3
+ class Metasploit::Model::Search::Operation::Set::String < Metasploit::Model::Search::Operation::Set
4
+ include Metasploit::Model::Search::Operation::String::Value
5
+ end
@@ -0,0 +1,11 @@
1
+ # Search operation with {Metasploit::Model::Search::Operation::Base#operator} with `#type` `:string`.
2
+ class Metasploit::Model::Search::Operation::String < Metasploit::Model::Search::Operation::Base
3
+ include Metasploit::Model::Search::Operation::String::Value
4
+
5
+ #
6
+ # Validations
7
+ #
8
+
9
+ validates :value,
10
+ :presence => true
11
+ end
@@ -0,0 +1,59 @@
1
+ # A union of one or more {#children child operations} from an operator's `#operate_on`, should be visited the same as
2
+ # {Metasploit::Model::Search::Group::Base}.
3
+ class Metasploit::Model::Search::Operation::Union < Metasploit::Model::Search::Operation::Base
4
+ #
5
+ # Attributes
6
+ #
7
+
8
+ # @!attribute [rw] children
9
+ # Children operations of union.
10
+ #
11
+ # @return [Array<Metasploit::Model::Search::Operation::Base>]
12
+ attr_writer :children
13
+
14
+ #
15
+ #
16
+ # Validations
17
+ #
18
+ #
19
+
20
+ #
21
+ # Method Validations
22
+ #
23
+
24
+ # validate_associated is defined by ActiveRecord, so have to do it manually here.
25
+ validate :children_valid
26
+
27
+ #
28
+ # Attribute Validations
29
+ #
30
+
31
+ validates :children,
32
+ :length => {
33
+ :minimum => 1
34
+ }
35
+
36
+ #
37
+ # Methods
38
+ #
39
+
40
+ def children
41
+ @children ||= []
42
+ end
43
+
44
+ private
45
+
46
+ # Validates that {#children} are valid
47
+ #
48
+ # @return [void]
49
+ def children_valid
50
+ if children.is_a? Enumerable
51
+ # can't use children.all?(&:valid?) as it will short-circuit and want all children to have validation errors
52
+ valids = children.map(&:valid?)
53
+
54
+ unless valids.all?
55
+ errors.add(:children, :invalid, value: children)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,43 @@
1
+ # A search operator declared with
2
+ # {Metasploit::Model::Search::Association::ClassMethods#search_association search_association}.
3
+ class Metasploit::Model::Search::Operator::Association < Metasploit::Model::Search::Operator::Single
4
+ #
5
+ # Attributes
6
+ #
7
+
8
+ # @!attribute [rw] association
9
+ # The association on which {Metasploit::Model::Search::Operator::Attribute#attribute} is declared searchable.
10
+ #
11
+ # @return [Symbol] association on {Metasploit::Model::Search::Operator::Base#klass klass}.
12
+ attr_accessor :association
13
+
14
+ # @!attribute [rw] attribute_operator
15
+ # The {Metasploit::Model::Search::Operator::Attribute operator} as declared on the {#association} class.
16
+ #
17
+ # @return [Metasploit::Model::Search::Operator::Attribute]
18
+ attr_accessor :attribute_operator
19
+
20
+ #
21
+ # Validations
22
+ #
23
+
24
+ validates :association, :presence => true
25
+ validates :attribute_operator, :presence => true
26
+
27
+ #
28
+ # Methods
29
+ #
30
+
31
+ delegate :attribute,
32
+ :attribute_set,
33
+ :help,
34
+ :type,
35
+ :to => :attribute_operator
36
+
37
+ # The name of this operator.
38
+ #
39
+ # @return [String] <association>.<attribute>
40
+ def name
41
+ @name ||= "#{association}.#{attribute}".to_sym
42
+ end
43
+ end