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,42 @@
1
+ module Metasploit
2
+ module Model
3
+ module Module
4
+ module Target
5
+ # Model that joins {Metasploit::Model::Platform} and {Metasploit::Model::Module::Target}.
6
+ module Platform
7
+ extend ActiveModel::Naming
8
+ extend ActiveSupport::Concern
9
+
10
+ include Metasploit::Model::Translation
11
+
12
+ included do
13
+ include ActiveModel::Validations
14
+
15
+ #
16
+ # Validations
17
+ #
18
+
19
+ validates :module_target,
20
+ presence: true
21
+ validates :platform,
22
+ presence: true
23
+ end
24
+
25
+ #
26
+ # Associations
27
+ #
28
+
29
+ # @!attribute [rw] module_target
30
+ # The module target that supports {#platform}.
31
+ #
32
+ # @return [Metasploit::Model::Module::Target]
33
+
34
+ # @!attribute [rw] platform
35
+ # The platform supported by the {#module_target}.
36
+ #
37
+ # @return [Metasploit::Model::Platform]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,44 @@
1
+ module Metasploit
2
+ module Model
3
+ module Module
4
+ # Defines constants for {Metasploit::Model::Module} types as used in {Metasploit::Model::Module::Ancestor}.
5
+ module Type
6
+ #
7
+ # CONSTANTS
8
+ #
9
+
10
+ # Symbolizes any module type is allowed.
11
+ ANY = '_any_'
12
+ # Auxiliary modules
13
+ AUX = 'auxiliary'
14
+ # Encoder modules
15
+ ENCODER = 'encoder'
16
+ # Exploit modules
17
+ EXPLOIT = 'exploit'
18
+ # No operation modules
19
+ NOP = 'nop'
20
+ # Payload modules
21
+ PAYLOAD = 'payload'
22
+ # Post-exploitation modules
23
+ POST = 'post'
24
+
25
+ # Array<String> of all supported module types (except {ANY} since that's a symbolic type)
26
+ ALL = [
27
+ AUX,
28
+ ENCODER,
29
+ EXPLOIT,
30
+ NOP,
31
+ PAYLOAD,
32
+ POST
33
+ ]
34
+
35
+ # Array<String> of all module types that aren't {PAYLOAD} because {PAYLOAD}
36
+ # {Metasploit::Model::Module::Ancestor#contents} define `Modules` instead of `Classes` and so need to be loaded
37
+ # differently.
38
+ NON_PAYLOAD = ALL.reject { |module_type|
39
+ module_type == PAYLOAD
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,53 @@
1
+ module Metasploit
2
+ module Model
3
+ # Registers before validation callback to convert the given attributes to `nil` if they are blank. This can be used
4
+ # to normalize empty attributes to NULL in the database so queries don't have to handle both `= ''` and `IS NULL`.
5
+ module NilifyBlanks
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ include ActiveModel::Validations
10
+ include ActiveModel::Validations::Callbacks
11
+
12
+ before_validation :nilify_blanks
13
+ end
14
+
15
+ # Adds DSL methods once NilifyBlanks is included so that attributes where blanks should be changed to `nil` can be
16
+ # declared.
17
+ module ClassMethods
18
+ # Declares that `attributes` should be changed to `nil` before validation if they are blank.
19
+ #
20
+ # @param attributes [Enumerable<Symbol>] one or more attribute names
21
+ # @return [void]
22
+ def nilify_blank(*attributes)
23
+ nilify_blank_attribute_set.merge(attributes)
24
+ end
25
+
26
+ # Set of all attributes registered with {#nilify_blank}.
27
+ #
28
+ # @return [Set<Symbol>]
29
+ def nilify_blank_attribute_set
30
+ @nilify_blank_attribute_set ||= Set.new
31
+ end
32
+ end
33
+
34
+ #
35
+ # Instance Methods
36
+ #
37
+
38
+ # Before validation callback to change any attributes in {ClassMethods#nilify_blank_attribute_set} that are blank to
39
+ # `nil`.
40
+ #
41
+ # @return [void]
42
+ def nilify_blanks
43
+ self.class.nilify_blank_attribute_set.each do |attribute|
44
+ value = send(attribute)
45
+
46
+ if value.respond_to? :blank? and value.blank?
47
+ send("#{attribute}=", nil)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,250 @@
1
+ module Metasploit
2
+ module Model
3
+ # Code shared between `Mdm::Platform` and `Metasploit::Framework::Platform`.
4
+ module Platform
5
+ extend ActiveModel::Naming
6
+ extend ActiveSupport::Concern
7
+
8
+ include Metasploit::Model::Translation
9
+
10
+ #
11
+ # CONSTANTS
12
+ #
13
+
14
+ # Platforms are seeded in a hierarchy with deeper levels refining higher levels, so 'Windows 98 SE' is a
15
+ # refinement of 'Windows 98', which is a refinement of 'Windows'.
16
+ SEED_RELATIVE_NAME_TREE = {
17
+ 'AIX' => nil,
18
+ 'Android' => nil,
19
+ 'BSD' => nil,
20
+ 'BSDi' => nil,
21
+ 'Cisco' => nil,
22
+ 'Firefox' => nil,
23
+ 'FreeBSD' => nil,
24
+ 'HPUX' => nil,
25
+ 'IRIX' => nil,
26
+ 'Java' => nil,
27
+ 'Javascript' => nil,
28
+ 'Linux' => nil,
29
+ 'NetBSD' => nil,
30
+ 'Netware' => nil,
31
+ 'NodeJS' => nil,
32
+ 'OpenBSD' => nil,
33
+ 'OSX' => nil,
34
+ 'PHP' => nil,
35
+ 'Python' => nil,
36
+ 'Ruby' => nil,
37
+ 'Solaris' => {
38
+ '4' => nil,
39
+ '5' => nil,
40
+ '6' => nil,
41
+ '7' => nil,
42
+ '8' => nil,
43
+ '9' => nil,
44
+ '10' => nil
45
+ },
46
+ 'Windows' => {
47
+ '95' => nil,
48
+ '98' => {
49
+ 'FE' => nil,
50
+ 'SE' => nil
51
+ },
52
+ 'ME' => nil,
53
+ 'NT' => {
54
+ 'SP0' => nil,
55
+ 'SP1' => nil,
56
+ 'SP2' => nil,
57
+ 'SP3' => nil,
58
+ 'SP4' => nil,
59
+ 'SP5' => nil,
60
+ 'SP6' => nil,
61
+ 'SP6a' => nil
62
+ },
63
+ '2000' => {
64
+ 'SP0' => nil,
65
+ 'SP1' => nil,
66
+ 'SP2' => nil,
67
+ 'SP3' => nil,
68
+ 'SP4' => nil
69
+ },
70
+ 'XP' => {
71
+ 'SP0' => nil,
72
+ 'SP1' => nil,
73
+ 'SP2' => nil,
74
+ 'SP3' => nil
75
+ },
76
+ '2003' => {
77
+ 'SP0' => nil,
78
+ 'SP1' => nil
79
+ },
80
+ 'Vista' => {
81
+ 'SP0' => nil,
82
+ 'SP1' => nil
83
+ },
84
+ '7' => nil
85
+ },
86
+ 'UNIX' => nil
87
+ }
88
+
89
+ included do
90
+ include ActiveModel::MassAssignmentSecurity
91
+ include ActiveModel::Validations
92
+ include Metasploit::Model::Derivation
93
+ include Metasploit::Model::Search
94
+
95
+ #
96
+ # Derivations
97
+ #
98
+
99
+ derives :fully_qualified_name, :validate => true
100
+
101
+ #
102
+ # Mass Assignment Security
103
+ #
104
+
105
+ attr_accessible :relative_name
106
+
107
+ #
108
+ # Search
109
+ #
110
+
111
+ search_attribute :fully_qualified_name,
112
+ type: {
113
+ set: :string
114
+ }
115
+
116
+ #
117
+ # Validation
118
+ #
119
+
120
+ validates :fully_qualified_name,
121
+ inclusion: {
122
+ in: Metasploit::Model::Platform.fully_qualified_name_set
123
+ }
124
+ validates :relative_name,
125
+ presence: true
126
+ end
127
+
128
+ # Adds {#fully_qualified_name_set} to class.
129
+ module ClassMethods
130
+ # Set of valid {Metasploit::Model::Platform#fully_qualified_name}.
131
+ #
132
+ # @return [Set<String>]
133
+ def fully_qualified_name_set
134
+ Metasploit::Model::Platform.fully_qualified_name_set
135
+ end
136
+ end
137
+
138
+ #
139
+ # Attributes
140
+ #
141
+
142
+ # @!attribute [rw] fully_qualified_name
143
+ # The fully qualified name of this platform, as would be used in the platform list in a metasploit-framework
144
+ # module.
145
+ #
146
+ # @return [String]
147
+
148
+ # @!attribute [rw] parent
149
+ # The parent platform of this platform. For example, Windows is parent of Windows 98, which is the parent of
150
+ # Windows 98 FE.
151
+ #
152
+ # @return [nil] if this is a top-level platform, such as Windows or Linux.
153
+ # @return [Metasploit::Model::Platform]
154
+
155
+ # @!attribute [rw] relative_name
156
+ # The name of this platform relative to the {#fully_qualified_name} of {#parent}.
157
+ #
158
+ # @return [String]
159
+
160
+ #
161
+ # Methods
162
+ #
163
+
164
+ # Derives {#fully_qualified_name} from {#parent}'s {#fully_qualified_name} and this platform's {#relative_name}.
165
+ #
166
+ # @return [nil] if {#relative_name} is blank.
167
+ # @return [String] {#relative_name} if {#parent} is `nil`.
168
+ # @return [String] '<{#parent} {#relative_name}> <{#relative_name}>' if {#parent} is not `nil`.
169
+ def derived_fully_qualified_name
170
+ if relative_name.present?
171
+ if parent
172
+ "#{parent.fully_qualified_name} #{relative_name}"
173
+ else
174
+ relative_name
175
+ end
176
+ end
177
+ end
178
+
179
+ # @note Not defined in `ClassMethods` because consumers should always refer back to {Metasploit::Model::Platform}
180
+ # when seeding.
181
+ #
182
+ # @param options [Hash{Symbol => Object, Hash}]
183
+ # @option options [Object] :parent (nil) The parent object to which to attach the children.
184
+ # @option options [Hash{String => nil,Hash}] :grandchildren_by_child_relative_name
185
+ # ({SEED_RELATIVE_NAME_TREE}) Maps {#relative_name} of children under :parent to their children
186
+ # (grandchildren of parent). Grandchildren can be `nil` or another recursive `Hash` of names and their
187
+ # descendants.
188
+ # @yield [attributes] Block should construct child object using attributes.
189
+ # @yieldparam attributes [Hash{Symbol => Object,String}] Hash containing attributes for child object, include
190
+ # :parent for {#parent} and :relative_name for {#relative_name}.
191
+ # @yieldreturn [Object] child derived from :parent and :relative_name to be used as the parent for
192
+ # grandchildren.
193
+ # @return [void]
194
+ def self.each_seed_attributes(options={}, &block)
195
+ options.assert_valid_keys(:parent, :grandchildren_by_child_relative_name)
196
+
197
+ parent = options[:parent]
198
+ grandchildren_by_child_relative_name = options.fetch(
199
+ :grandchildren_by_child_relative_name,
200
+ SEED_RELATIVE_NAME_TREE
201
+ )
202
+
203
+ grandchildren_by_child_relative_name.each do |child_relative_name, great_grandchildren_by_grandchild_relative_name|
204
+ attributes = {
205
+ parent: parent,
206
+ relative_name: child_relative_name
207
+ }
208
+ child = block.call(attributes)
209
+
210
+ if great_grandchildren_by_grandchild_relative_name
211
+ each_seed_attributes(
212
+ grandchildren_by_child_relative_name: great_grandchildren_by_grandchild_relative_name,
213
+ parent: child,
214
+ &block
215
+ )
216
+ end
217
+ end
218
+ end
219
+
220
+ # List of valid {#fully_qualified_name} derived from {SEED_RELATIVE_NAME_TREE}.
221
+ #
222
+ # @return [Array<String>]
223
+ def self.fully_qualified_name_set
224
+ unless instance_variable_defined? :@fully_qualified_name_set
225
+ @fully_qualified_name_set = Set.new
226
+
227
+ each_seed_attributes do |attributes|
228
+ parent = attributes.fetch(:parent)
229
+ relative_name = attributes.fetch(:relative_name)
230
+
231
+ if parent
232
+ fully_qualified_name = "#{parent} #{relative_name}"
233
+ else
234
+ fully_qualified_name = relative_name
235
+ end
236
+
237
+ @fully_qualified_name_set.add fully_qualified_name
238
+
239
+ # yieldreturn
240
+ fully_qualified_name
241
+ end
242
+
243
+ @fully_qualified_name_set.freeze
244
+ end
245
+
246
+ @fully_qualified_name_set
247
+ end
248
+ end
249
+ end
250
+ end
@@ -0,0 +1,18 @@
1
+ module Metasploit
2
+ module Model
3
+ # Adds {#real_pathname} to class, which will convert `#real_path` `String` to a `Pathname`.
4
+ module RealPathname
5
+ # `#real_path` as a `Pathname`.
6
+ #
7
+ # @return [Pathname] unless `#real_path` is `nil`.
8
+ # @return [nil] if `#real_path` is `nil`.
9
+ def real_pathname
10
+ if real_path
11
+ Pathname.new(real_path)
12
+ else
13
+ nil
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,108 @@
1
+ module Metasploit
2
+ module Model
3
+ # Code shared between `Mdm::Reference` and `Metasploit::Framework::Reference`.
4
+ module Reference
5
+ extend ActiveModel::Naming
6
+ extend ActiveSupport::Concern
7
+
8
+ include Metasploit::Model::Translation
9
+
10
+ included do
11
+ include ActiveModel::MassAssignmentSecurity
12
+ include ActiveModel::Validations
13
+ include Metasploit::Model::Derivation
14
+ include Metasploit::Model::Search
15
+
16
+ #
17
+ # Derivations
18
+ #
19
+
20
+ derives :url, :validate => false
21
+
22
+ #
23
+ # Mass Assignment Security
24
+ #
25
+
26
+ attr_accessible :designation
27
+ attr_accessible :url
28
+
29
+ #
30
+ # Search Attributes
31
+ #
32
+
33
+ search_attribute :designation, :type => :string
34
+ search_attribute :url, :type => :string
35
+
36
+ #
37
+ # Validations
38
+ #
39
+
40
+ validates :designation,
41
+ :presence => {
42
+ :if => :authority?
43
+ },
44
+ :nil => {
45
+ :unless => :authority?
46
+ }
47
+ validates :url,
48
+ :presence => {
49
+ :unless => :authority?
50
+ }
51
+ end
52
+
53
+ #
54
+ # Associations
55
+ #
56
+
57
+ # @!attribute [rw] authority
58
+ # The {Metasploit::Model::Authority authority} that assigned {#designation}.
59
+ #
60
+ # @return [Metasploit::Model::Authority, nil]
61
+
62
+ # @!attribute [r] module_instances
63
+ # {Metasploit::Model::Module::Instance Modules} that exploit this reference or describe a proof-of-concept (PoC)
64
+ # code that the module is based on.
65
+ #
66
+ # @return [Array<Metasploit::Model::Module::Instance>]
67
+
68
+ #
69
+ # Attributes
70
+ #
71
+
72
+ # @!attribute [rw] designation
73
+ # A designation (usually a string of numbers and dashes) assigned by {#authority}.
74
+ #
75
+ # @return [String, nil]
76
+
77
+ # @!attribute [rw] url
78
+ # URL to web page with information about referenced exploit.
79
+ #
80
+ # @return [String, nil]
81
+
82
+ #
83
+ # Instance Methods
84
+ #
85
+
86
+ # Returns whether {#authority} is not `nil`.
87
+ #
88
+ # @return [true] unless {#authority} is `nil`.
89
+ # @return [false] if {#authority} is `nil`.
90
+ def authority?
91
+ authority.present?
92
+ end
93
+
94
+ # Derives {#url} based how {#authority} routes {#designation designations} to a URL.
95
+ #
96
+ # @return [String, nil]
97
+ def derived_url
98
+ derived = nil
99
+
100
+ if authority and designation.present?
101
+ derived = authority.designation_url(designation)
102
+ end
103
+
104
+ derived
105
+ end
106
+ end
107
+ end
108
+ end