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,69 @@
1
+ # Visits node in a {http://en.wikipedia.org/wiki/Tree_(data_structure) tree}, such as
2
+ # {Metasploit::Model::Search::Query#tree}.
3
+ class Metasploit::Model::Visitation::Visitor < Metasploit::Model::Base
4
+ #
5
+ # Attributes
6
+ #
7
+
8
+ # @!attribute [rw] block
9
+ # Block that is instance_exec'd on instance of {#parent} and passed the node to visit.
10
+ #
11
+ # @return [Proc]
12
+ attr_accessor :block
13
+
14
+ # @!attribute [rw] module_name
15
+ # Name of `Module` (or `Class`) that can be visited by this visitor. This visitor is also assumed to be able to
16
+ # {#visit} any `Class` or `Module` that has the `Module` or `Class` with `module_name` as a `Module#ancestor`.
17
+ #
18
+ # @return [String]
19
+ attr_accessor :module_name
20
+
21
+ # @!attribute [rw] parent
22
+ # The `Class` on which this visitor was created.
23
+ #
24
+ # @return [Class]
25
+ attr_accessor :parent
26
+
27
+ #
28
+ # Validations
29
+ #
30
+
31
+ validates :block,
32
+ :presence => true
33
+ validates :module_name,
34
+ :presence => true
35
+ validates :parent,
36
+ :presence => true
37
+
38
+ #
39
+ # Methods
40
+ #
41
+
42
+ # @param attributes [Hash{Symbol => Object}]
43
+ # @option attributes [String] :module_name name of module (or class) that can be visited by this visitor.
44
+ # @option attributes [Class] :parent The `Class` on which {Metasploit::Model::Visitation::Visit::ClassMethods#visit}
45
+ # was called.
46
+ # @yield [node] Block instance_exec'd on instance of :parent class.
47
+ # @yieldparam node [Object] node being {Metasploit::Model::Visitation::Visit#visit visited}.
48
+ # @yieldreturn [Object] translation of `node`.
49
+ def initialize(attributes={}, &block)
50
+ attributes.assert_valid_keys(:module_name, :parent)
51
+
52
+ @block = block
53
+ super
54
+ end
55
+
56
+ # Visit `node` with {#block} instance_exec'd on `instance`.
57
+ #
58
+ # @param instance [Object] instance of {#parent}.
59
+ # @param node [Object] node being visited.
60
+ # @return [Object]
61
+ # @raise [TypeError] if `instance` is not a {#parent}.
62
+ def visit(instance, node)
63
+ unless instance.is_a? parent
64
+ raise TypeError, "#{instance} is not an instance of #{parent}, so it cannot be visited."
65
+ end
66
+
67
+ instance.instance_exec(node, &block)
68
+ end
69
+ end
@@ -0,0 +1,17 @@
1
+ # Validator for {Metasploit::Model::Derivation::ClassMethods#derives}.
2
+ class DerivationValidator < ActiveModel::EachValidator
3
+ # Validates that `attribute`'s `value` equals derived_<attribute>'s value. If they are not equal then the error
4
+ # message is `'must match its derivation'`.
5
+ #
6
+ # @param record [#errors, ActiveRecord::Base] ActiveModel or ActiveRecord
7
+ # @param attribute [Symbol] name of derived attribute.
8
+ # @param value [Object] value of `attribute` in `record`.
9
+ # @return [void]
10
+ def validate_each(record, attribute, value)
11
+ derived_value = record.send("derived_#{attribute}")
12
+
13
+ if value != derived_value
14
+ record.errors[attribute] << 'must match its derivation'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ # Validates that `value` of `attribute` on `record` is meets the
2
+ # `record.dynamic_length_validation_options(attribute)`.
3
+ #
4
+ # Works similar to `LengthValidator`, but the minimum and maximum lengths are controlled dynamically by the `record` to
5
+ # allow the validation to vary based on some other attribute in the record.
6
+ class DynamicLengthValidator < ActiveModel::EachValidator
7
+ # Validates that value's `#length` meets the minimum and maximum options in
8
+ # `record.dynamic_length_validation_options(attribute)`.
9
+ #
10
+ # @param record [Object, #dynamic_length_validation_options] record that supports dynmaic length options on
11
+ # `attribute`.
12
+ # @param attribute [Symbol] name of an attribute on `record` with the given `value`.
13
+ # @param value [Object, #length] value of `attribute`.
14
+ # @return [void]
15
+ def validate_each(record, attribute, value)
16
+ # dynamic_options are not checked for validity the way options would be for LengthValidator because
17
+ # dynamic_length_validation_options can be {} in some cases.
18
+ dynamic_options = record.dynamic_length_validation_options(attribute)
19
+ value_length = value.length
20
+
21
+ ActiveModel::Validations::LengthValidator::CHECKS.each do |key, validity_check|
22
+ check_value = dynamic_options[key]
23
+
24
+ if check_value
25
+ unless value_length.send(validity_check, check_value)
26
+ errors_options = dynamic_options.except(*ActiveModel::Validations::LengthValidator::RESERVED_OPTIONS)
27
+ errors_options[:count] = check_value
28
+
29
+ message = errors_options[:message]
30
+ message_key = ActiveModel::Validations::LengthValidator::MESSAGES[key]
31
+
32
+ unless message
33
+ default_message = dynamic_options[message_key]
34
+
35
+ if default_message
36
+ errors_options[:message] = default_message
37
+ end
38
+ end
39
+
40
+ record.errors.add(attribute, message_key, errors_options)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ require 'ipaddr'
2
+
3
+ # Validates that value is an IPv4 or IPv6 address.
4
+ class IpFormatValidator < ActiveModel::EachValidator
5
+ # Validates that `value` is an IPv4 or IPv4 address. Ranges in CIDR or netmask notation are not allowed.
6
+ #
7
+ # @param record [#errors, ActiveRecord::Base] ActiveModel or ActiveRecord
8
+ # @param attribute [Symbol] name of IP address attribute.
9
+ # @param value [String, nil] IP address.
10
+ # @return [void]
11
+ # @see IPAddr#ipv4?
12
+ # @see IPAddr#ipv6?
13
+ def validate_each(record, attribute, value)
14
+ begin
15
+ potential_ip = IPAddr.new(value)
16
+ rescue ArgumentError
17
+ record.errors[attribute] << 'must be a valid IPv4 or IPv6 address'
18
+ else
19
+ # if it includes a netmask, then it's not an IP address, but an IP range.
20
+ if potential_ip.ipv4?
21
+ if potential_ip.instance_variable_get(:@mask_addr) != IPAddr::IN4MASK
22
+ record.errors[attribute] << 'must be a valid IPv4 or IPv6 address and not an IPv4 address range in CIDR or netmask notation'
23
+ end
24
+ elsif potential_ip.ipv6?
25
+ if potential_ip.instance_variable_get(:@mask_addr) != IPAddr::IN6MASK
26
+ record.errors[attribute] << 'must be a valid IPv4 or IPv6 address and not an IPv6 address range in CIDR or netmask notation'
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # Validator to ensure an attribute is `nil`. Intended for use conditionally with `:if` or `:unless` to ensure an
2
+ # attribute is `nil` under one condition while a different validation, such as `:presence` or `:inclusion` is used under
3
+ # the dual of that condition.
4
+ class NilValidator < ActiveModel::EachValidator
5
+ # Validates that `value` is `nil`.
6
+ #
7
+ # @param record [#errors, ActiveRecord::Base] an ActiveModel or ActiveRecord
8
+ # @param attribute [Symbol] name of attribute being validated.
9
+ # @param value [#nil?] value of `attribute` to check with `nil?`
10
+ # @return [void]
11
+ def validate_each(record, attribute, value)
12
+ unless value.nil?
13
+ record.errors[attribute] << 'must be nil'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,147 @@
1
+ # Validates that attribute's value is Array<Array(String, String)> which is the only valid type signature for serialized
2
+ # parameters.
3
+ class ParametersValidator < ActiveModel::EachValidator
4
+ # Sentence explaining the valid type signature for parameters.
5
+ TYPE_SIGNATURE_SENTENCE = 'Valid parameters are an Array<Array(String, String)>.'
6
+
7
+ # Validates that attribute's value is Array<Array(String, String)> which is the only valid type signature for
8
+ # serialized parameters. Errors are specific to the how different `value` is compared to correct format.
9
+ #
10
+ # @param record [#errors, ActiveRecord::Base] ActiveModel or ActiveRecord
11
+ # @param attribute [Symbol] serialized parameters attribute name.
12
+ # @param value [Object, nil, Array, Array<Array>, Array<Array(String, String)>] serialized parameters.
13
+ # @return [void]
14
+ def validate_each(record, attribute, value)
15
+ if value.is_a? Array
16
+ value.each_with_index do |element, index|
17
+ if element.is_a? Array
18
+ if element.length != 2
19
+ extreme = :few
20
+
21
+ if element.length > 2
22
+ extreme = :many
23
+ end
24
+
25
+ length_error = length_error_at(
26
+ :extreme => extreme,
27
+ :element => element,
28
+ :index => index
29
+ )
30
+
31
+ record.errors[attribute] << length_error
32
+ else
33
+ parameter_name = element.first
34
+
35
+ if parameter_name.is_a? String
36
+ unless parameter_name.present?
37
+ error = error_at(
38
+ :element => element,
39
+ :index => index,
40
+ :prefix => "has blank parameter name"
41
+ )
42
+ record.errors[attribute] << error
43
+ end
44
+ else
45
+ error = error_at(
46
+ :element => element,
47
+ :index => index,
48
+ :prefix => "has non-String parameter name (#{parameter_name.inspect})"
49
+ )
50
+ record.errors[attribute] << error
51
+ end
52
+
53
+ parameter_value = element.second
54
+
55
+ unless parameter_value.is_a? String
56
+ error = error_at(
57
+ :element => element,
58
+ :index => index,
59
+ :prefix => "has non-String parameter value (#{parameter_value.inspect})"
60
+ )
61
+ record.errors[attribute] << error
62
+ end
63
+ end
64
+ else
65
+ error = error_at(
66
+ :element => element,
67
+ :index => index,
68
+ :prefix => 'has non-Array'
69
+ )
70
+ record.errors[attribute] << error
71
+ end
72
+ end
73
+ else
74
+ record.errors[attribute] << "is not an Array. #{TYPE_SIGNATURE_SENTENCE}"
75
+ end
76
+ end
77
+
78
+ private
79
+
80
+ # Generates error message for element at the given index. Prefix is prepened to {#location_clause} to make a
81
+ # sentence. {TYPE_SIGNATURE_SENTENCE} is appended to that sentence.
82
+ #
83
+ # @param options [Hash{Symbol => Object}]
84
+ # @option options [Object] :element The element that has the error.
85
+ # @option options [Integer] :index The index of element in its parent Array.
86
+ # @option options [String] :prefix Specific error prefix to differentiate from other calls to {#error_at}.
87
+ # @return [String]
88
+ # @see #location_clause
89
+ def error_at(options={})
90
+ options.assert_valid_keys(:element, :index, :prefix)
91
+ prefix = options.fetch(:prefix)
92
+
93
+ clause = location_clause(
94
+ :element => options[:element],
95
+ :index => options[:index]
96
+ )
97
+ sentence = "#{prefix} #{clause}."
98
+
99
+ sentences = [
100
+ sentence,
101
+ TYPE_SIGNATURE_SENTENCE
102
+ ]
103
+
104
+ error = sentences.join(" ")
105
+
106
+ error
107
+ end
108
+
109
+ # Generates error message for too few or too many elements.
110
+ #
111
+ # @param options [Hash{Symbol => Object}]
112
+ # @option options [Array] :element Array that has the wrong number of elements.
113
+ # @option options [:few, :many] :extreme whether :element has too `:few` or too `:many` child elements.
114
+ # @option options [Integer] :index index of `:element` in its parent Array.
115
+ # @return [String]
116
+ # @see {#error_at}
117
+ def length_error_at(options={})
118
+ options.assert_valid_keys(:element, :extreme, :index)
119
+ extreme = options.fetch(:extreme)
120
+
121
+ prefix = "has too #{extreme} elements"
122
+ error = error_at(
123
+ :element => options[:element],
124
+ :index => options[:index],
125
+ :prefix => prefix
126
+ )
127
+
128
+ error
129
+ end
130
+
131
+ # Generates a clause with the location of element and its value.
132
+ #
133
+ # @param options [Hash{Symbol => String,Integer}]
134
+ # @option options [Object, #inspect] :element an element in a parent Array.
135
+ # @option options [Integer] :index index of `:element` in parent Array.
136
+ # @return [String] "at index <index> (<element.inspect>)"
137
+ def location_clause(options={})
138
+ options.assert_valid_keys(:element, :index)
139
+
140
+ element = options.fetch(:element)
141
+ index = options.fetch(:index)
142
+
143
+ clause = "at index #{index} (#{element.inspect})"
144
+
145
+ clause
146
+ end
147
+ end
@@ -0,0 +1,115 @@
1
+ # Validates that the password is strong.
2
+ class PasswordIsStrongValidator < ActiveModel::EachValidator
3
+ #
4
+ # CONSTANTS
5
+ #
6
+
7
+ # Password that are used too often and will be easily guessed.
8
+ COMMON_PASSWORDS = %w{
9
+ password pass root admin metasploit
10
+ msf 123456 qwerty abc123 letmein monkey link182 demo
11
+ changeme test1234 rapid7
12
+ }
13
+
14
+ # Validates that `value` is a strong password. A password is strong if it meets the following rules:
15
+ # * SHOULD contain at least one letter.
16
+ # * SHOULD contain at least one digit.
17
+ # * SHOULD contain at least one special character.
18
+ # * SHOULD NOT contain `record.username` (case-insensitive).
19
+ # * SHOULD NOT be in {COMMON_PASSWORDS}.
20
+ # * SHOULD NOT repetitions.
21
+ #
22
+ # @param record [#errors, #username, ActiveRecord::Base] ActiveModel or ActiveRecord that supports #username method.
23
+ # @param attribute [Symbol] password attribute name.
24
+ # @param value [String] a password.
25
+ # @return [void]
26
+ def validate_each(record, attribute, value)
27
+ return if value.blank?
28
+
29
+ if is_simple?(value)
30
+ record.errors[attribute] << 'must contain letters, numbers, and at least one special character'
31
+ end
32
+
33
+ if contains_username?(record.username, value)
34
+ record.errors[attribute] << 'must not contain the username'
35
+ end
36
+
37
+ if is_common_password?(value)
38
+ record.errors[attribute] << 'must not be a common password'
39
+ end
40
+
41
+ if contains_repetition?(value)
42
+ record.errors[attribute] << 'must not be a predictable sequence of characters'
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ # Password repetition (quite basic) -- no "aaaaaa" or "ababab" or "abcabc" or
49
+ # "abcdabcd" (but note that the user can use "aaaaaab" or something).
50
+ #
51
+ # @param password [String]
52
+ # @return [Boolean]
53
+ def contains_repetition?(password)
54
+ if password.scan(/./).uniq.size < 2
55
+ return true
56
+ end
57
+
58
+ if (password.size % 2 == 0) and (password.scan(/../).uniq.size < 2)
59
+ return true
60
+ end
61
+
62
+ if (password.size % 3 == 0) and (password.scan(/.../).uniq.size < 2)
63
+ return true
64
+ end
65
+
66
+ if (password.size % 4 == 0) and (password.scan(/..../).uniq.size < 2)
67
+ return true
68
+ end
69
+
70
+ false
71
+ end
72
+
73
+ # Whether username is in password (case-insensitively).
74
+ #
75
+ # @return [false] if `password` is blank.
76
+ # @return [false] if `username` is blank.
77
+ # @return [false] unless `username` is in `password`.
78
+ # @return [true] if `username` is in `password`.
79
+ def contains_username?(username, password)
80
+ contains = false
81
+
82
+ unless password.blank? or username.blank?
83
+ escaped_username = Regexp.escape(username)
84
+ username_regexp = Regexp.new(escaped_username, Regexp::IGNORECASE)
85
+
86
+ if username_regexp.match(password)
87
+ contains = true
88
+ end
89
+ end
90
+
91
+ contains
92
+ end
93
+
94
+ # Whether `password` is in {COMMON_PASSWORDS} or a simple variation of a password in {COMMON_PASSWORDS}.
95
+ #
96
+ # @param password [String]
97
+ # @return [Boolean]
98
+ def is_common_password?(password)
99
+ COMMON_PASSWORDS.each do |pw|
100
+ common_pw = [pw, pw + "!", pw + "1", pw + "12", pw + "123", pw + "1234"]
101
+ if common_pw.include?(password.downcase)
102
+ return true
103
+ end
104
+ end
105
+ false
106
+ end
107
+
108
+ # Returns whether the password is simple.
109
+ #
110
+ # @return [false] if password contains a letter, digit and special character.
111
+ # @return [true] otherwise
112
+ def is_simple?(password)
113
+ not (password =~ /[A-Za-z]/ and password =~ /[0-9]/ and password =~ /[\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x3a\x3b\x3c\x3d\x3e\x3f\x5b\x5c\x5d\x5e\x5f\x60\x7b\x7c\x7d\x7e]/)
114
+ end
115
+ end