Class: Metasploit::Credential::Core
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- Metasploit::Credential::Core
- Includes:
- CoreValidations, Model::Search
- Defined in:
- app/models/metasploit/credential/core.rb
Overview
Instance Attribute Summary collapse
-
#created_at ⇒ DateTime
When this core credential was created.
-
#logins ⇒ ActiveRecord::Relation<Metasploit::Credential::Login>
The logins using this core credential to log into a service.
-
#origin ⇒ Metasploit::Credential::Origin::Import, ...
The origin of this core credential.
-
#private ⇒ Metasploit::Credential::Private?
The Private either gathered from #realm or used to authenticate to the realm.
- #public ⇒ Metasploit::Credential::Public?
- #realm ⇒ Metasploit::Credential::Realm?
-
#tasks ⇒ ActiveRecord::Relation<Mdm::Task>
The ‘Mdm::Task`s using this to track what tasks interacted with a given core.
-
#updated_at ⇒ DateTime
When this core credential was last updated.
-
#workspace ⇒ Mdm::Workspace
The ‘Mdm::Workspace` to which this core credential is scoped.
Class Method Summary collapse
-
.cores_from_host(host_id) ⇒ String
Provides UNIONing cores from a host via service origins or via session origins.
Instance Method Summary collapse
-
#login_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have successfully logged into a given host.
-
#origin_service_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have an origin_type of Service and are attached to the given host.
-
#origin_session_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have an origin_type of Session that were collected from the given host.
-
#originating_host_id ⇒ ActiveRecord::Relation
Finds all Cores that have been collected in some way from a Host.
-
#origins(origin_class) ⇒ ActiveRecord::Relation
JOINs in origins of a specific type.
-
#services_hosts ⇒ ActiveRecord::Relation
Adds a JOIN for the Service and Host that a Core with an Origin type of Service would have.
-
#sessions_hosts ⇒ ActiveRecord::Relation
Adds a JOIN for the Session and Host that a Core with an Origin type of Session would have.
-
#with_logins ⇒ ActiveRecord::Relation
Eager loads Login objects associated to Cores.
-
#with_private ⇒ ActiveRecord::Relation
Eager loads Private objects associated to Cores.
-
#with_public ⇒ ActiveRecord::Relation
Eager loads Public objects associated to Cores.
-
#with_realm ⇒ ActiveRecord::Relation
Eager loads Realm objects associated to Cores.
-
#workspace_id(id) ⇒ ActiveRecord::Relation
Finds Cores that are attached to a given workspace.
Instance Attribute Details
#created_at ⇒ DateTime
When this core credential was created.
|
# File 'app/models/metasploit/credential/core.rb', line 87
|
#logins ⇒ ActiveRecord::Relation<Metasploit::Credential::Login>
The logins using this core credential to log into a service.
27 28 29 30 |
# File 'app/models/metasploit/credential/core.rb', line 27 has_many :logins, class_name: 'Metasploit::Credential::Login', dependent: :destroy, inverse_of: :core |
#origin ⇒ Metasploit::Credential::Origin::Import, ...
The origin of this core credential.
45 46 |
# File 'app/models/metasploit/credential/core.rb', line 45 belongs_to :origin, polymorphic: true |
#private ⇒ Metasploit::Credential::Private?
The Private either gathered from #realm or used to authenticate to the realm.
53 54 55 |
# File 'app/models/metasploit/credential/core.rb', line 53 belongs_to :private, class_name: 'Metasploit::Credential::Private', inverse_of: :cores |
#public ⇒ Metasploit::Credential::Public?
61 62 63 |
# File 'app/models/metasploit/credential/core.rb', line 61 belongs_to :public, class_name: 'Metasploit::Credential::Public', inverse_of: :cores |
#realm ⇒ Metasploit::Credential::Realm?
70 71 72 |
# File 'app/models/metasploit/credential/core.rb', line 70 belongs_to :realm, class_name: 'Metasploit::Credential::Realm', inverse_of: :cores |
#tasks ⇒ ActiveRecord::Relation<Mdm::Task>
The ‘Mdm::Task`s using this to track what tasks interacted with a given core.
18 19 20 21 |
# File 'app/models/metasploit/credential/core.rb', line 18 has_and_belongs_to_many :tasks, -> { distinct }, class_name: "Mdm::Task", join_table: "credential_cores_tasks" |
#updated_at ⇒ DateTime
When this core credential was last updated.
|
# File 'app/models/metasploit/credential/core.rb', line 92
|
#workspace ⇒ Mdm::Workspace
The ‘Mdm::Workspace` to which this core credential is scoped. Used to limit mixing of different networks credentials.
79 80 81 |
# File 'app/models/metasploit/credential/core.rb', line 79 belongs_to :workspace, class_name: 'Mdm::Workspace', inverse_of: :core_credentials |
Class Method Details
.cores_from_host(host_id) ⇒ String
Provides UNIONing cores from a host via service origins or via session origins.
278 279 280 281 282 283 284 285 286 |
# File 'app/models/metasploit/credential/core.rb', line 278 def self.cores_from_host(host_id) left = origin_service_host_id(host_id).arel.ast right = origin_session_host_id(host_id).arel.ast Arel::Nodes::UnionAll.new( left, right ) end |
Instance Method Details
#login_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have successfully logged into a given host
122 123 124 |
# File 'app/models/metasploit/credential/core.rb', line 122 scope :login_host_id, lambda { |host_id| joins(logins: { service: :host }).where(Mdm::Host.arel_table[:id].eq(host_id)) } |
#origin_service_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have an origin_type of Service and are attached to the given host
147 148 149 150 151 |
# File 'app/models/metasploit/credential/core.rb', line 147 scope :origin_service_host_id, lambda { |host_id| core_table = Metasploit::Credential::Core.arel_table host_table = Mdm::Host.arel_table services_hosts.select(core_table[:id]).where(host_table[:id].eq(host_id)) } |
#origin_session_host_id(host_id) ⇒ ActiveRecord::Relation
Finds Cores that have an origin_type of Session that were collected from the given host
159 160 161 162 163 |
# File 'app/models/metasploit/credential/core.rb', line 159 scope :origin_session_host_id, lambda { |host_id| core_table = Metasploit::Credential::Core.arel_table host_table = Mdm::Host.arel_table sessions_hosts.select(core_table[:id]).where(host_table[:id].eq(host_id)) } |
#originating_host_id ⇒ ActiveRecord::Relation
Finds all Cores that have been collected in some way from a Host
205 206 207 208 209 210 211 |
# File 'app/models/metasploit/credential/core.rb', line 205 scope :originating_host_id, ->(host_id) { where( Metasploit::Credential::Core[:id].in( Metasploit::Credential::Core.cores_from_host(host_id) ) ) } |
#origins(origin_class) ⇒ ActiveRecord::Relation
JOINs in origins of a specific type
133 134 135 136 137 138 139 |
# File 'app/models/metasploit/credential/core.rb', line 133 scope :origins, lambda { |origin_class, table_alias=nil| core_table = Metasploit::Credential::Core.arel_table origin_table = origin_class.arel_table.alias(table_alias || origin_class.table_name) origin_joins = core_table.join(origin_table).on(origin_table[:id].eq(core_table[:origin_id]) .and(core_table[:origin_type].eq(origin_class.to_s))) joins(origin_joins.join_sources) } |
#services_hosts ⇒ ActiveRecord::Relation
Adds a JOIN for the Service and Host that a Core with an Origin type of Service would have
170 171 172 173 174 175 176 177 178 179 180 |
# File 'app/models/metasploit/credential/core.rb', line 170 scope :services_hosts, lambda { core_table = Metasploit::Credential::Core.arel_table service_table = Mdm::Service.arel_table host_table = Mdm::Host.arel_table origin_table = Metasploit::Credential::Origin::Service.arel_table.alias('origins_for_service') origins(Metasploit::Credential::Origin::Service, 'origins_for_service').joins( core_table.join(service_table).on(service_table[:id].eq(origin_table[:service_id])).join_sources, core_table.join(host_table).on(host_table[:id].eq(service_table[:host_id])).join_sources ) } |
#sessions_hosts ⇒ ActiveRecord::Relation
Adds a JOIN for the Session and Host that a Core with an Origin type of Session would have
187 188 189 190 191 192 193 194 195 196 197 |
# File 'app/models/metasploit/credential/core.rb', line 187 scope :sessions_hosts, lambda { core_table = Metasploit::Credential::Core.arel_table session_table = Mdm::Session.arel_table host_table = Mdm::Host.arel_table origin_table = Metasploit::Credential::Origin::Session.arel_table.alias('origins_for_session') origins(Metasploit::Credential::Origin::Session, 'origins_for_session').joins( core_table.join(session_table).on(session_table[:id].eq(origin_table[:session_id])).join_sources, core_table.join(host_table).on(host_table[:id].eq(session_table[:host_id])).join_sources ) } |
#with_logins ⇒ ActiveRecord::Relation
Eager loads Login objects associated to Cores
227 228 229 |
# File 'app/models/metasploit/credential/core.rb', line 227 scope :with_logins, ->() { includes(:logins) } |
#with_private ⇒ ActiveRecord::Relation
Eager loads Private objects associated to Cores
243 244 245 |
# File 'app/models/metasploit/credential/core.rb', line 243 scope :with_private, ->() { includes(:private) } |
#with_public ⇒ ActiveRecord::Relation
Eager loads Public objects associated to Cores
235 236 237 |
# File 'app/models/metasploit/credential/core.rb', line 235 scope :with_public, ->() { includes(:public) } |
#with_realm ⇒ ActiveRecord::Relation
Eager loads Realm objects associated to Cores
251 252 253 |
# File 'app/models/metasploit/credential/core.rb', line 251 scope :with_realm, ->() { includes(:realm) } |
#workspace_id(id) ⇒ ActiveRecord::Relation
Finds Cores that are attached to a given workspace
219 220 221 |
# File 'app/models/metasploit/credential/core.rb', line 219 scope :workspace_id, ->(id) { where(workspace_id: id) } |