{"action":"opened","issue":{"url":"https://api.github.com/repos/rapid7/metasploit-cache/issues/12","labels_url":"https://api.github.com/repos/rapid7/metasploit-cache/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/rapid7/metasploit-cache/issues/12/comments","events_url":"https://api.github.com/repos/rapid7/metasploit-cache/issues/12/events","html_url":"https://github.com/rapid7/metasploit-cache/issues/12","id":60671941,"number":12,"title":"Outstanding work for PR 8 Schema to load metasploit-framework","user":{"login":"limhoff-r7","id":2230482,"avatar_url":"https://avatars.githubusercontent.com/u/2230482?v=3","gravatar_id":"","url":"https://api.github.com/users/limhoff-r7","html_url":"https://github.com/limhoff-r7","followers_url":"https://api.github.com/users/limhoff-r7/followers","following_url":"https://api.github.com/users/limhoff-r7/following{/other_user}","gists_url":"https://api.github.com/users/limhoff-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/limhoff-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/limhoff-r7/subscriptions","organizations_url":"https://api.github.com/users/limhoff-r7/orgs","repos_url":"https://api.github.com/users/limhoff-r7/repos","events_url":"https://api.github.com/users/limhoff-r7/events{/privacy}","received_events_url":"https://api.github.com/users/limhoff-r7/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/rapid7/metasploit-cache/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-03-11T15:01:23Z","updated_at":"2015-03-11T15:01:23Z","closed_at":null,"body":"The following is the list of assumed tasks to get the schema designed in #8 to be populated with data from metasploit-framework\r\n\r\n**NOTE: All constant have the `Metasploit::Cache::` prefixed stripped**\r\n\r\nThe general design is each class (or superclass) in the schema from #8 will have an ephemeral cache called `*::Ephemeral`, which will have a `#persist` method which takes an ActiveRecord and saves the Metasploit Module `Module`, `Class` or `Object` metadata to that ActiveRecord.  It is the Ephemeral's job to be understand how to convert metasploit-framework's representation of the metadata to the schema's representation of the metadata.  The Ephemeral will also have a resurrectable attribute to get the ActiveRecord.\r\n\r\nThe work of the `*::Ephemeral#persist` method will be validated by the `Load` class, which will call `*::Ephemeral#persist` and check that the ActiveRecord was saved.\r\n\r\nThere will also be some mechanism to enumerate all the *::Class given the *::Ancestor and to enumerate all the *::Instance given the *::Class.\r\n\r\n## Load `*::Class` (expect `Payload::Staged::Class`) from metasploit-framework\r\n- [ ] `Direct::Class::Ephemeral`\r\n- [ ] `Direct::Class::Load`\r\n\r\n### auxiliary\r\n- [ ] Load `Auxiliary::Class` from metasploit-framework\r\n\r\n### encoder\r\n- [ ] `Encoder::Class`\r\n- [ ] Load `Encoder::Class` from metasploit-framework\r\n\r\n### exploit\r\n- [ ] `Exploit::Class`\r\n- [ ] Load `Exploit::Class` from metasploit-framework\r\n\r\n### nop\r\n- [ ] `Nop::Class`\r\n- [ ] Load `Nop::Class` from metasploit-framework\r\n\r\n### payload\r\n\r\n#### single\r\n- [ ] `Payload::Single::Class`\r\n- [ ] Load `Payload::Single::Class` from metasploit-framework\r\n\r\n#### stage\r\n- [ ] `Payload::Stage::Class`\r\n- [ ] Load `Payload::Stage::Class` from metasploit-framework\r\n\r\n#### stager\r\n- [ ] `Payload::Stager::Class`\r\n- [ ] Load `Payload::Stager::Class` from metasploit-framework\r\n\r\n### post\r\n- [ ] `Post::Class`\r\n- [ ] Load `Post::Class` from metasploit-framework\r\n\r\n## Load `*::Instance` (except `Payload::Staged::Instance`) from metasploit-framework\r\n\r\n### auxiliary\r\n- [ ] `Auxiliary::Instance`\r\n- [ ] `Auxiliary::Instance::Ephemeral`\r\n- [ ] `Auxiliary::Instance::Load`\r\n- [ ] Load `Auxiliary::Instance` from metasploit-framework\r\n\r\n### encoder\r\n- [ ] `Encoder::Instance`\r\n- [ ] `Encoder::Instance::Ephemeral`\r\n- [ ] `Encoder::Instance::Load`\r\n- [ ] Load `Encoder::Instance` from metasploit-framework\r\n\r\n### exploit\r\n- [ ] `Exploit::Instance`\r\n- [ ] `Exploit::Instance::Ephemeral`\r\n- [ ] `Exploit::Instance::Load`\r\n- [ ] Load `Exploit::Instance` from metasploit-framework\r\n\r\n### nop\r\n- [ ] `Nop::Instance`\r\n- [ ] `Nop::Instance::Ephemeral`\r\n- [ ] `Nop::Instance::Load`\r\n- [ ] Load `Nop::Instance` from metasploit-framework\r\n\r\n### payload\r\n\r\n#### single\r\n- [ ] `Payload::Single::Instance`\r\n- [ ] `Payload::Single::Instance::Ephemeral`\r\n- [ ] `Payload::Single::Instance::Load`\r\n- [ ] Load `Payload::Single::Instance` from metasploit-framework\r\n\r\n#### stage\r\n- [ ] `Payload::Stage::Instance`\r\n- [ ] `Payload::Stage::Instance::Ephemeral`\r\n- [ ] `Payload::Stage::Instance::Load`\r\n- [ ] Load `Payload::Stage::Instance` from metasploit-framework\r\n\r\n#### stager\r\n- [ ] `Payload::Stager::Instance`\r\n- [ ] `Payload::Stager::Instance::Ephemeral`\r\n- [ ] `Payload::Stager::Instance::Load`\r\n- [ ] Load `Payload::Stager::Instance` from metasploit-framework\r\n\r\n### post\r\n- [ ] `Post::Instance`\r\n- [ ] `Post::Instance::Ephemeral`\r\n- [ ] `Post::Instance::Load`\r\n- [ ] Load `Post::Instance` from metasploit-framework\r\n\r\n## Load `Payload::Staged::*` from metasploit-framework\r\n\r\n### Load `Payload::Staged::Class` from metasploit-framework\r\n- [ ] `Payload::Staged::Class`\r\n- [ ] Enumerate `Payload::Staged::Class` from compatible `Payload::Stage::Instance` and `Payload::Stager::Instance`\r\n- [ ] Load `Payload::Staged::Class` from metasploit-framework"}}