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,33 @@
1
+ # Operator that {#operate_on produces} {Metasploit::Model::Search::Operation::Union union operations}.
2
+ class Metasploit::Model::Search::Operator::Union < Metasploit::Model::Search::Operator::Delegation
3
+ #
4
+ # Methods
5
+ #
6
+
7
+ # {Metasploit::Model::Search::Operation::Union#children}.
8
+ #
9
+ # @param formatted_value [String] value parsed from formatted operation
10
+ # @return [Array<Metasploit::Model::Search::Operation::Base>]
11
+ def children(formatted_value)
12
+ raise NotImplementedError
13
+ end
14
+
15
+ # Unions children operating on `formatted_value`.
16
+ #
17
+ # @param formatted_value [String] value parsed from formatted operation.
18
+ # @return [Metasploit::Model::Search::Operation::Union] Union will not contain {#children} that are invalid.
19
+ def operate_on(formatted_value)
20
+ children = self.children(formatted_value)
21
+
22
+ # filter children for validity as valid values for one child won't necessarily be valid values for another child.
23
+ # this is specifically a problem with Metasploit::Model::Search::Operation::Set as no partial matching is allowed,
24
+ # but can also be a problem with string vs integer operations.
25
+ valid_children = children.select(&:valid?)
26
+
27
+ Metasploit::Model::Search::Operation::Union.new(
28
+ :children => valid_children,
29
+ :operator => self,
30
+ :value => formatted_value
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,171 @@
1
+ # A search query on a {#klass}. Parses query from {#formatted} string.
2
+ class Metasploit::Model::Search::Query < Metasploit::Model::Base
3
+ #
4
+ # Attributes
5
+ #
6
+
7
+ # @!attribute [rw] formatted
8
+ # Query string containing space separated <operator>:<value> pairs.
9
+ #
10
+ # @return [String]
11
+ attr_accessor :formatted
12
+
13
+ # @!attribute [rw] formatted_operations
14
+ # @note If using `Shellwords.shellsplit` to pre-parse the query, set {#formatted_operations} instead of rejoining
15
+ # the shell words with `.join(" ")` and setting {#formatted} as `Shellwords.shellsplit` strips embedded quotes,
16
+ # so quoted spaces will not be handled correctly if joining and setting {#formatted}.
17
+ #
18
+ # {#formatted} broken up into individual operation (<operator>:<value>) Strings.
19
+ attr_writer :formatted_operations
20
+
21
+ # @!attribute [rw] klass
22
+ # The klass that is being searched.
23
+ #
24
+ # @return [Class, #search_operator_by_name]
25
+ attr_accessor :klass
26
+
27
+ # @!attribute [rw] operations
28
+ # The parsed operations in this query.
29
+ #
30
+ # @return [Array<Metasploit::Model::Search::Operation::Base>] An Array of operations.
31
+ attr_writer :operations
32
+
33
+ #
34
+ # Validations
35
+ #
36
+
37
+ validates :klass, :presence => true
38
+
39
+ validates :operations,
40
+ :length => {
41
+ :minimum => 1
42
+ }
43
+ # validate recursive so misnamed operators or bad values for operator's types cause the query to be invalid as a whole
44
+ validate :operations_valid
45
+
46
+ #
47
+ # Methods
48
+ #
49
+
50
+ # Parses {#formatted} into a list of formatted operation composed of <formatted_operator>:<formatted_value> Strings.
51
+ # <formatted_value> may be quoted
52
+ #
53
+ # @param formatted [String] a String composed of space-separated <formatted_operator>:<formatted_value>
54
+ # operations. <formatted_value> may be quoted using the shell quoting rules.
55
+ # @return [Array<String>] Array of formatted operation.
56
+ # @see Shellwords.shellsplit
57
+ def self.formatted_operations(formatted)
58
+ Shellwords.shellsplit(formatted.to_s)
59
+ end
60
+
61
+ # {#formatted} broken up into individual operation (<operator>:<value>) Strings.
62
+ #
63
+ # @return [Array<String>]
64
+ def formatted_operations
65
+ @formatted_operations ||= self.class.formatted_operations(formatted)
66
+ end
67
+
68
+ # Parses {#formatted} to create search operations that can validate if the
69
+ # {Metasploit::Model::Search::Operation::Base#value value} is correct the operation's
70
+ # {Metasploit::Model::Search::Operation::Base#operator operator's} type.
71
+ #
72
+ # @return [Array<Metasploit::Model::Search::Operation::Base>] an Array of operation parsed from {#formatted}.
73
+ def operations
74
+ unless instance_variable_defined? :@operations
75
+ @operations = formatted_operations.flat_map { |formatted_operation|
76
+ Metasploit::Model::Search::Operation.parse(
77
+ :formatted_operation => formatted_operation,
78
+ :query => self
79
+ )
80
+ }
81
+ end
82
+
83
+ @operations
84
+ end
85
+
86
+ # @note Query is validated before grouping the operations as {Metasploit::Model::Search::Operation::Null operation
87
+ # using unknown operators} with the same name should not be grouped together when processing this query into an actual
88
+ # search of record and/or models.
89
+ #
90
+ # Groups {#operations} together by {Metasploit::Model::Search::Operation::Base#operator}.
91
+ #
92
+ # @return [Hash{Metasploit::Model::Search::Operator::Base => Metasploit::Model::Search::Operation::Base}] Maps
93
+ # operator to all its operations.
94
+ # @raise [Metasploit::Model::Invalid] if query is invalid due to invalid operations.
95
+ def operations_by_operator
96
+ unless instance_variable_defined? :@operations_by_operator
97
+ valid!
98
+
99
+ @operations_by_operator = operations.group_by(&:operator)
100
+ end
101
+
102
+ @operations_by_operator ||= operations.group_by(&:operator)
103
+ end
104
+
105
+ # Converts formatted operator extracted from formatted operation to its {Metasploit::Model::Search::Operator::Base}
106
+ # instance.
107
+ #
108
+ # @param formatted_operator [#to_sym] formatted operator as parsed from formatted operation.
109
+ # @return [Metasploit::Model::Search::Operation::Base] a type-specific search operation if there is an
110
+ # {Metasploit::Model::Search::Operator::Base#name} on {#klass} that matches `formatted_operator`.
111
+ # @return [Metasploit::Model::Search::Operator::Null] if there is not an operator with
112
+ # {Metasploit::Model::Search::Operator::Base#name} on {#klass} that matches `formatted_operator`.
113
+ def parse_operator(formatted_operator)
114
+ operator_name = formatted_operator.to_sym
115
+ operator = klass.search_operator_by_name[operator_name]
116
+
117
+ unless operator
118
+ operator = Metasploit::Model::Search::Operator::Null.new(:name => operator_name)
119
+ end
120
+
121
+ operator
122
+ end
123
+
124
+ # Groups {#operations} together by {Metasploit::Model::Search::Operation::Base#operator} into
125
+ # {Metasploit::Model::Search::Group::Union unions} that are
126
+ # {Metasploit::Model::Search::Group::Intersection intersected}.
127
+ #
128
+ # @return [Metasploit::Model::Search::Group::Intersection<Metasploit::Model::Search::Group::Union<Metasploit::Model::Search::Operation::Base>>]
129
+ def tree
130
+ unless instance_variable_defined? :@tree
131
+ unions = operations_by_operator.collect do |_operator, operations|
132
+ Metasploit::Model::Search::Group::Union.new(:children => operations)
133
+ end
134
+
135
+ @tree = Metasploit::Model::Search::Group::Intersection.new(:children => unions)
136
+ end
137
+
138
+ @tree
139
+ end
140
+
141
+ # Returns a new query with all {#operations} on the given `operator` removed.
142
+ #
143
+ # @param operator [Metasploit::Model::Search::Operator::Base] an operator that should be removed from this query.
144
+ # @return [Metasploit::Model:Search::Query] a new query if `operator` is a key in {#operations_by_operator}; otherwise
145
+ # this query.
146
+ def without_operator(operator)
147
+ operations = operations_by_operator[operator]
148
+
149
+ if operations
150
+ filtered_operations = self.operations - operations
151
+
152
+ self.class.new(
153
+ klass: klass,
154
+ operations: filtered_operations
155
+ )
156
+ else
157
+ self
158
+ end
159
+ end
160
+
161
+ private
162
+
163
+ # Validates that all {#operations} are valid.
164
+ #
165
+ # @return [void]
166
+ def operations_valid
167
+ unless operations.all?(&:valid?)
168
+ errors.add(:operations, :invalid)
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,273 @@
1
+ # Processes {EXTENSION '.rb.erb'} templates to create {Metasploit::Model::Module::Ancestor#contents} that contain the
2
+ # same metadata as the {Metasploit::Model::Module::Ancestor},
3
+ # {Metasploit::Model::Module::Class}, {Metasploit::Model::Module::Instance} and associations for those contents. This
4
+ # ensures that when the {Metasploit::Model::Module::Ancestor#contents} are loaded in metasploit-framework, the same
5
+ # metadata instances are derived from the contents ensuring idempotency of the contents and metadata parsing loop.
6
+ class Metasploit::Model::Spec::Template < Metasploit::Model::Base
7
+ extend ActiveModel::Callbacks
8
+ include ActiveModel::Validations::Callbacks
9
+
10
+ #
11
+ # CONSTANTS
12
+ #
13
+
14
+ # Regular expression to parse file from backtrace line
15
+ BACKTRACE_FILE_REGEXP = /(?<file>.*):\d+:in .*/
16
+ # Trim mode for ERB templates so that lines using <%- -%> will be trimmed of new lines
17
+ EXPLICIT_TRIM_MODE = '-'
18
+ # File extension for templates.
19
+ EXTENSION = '.rb.erb'
20
+
21
+ #
22
+ # Attributes
23
+ #
24
+
25
+ # @!attribute [rw] destination_pathname
26
+ # The pathname where to {#write} the template results.
27
+ #
28
+ # @return [String]
29
+ attr_accessor :destination_pathname
30
+
31
+ # @!attribute [rw] locals
32
+ # Local variables to exposed to partials.
33
+ #
34
+ # @return [Hash{Symbol => Object}]
35
+ attr_accessor :locals
36
+
37
+ # @!attribute [rw] overwrite
38
+ # Whether to overwrite a pre-existing file.
39
+ #
40
+ # @return [Boolean]
41
+ attr_accessor :overwrite
42
+
43
+ # @!attribute [rw] search_pathnames
44
+ # Pathnames to search for partials. First item is search first, etc.
45
+ #
46
+ # @return [Array<Pathname>]
47
+ attr_accessor :search_pathnames
48
+
49
+ # @!attribute [rw] source_relative_name
50
+ # Name of template under {#search_pathnames} without {EXTENSION} similar to how to refer to partials.
51
+ #
52
+ # @return [String]
53
+ attr_accessor :source_relative_name
54
+
55
+
56
+ #
57
+ # Callbacks
58
+ #
59
+
60
+ before_validation :search_real_pathnames
61
+
62
+ #
63
+ # Validations
64
+ #
65
+
66
+ validates :destination_pathname,
67
+ presence: true
68
+ validates :overwrite,
69
+ inclusion: {
70
+ in: [
71
+ false,
72
+ true
73
+ ]
74
+ }
75
+ validates :search_pathnames,
76
+ length: {
77
+ minimum: 1
78
+ }
79
+ validates :source_pathname,
80
+ presence: true
81
+
82
+ #
83
+ # Methods
84
+ #
85
+
86
+ # Converts the `partial_relative_path` to a real (absolute) pathname that can be passed to {#result} by finding the
87
+ # corresponding file in the {#search_pathnames}.
88
+ #
89
+ # @param partial_relative_path [String] partial path name as used in Rails, so no search_pathname prefix and no '_'
90
+ # or file extension in the basename.
91
+ # @return (see #find_pathname)
92
+ def partial_pathname(partial_relative_path)
93
+ partial_relative_pathname = Pathname.new(partial_relative_path)
94
+ relative_directory = partial_relative_pathname.dirname
95
+ raw_basename = partial_relative_pathname.basename
96
+ partial_basename = "_#{raw_basename}#{EXTENSION}"
97
+ relative_pathname = relative_directory.join(partial_basename)
98
+
99
+ find_pathname(relative_pathname)
100
+ end
101
+
102
+ # Renders partial in templates.
103
+ #
104
+ # @param partial_relative_path [String] relative path to partial without extension and no leading '_' to match
105
+ # Rails convention.
106
+ # @param options (see #result)
107
+ # @option (see #result)
108
+ # @return [String, nil] result of rendering partial.
109
+ def render(partial_relative_path, options={})
110
+ pathname = partial_pathname(partial_relative_path)
111
+ result(pathname, options)
112
+ end
113
+
114
+ # Renders the super template of the current template by searching for the template of the same name under super
115
+ # {#search_pathnames} (those that have a higher index).
116
+ #
117
+ # @return [String, nil] result of rendering super partial.
118
+ # @raise [IOError] if super template can't be found on super search pathnames.
119
+ # @raise [RegexpError] if file can't be parsed from backtrace.
120
+ def render_super
121
+ super_pathname = nil
122
+ backtrace = caller
123
+ match = BACKTRACE_FILE_REGEXP.match(backtrace[0])
124
+
125
+ if match
126
+ real_path = match[:file]
127
+ current_search_pathname_found = false
128
+ relative_pathname = nil
129
+
130
+ search_pathnames.each do |search_pathname|
131
+ # find the current index
132
+ unless current_search_pathname_found
133
+ if real_path.starts_with?(search_pathname.to_path)
134
+ current_search_pathname_found = true
135
+
136
+ real_pathname = Pathname.new(real_path)
137
+ relative_pathname = real_pathname.relative_path_from(search_pathname)
138
+ end
139
+ # then switch to finding the next (super) index
140
+ else
141
+ real_pathname = search_pathname.join(relative_pathname)
142
+
143
+ if real_pathname.exist?
144
+ super_pathname = real_pathname
145
+ break
146
+ end
147
+ end
148
+ end
149
+
150
+ unless super_pathname
151
+ raise IOError, "Couldn't find super template"
152
+ end
153
+ else
154
+ raise RegexpError, "Can't parse file from backtrace to determine current search path"
155
+ end
156
+
157
+ result(super_pathname)
158
+ end
159
+
160
+ # @note Must be an instance method
161
+ # @param pathname [Pathname] pathname to template
162
+ # @param options [Hash{Symbol => Object}]
163
+ # @option options [Hash{Symbol => Object}] :locals Maps name of locals to their value for this result. Can override
164
+ # {#locals}.
165
+ def result(pathname, options={})
166
+ options.assert_valid_keys(:locals)
167
+
168
+ if pathname
169
+ content = pathname.read
170
+ safe_level = nil
171
+ template = ERB.new content, safe_level, EXPLICIT_TRIM_MODE
172
+ template.filename = pathname.to_path
173
+
174
+ erb_binding = binding.dup
175
+ locals = self.locals || {}
176
+ result_locals = options[:locals] || {}
177
+ merged_locals = locals.merge(result_locals)
178
+
179
+ merged_locals.each do |name, value|
180
+ erb_binding.eval("#{name} = nil; lambda { |value| #{name} = value }").call(value)
181
+ end
182
+
183
+ # use current binding to allow templates to call {#render} and then use {#method_missing} to allow access to
184
+ # locals
185
+ template.result(erb_binding)
186
+ else
187
+ ''
188
+ end
189
+ end
190
+
191
+ class << self
192
+ # The root of all relative {#search_pathnames}. By changing {root} you can use your own set of templates.
193
+ #
194
+ # @return [Pathname] Defaults to 'spec/support/templates/metasploit/model' under Metasploit::Model.root.
195
+ def root
196
+ @@root ||= Metasploit::Model.root.join('spec', 'support', 'templates', 'metasploit', 'model')
197
+ end
198
+
199
+ # Sets the {#root} pathname for all {#search_pathnames}, including those on subclasses.
200
+ #
201
+ # @param root [Pathname]
202
+ # @return [Pathname]
203
+ def root=(root)
204
+ @@root = root
205
+ end
206
+ end
207
+
208
+ # Converts {#source_relative_name} to a real (absolute) pathname.
209
+ #
210
+ # @return (see #find_pathname)
211
+ def source_pathname
212
+ unless instance_variable_defined? :@source_pathname
213
+ relative_path = "#{source_relative_name}#{EXTENSION}"
214
+ @source_pathname = find_pathname(relative_path)
215
+ end
216
+
217
+ @source_pathname
218
+ end
219
+
220
+ # Writes result of template to {#destination_pathname}.
221
+ #
222
+ # @return [void]
223
+ # @raise [Metasploit::Model::Spec::PathnameCollision] if {#overwrite} is false and {#destination_pathname} already
224
+ # exists.
225
+ def write
226
+ unless overwrite
227
+ Metasploit::Model::Spec::PathnameCollision.check!(destination_pathname)
228
+ end
229
+
230
+ result = self.result(source_pathname)
231
+
232
+ # make directory
233
+ destination_pathname.parent.mkpath
234
+
235
+ destination_pathname.open('wb') do |f|
236
+ f.write(result)
237
+ end
238
+ end
239
+
240
+ private
241
+
242
+ # Finds relative_path under {#search_pathnames}
243
+ #
244
+ # @return [Pathname] if relative_path exists under a search path.
245
+ # @return [nil] if `relative_path` does not exist under a search path.
246
+ def find_pathname(relative_path)
247
+ found_pathname = nil
248
+
249
+ search_pathnames.each do |search_pathname|
250
+ real_pathname = search_pathname.join(relative_path)
251
+
252
+ if real_pathname.exist?
253
+ found_pathname = real_pathname
254
+ break
255
+ end
256
+ end
257
+
258
+ found_pathname
259
+ end
260
+
261
+ # Makes sure all {#search_pathnames} are real (absolute). Relative pathnames are resolved against {root}.
262
+ #
263
+ # @return [void]
264
+ def search_real_pathnames
265
+ search_pathnames.collect! { |search_pathname|
266
+ if search_pathname.relative?
267
+ self.class.root.join(search_pathname)
268
+ else
269
+ search_pathname
270
+ end
271
+ }
272
+ end
273
+ end