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,109 @@
1
+ require 'metasploit/model/configuration/child'
2
+
3
+ # Defines methods for adding paths to `ActiveSupport::Dependencies.autoload_paths`.
4
+ class Metasploit::Model::Configuration::Autoload < Metasploit::Model::Configuration::Child
5
+ #
6
+ # Attributes
7
+ #
8
+
9
+ # @!attribute [rw] relative_once_paths
10
+ # Paths relative to {Metasploit::Model::Configuration::Child#configuration #configuration}
11
+ # {Metasploit::Model::Configuration#root #root} that should only be autoloaded once.
12
+ #
13
+ # @return [Array<String>]
14
+
15
+ # @!attribute [rw] relative_paths
16
+ # Paths relative to {Metasploit::Model::Configuration::Child#configuration #configuration}
17
+ # {Metasploit::Model::Configuration#root #root} that should be autoloaded more than once.
18
+ #
19
+ # @return [Array<String>]
20
+
21
+ #
22
+ # Methods
23
+ #
24
+
25
+ # Combines {#once_paths} and {#paths} as both need to be added to
26
+ # `ActiveSupport::Dependencies.autoload_paths`.
27
+ #
28
+ # @return [Array<String>]
29
+ def all_paths
30
+ @all_paths ||= (once_paths + paths).uniq
31
+ end
32
+
33
+ # Eager loads all rb files under {#all_paths}. Paths in {#all_paths} are sorted before loading, so that `app` will
34
+ # load before `lib`. Files are required using `ActiveSupport::Dependencies::Loadable#require_dependency` so they
35
+ # interact with `ActiveSupport::Dependencies` loading correctly.
36
+ #
37
+ # @return [void]
38
+ def eager_load!
39
+ # sort to favor app over lib since it is assumed that app/models will define classes and lib will define modules
40
+ # included in those classes that are defined under the class namespaces, so the class needs to be required first
41
+ all_paths.sort.each do |load_path|
42
+ matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
43
+
44
+ Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
45
+ require_dependency file.sub(matcher, '\1')
46
+ end
47
+ end
48
+ end
49
+
50
+ # {#relative_once_paths} converted to absolute paths.
51
+ #
52
+ # @return [Array<String>]
53
+ def once_paths
54
+ @once_paths ||= relative_once_paths.collect { |relative_path|
55
+ configuration.root.join(relative_path).to_path
56
+ }
57
+ end
58
+
59
+ # {#relative_paths} converted to absolute paths.
60
+ #
61
+ # @return [Array<String>]
62
+ def paths
63
+ @paths ||= relative_paths.collect { |relative_path|
64
+ configuration.root.join(relative_path).to_path
65
+ }
66
+ end
67
+
68
+ # Paths relative to {Metasploit::Model::Configuration#root} that are to be added to
69
+ # `ActiveSupport::Dependencies.autoload_paths` and `ActiveSupport::Dependencies.autoload_once_paths`.
70
+ #
71
+ # @return [Array<String>] Defaults to ['lib']
72
+ def relative_once_paths
73
+ @relative_once_paths ||= [
74
+ 'lib'
75
+ ]
76
+ end
77
+
78
+ attr_writer :relative_once_paths
79
+
80
+ # Paths relative to {Metasploit::Model::Configuration#root} that are to be added to
81
+ # `ActiveSupport::Dependencies.autoload_paths`, but not `ActiveSupport::Dependencies.autoload_once_paths`
82
+ #
83
+ # @return [Array<String>] Defaults to ['app/models']
84
+ def relative_paths
85
+ @relative_paths ||= [
86
+ File.join('app', 'models')
87
+ ]
88
+ end
89
+
90
+ attr_writer :relative_paths
91
+
92
+ # Adds {#all_paths} to `ActiveSupport::Dependencies.autoload_paths` if they are not already there and adds
93
+ # {#once_paths} to `ActiveSupport::Dependencies.autoload_once_paths` if they are not already there.
94
+ #
95
+ # @return [void]
96
+ def setup
97
+ all_paths.each do |autoload_path|
98
+ unless ActiveSupport::Dependencies.autoload_paths.include? autoload_path
99
+ ActiveSupport::Dependencies.autoload_paths << autoload_path
100
+ end
101
+ end
102
+
103
+ once_paths.each do |autoload_once_path|
104
+ unless ActiveSupport::Dependencies.autoload_once_paths.include? autoload_once_path
105
+ ActiveSupport::Dependencies.autoload_once_paths << autoload_once_path
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,12 @@
1
+ # Child of a {Metasploit::Model::Configuration} that contains a reference to the {#configuration}.
2
+ class Metasploit::Model::Configuration::Child
3
+ #
4
+ # Attributes
5
+ #
6
+
7
+ # @!attribute [rw] configuration
8
+ # Main configuration.
9
+ #
10
+ # @return [Metasploit::Model::Configuration::Autoload]
11
+ attr_accessor :configuration
12
+ end
@@ -0,0 +1,4 @@
1
+ # Error raised by {Metasploit::Model::Configuration#root} if root is not configured.
2
+ class Metasploit::Model::Configuration::Error < Metasploit::Model::Error
3
+
4
+ end
@@ -0,0 +1,54 @@
1
+ require 'metasploit/model/configuration/child'
2
+
3
+ # Defines methods for adding paths to `I18n.load_path`
4
+ class Metasploit::Model::Configuration::I18n < Metasploit::Model::Configuration::Child
5
+ #
6
+ # Attributes
7
+ #
8
+
9
+ # @!attribute [rw] relative_directories
10
+ # Paths relative to root that point to directories that contain locale files like `en.yml`.
11
+ #
12
+ # @return [Array<String>] Defaults to ['config/locales']
13
+
14
+ # Absolute paths to directories under which to find I18n .yml files.
15
+ #
16
+ # @return [Array<String>]
17
+ def directories
18
+ @directories ||= relative_directories.collect { |relative_path|
19
+ configuration.root.join(relative_path).to_path
20
+ }
21
+ end
22
+
23
+ # Absolute paths to I18n .yml files.
24
+ #
25
+ # @return [Array<String>]
26
+ def paths
27
+ @paths ||= directories.flat_map { |directory|
28
+ glob = File.join(directory, '*.yml')
29
+ Dir.glob(glob)
30
+ }
31
+ end
32
+
33
+ # Relative paths to I18n directories.
34
+ #
35
+ # @return [Array<String>] Defaults to 'config/locales'
36
+ def relative_directories
37
+ @relative_directories ||= [
38
+ File.join('config', 'locales')
39
+ ]
40
+ end
41
+
42
+ attr_writer :relative_directories
43
+
44
+ # Adds {#paths} to `I18n.load_path` if they are not already there.
45
+ #
46
+ # @return [void]
47
+ def setup
48
+ paths.each do |path|
49
+ unless ::I18n.load_path.include? path
50
+ ::I18n.load_path << path
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ # DSL for declaring {Metasploit::Model::Configuration::Child children} of {Metasploit::Model::Configuration}
2
+ module Metasploit::Model::Configuration::Parent
3
+ # Declares a {Metasploit::Model::Configuration::Child} with the given `name`.
4
+ #
5
+ # @param name [Symbol] The name of the child.
6
+ # @return [void]
7
+ def child(name)
8
+ child_class_attribute_name = "#{name}_class"
9
+ child_class_instance_variable_name = "@#{child_class_attribute_name}".to_sym
10
+ child_instance_variable_name = "@#{name}".to_sym
11
+
12
+ #
13
+ # Attributes
14
+ #
15
+
16
+ # @!attribute [rw] <name>_class
17
+ # The `Class` used to create {#<name>}.
18
+ #
19
+ # @return [Class]
20
+ attr_writer child_class_attribute_name
21
+
22
+ #
23
+ # Methods
24
+ #
25
+
26
+ define_method(name) do
27
+ unless instance_variable_defined? child_instance_variable_name
28
+ child_instance = send(child_class_attribute_name).new
29
+ child_instance.configuration = self
30
+
31
+ instance_variable_set child_instance_variable_name, child_instance
32
+ end
33
+
34
+ instance_variable_get child_instance_variable_name
35
+ end
36
+
37
+ define_method(child_class_attribute_name) do
38
+ child_class = instance_variable_get child_class_instance_variable_name
39
+
40
+ unless child_class
41
+ require "metasploit/model/configuration/#{name}"
42
+
43
+ child_class = "Metasploit::Model::Configuration::#{name.to_s.camelize}".constantize
44
+ instance_variable_set child_class_instance_variable_name, child_class
45
+ end
46
+
47
+ child_class
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,46 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+
3
+ # Allows modules to be configured (using {Metasploit::Model::Configuration}) similar to Rails engines.
4
+ #
5
+ # @example Making gem module configurable
6
+ # module MyGem
7
+ # extend Metasploit::Model::Configured
8
+ #
9
+ # # assumes __FILE__ is lib/my_gem.rb
10
+ # lib_my_gem_pathname = Pathname.new(___FILE__)
11
+ # lib_pathname = lib_my_gem_pathname.parent
12
+ # configuration.root = lib_pathname.parent
13
+ #
14
+ # configuration.autoload.paths << 'app/models'
15
+ # end
16
+ #
17
+ # # registers 'app/models' as an autoload_path with ActiveSupport::Dependencies
18
+ # MyGem.setup
19
+ module Metasploit::Model::Configured
20
+ # The {Metasploit::Model::Configuration} for this configured `Module`.
21
+ #
22
+ # @return [Metasploit::Model::Configuration]
23
+ def configuration
24
+ unless instance_variable_defined? :@configuration
25
+ require 'metasploit/model/configuration'
26
+
27
+ @configuration = Metasploit::Model::Configuration.new
28
+ end
29
+
30
+ @configuration
31
+ end
32
+
33
+ # @!method root
34
+ # The configured root.
35
+ #
36
+ # @return (see Metasploit::Model::Configuration#root)
37
+ #
38
+ # @!method setup
39
+ # Sets up the autoload and i18n paths for the configured gem.
40
+ #
41
+ # @return (see Metasploit::Model::Configuration.setup)
42
+ # @raise (see Metasploit::Model::Configuration.setup)
43
+ delegate :root,
44
+ :setup,
45
+ to: :configuration
46
+ end
@@ -0,0 +1,110 @@
1
+ module Metasploit
2
+ module Model
3
+ # Allow to declare that attributes should be derived, which will set the attribute equal to derived_<attribute> if
4
+ # the attribute is `nil` before validation. Optionally, it can be checked if the attribute matches the
5
+ # derived_<attribute> in a validation.
6
+ #
7
+ #
8
+ # @example Full setup
9
+ # class Person < ActiveRecord::Base
10
+ # include MetasploitDataModels::Derivation
11
+ #
12
+ # #
13
+ # # Attributes
14
+ # #
15
+ #
16
+ # # @!attributes [rw] first_name
17
+ # # First Name.
18
+ # #
19
+ # # @return [String]
20
+ #
21
+ # # @!attribute [rw] full_name
22
+ # # Full name. (Includes first and last name).
23
+ # #
24
+ # # @return [String]
25
+ #
26
+ # # @!attribute [rw] last_name
27
+ # # Last name.
28
+ # #
29
+ # # @return [String]
30
+ #
31
+ # #
32
+ # # Derivations
33
+ # #
34
+ #
35
+ # derives :full_name
36
+ #
37
+ # #
38
+ # # Methods
39
+ # #
40
+ #
41
+ # # Derives {#full_name} from {#first_name} and {#last_name}.
42
+ # #
43
+ # # @return [String] "<first_name> <last_name>"
44
+ # def derive_full_name
45
+ # "#{first_name} #{last_name}"
46
+ # end
47
+ # end
48
+ module Derivation
49
+ extend ActiveSupport::Concern
50
+
51
+ included do
52
+ include ActiveModel::Validations
53
+ include ActiveModel::Validations::Callbacks
54
+
55
+ before_validation :derive
56
+ end
57
+
58
+ # Defines class methods include {#derives}, which can be used to declare derived attributes after mixing in
59
+ # {Metasploit::Model::Derivation}.
60
+ module ClassMethods
61
+ # Declares that the attribute should be derived using the derived_<attribute> method if it is `nil` before
62
+ # validation.
63
+ #
64
+ # @param attribute [Symbol] the name of the attribute.
65
+ # @param options [Hash{Symbol => Boolean}]
66
+ # @option options [Boolean] :validate (false) If `true`, validates `attribute` using {DerivationValidator}. If
67
+ # `false`, does no validation on `attribute`.
68
+ # @return [void]
69
+ def derives(attribute, options={})
70
+ options.assert_valid_keys(:validate)
71
+
72
+ validate = options.fetch(:validate, false)
73
+ validate_by_derived_attribute[attribute] = validate
74
+
75
+ if validate
76
+ validates attribute, :derivation => true
77
+ end
78
+ end
79
+
80
+ # Maps a derived attribute (declared with {#derives}) to whether the attribute should validate as a derivation.
81
+ #
82
+ # @return [Hash{Symbol => Boolean}]
83
+ def validate_by_derived_attribute
84
+ @validate_by_derived_attribute ||= {}
85
+ end
86
+ end
87
+
88
+ #
89
+ # Instance Methods
90
+ #
91
+
92
+ private
93
+
94
+ # Derives each attribute in {ClassMethods#validate_by_derived_attribute} if the attribute is `nil`.
95
+ #
96
+ # @return [void]
97
+ def derive
98
+ self.class.validate_by_derived_attribute.each_key do |attribute|
99
+ value = send(attribute)
100
+
101
+ # explicitly check for `nil` in case attribute is Boolean
102
+ if value.nil?
103
+ derived_value = send("derived_#{attribute}")
104
+ send("#{attribute}=", derived_value)
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,25 @@
1
+ module Metasploit
2
+ module Model
3
+ module Derivation
4
+ # Methods for deriving full_name from module_type and reference_name in `Mdm::Module::Ancestor`,
5
+ # `Mdm::Module::Class`, `Metasploit::Framework::Module::Ancestor`, and `Metasploit::Framework::Module::Class`.
6
+ module FullName
7
+ # Derives full_name by combining module_type and reference_name in the same way used to create modules using
8
+ # Msf::ModuleManager#create in metasploit-framework.
9
+ #
10
+ # @return [String] <module_type>/<reference_name>
11
+ # @return [nil] if module_type is `nil`.
12
+ # @return [nil] if reference_name is `nil`.
13
+ def derived_full_name
14
+ derived = nil
15
+
16
+ if module_type and reference_name
17
+ derived = "#{module_type}/#{reference_name}"
18
+ end
19
+
20
+ derived
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,128 @@
1
+ module Metasploit
2
+ module Model
3
+ # Code shared between `Mdm::EmailAddress` and `Metasploit::Framework::EmailAddress`.
4
+ module EmailAddress
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 :domain, :validate => true
21
+ derives :full, :validate => true
22
+ derives :local, :validate => true
23
+
24
+ #
25
+ # Mass Assignment Security
26
+ #
27
+
28
+ attr_accessible :domain
29
+ attr_accessible :full
30
+ attr_accessible :local
31
+
32
+ #
33
+ # Search Attributes
34
+ #
35
+
36
+ search_attribute :domain, :type => :string
37
+ search_attribute :full, :type => :string
38
+ search_attribute :local, :type => :string
39
+
40
+ #
41
+ # Validations
42
+ #
43
+
44
+ validates :domain, :presence => true
45
+ validates :local, :presence => true
46
+ end
47
+
48
+ #
49
+ # Associations
50
+ #
51
+
52
+ # @!attribute [rw] module_authors
53
+ # Credits where {#authors} used this email address for {#module_instances modules}.
54
+ #
55
+ # @return [Array<Metasploit::Model::Module::Author>]
56
+
57
+ # @!attribute [r] authors
58
+ # Authors that used this email address.
59
+ #
60
+ # @return [Array<Metasploit::Model::Author>]
61
+
62
+ # @!attribute [r] module_instances
63
+ # Modules where this email address was used.
64
+ #
65
+ # @return [Array<Metasploit::Module::Instance>]
66
+
67
+ #
68
+ # Attributes
69
+ #
70
+
71
+ # @!attribute [rw] domain
72
+ # The domain part of the email address after the `'@'`.
73
+ #
74
+ # @return [String]
75
+
76
+ # @!attribute [rw] full
77
+ # The full email address.
78
+ #
79
+ # @return [String] <{#local}>@<{#domain}
80
+
81
+ # @!attribute [rw] local
82
+ # The local part of the email address before the `'@'`.
83
+ #
84
+ # @return [String]
85
+
86
+ #
87
+ # Methods
88
+ #
89
+
90
+ # Derives {#domain} from {#full}
91
+ #
92
+ # @return [String] if {#full} is present
93
+ # @return [nil] if {#full} is not present
94
+ def derived_domain
95
+ domain = nil
96
+
97
+ if full.present?
98
+ _local, domain = full.split('@', 2)
99
+ end
100
+
101
+ domain
102
+ end
103
+
104
+ # Derives {#full} from {#domain} and {#local}
105
+ #
106
+ # @return [String]
107
+ def derived_full
108
+ if domain.present? && local.present?
109
+ "#{local}@#{domain}"
110
+ end
111
+ end
112
+
113
+ # Derives {#local} from {#full}.
114
+ #
115
+ # @return [String] if {#full} is present
116
+ # @return [nil] if {#full} is not present
117
+ def derived_local
118
+ local = nil
119
+
120
+ if full.present?
121
+ local, _domain = full.split('@', 2)
122
+ end
123
+
124
+ local
125
+ end
126
+ end
127
+ end
128
+ end