71 lines
1.7 KiB
Ruby
71 lines
1.7 KiB
Ruby
# -*- coding: binary -*-
|
|
module Msf
|
|
|
|
###
|
|
#
|
|
# This class provides a generalized interface to persisting information,
|
|
# either in whole or in part, about the state of the framework. This can
|
|
# be used to store data that can later be reinitialized in a new instance
|
|
# of the framework or to provide a simple mechanism for generating reports
|
|
# of some form.
|
|
#
|
|
###
|
|
class PersistentStorage
|
|
|
|
@@storage_classes = {}
|
|
|
|
#
|
|
# Creates an instance of the storage class with the supplied name. The
|
|
# array supplied as an argument is passed to the constructor of the
|
|
# associated class as a means of generic initialization.
|
|
#
|
|
def self.create(name, *params)
|
|
if (klass = @@storage_classes[name])
|
|
klass.new(*params)
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
#
|
|
# Stub initialization routine that takes the params passed to create.
|
|
#
|
|
def initialize(*params)
|
|
end
|
|
|
|
#
|
|
# This methods stores all or part of the current state of the supplied
|
|
# framework instance to whatever medium the derived class implements.
|
|
# If the derived class does not implement this method, the
|
|
# NotImplementedError is raised.
|
|
#
|
|
def store(framework)
|
|
raise NotImplementedError
|
|
end
|
|
|
|
#
|
|
# This method initializes the supplied framework instance with the state
|
|
# that is stored in the persisted backing that the derived class
|
|
# implements. If the derived class does not implement this method, the
|
|
# NotImplementedError is raised.
|
|
#
|
|
def fetch(framework)
|
|
raise NotImplementedError
|
|
end
|
|
|
|
#
|
|
# This method adds a new storage class to the hash of storage classes that
|
|
# can be created through create.
|
|
#
|
|
def self.add_storage_class(name, klass)
|
|
@@storage_classes[name] = klass
|
|
end
|
|
|
|
protected
|
|
|
|
end
|
|
|
|
end
|
|
|
|
require 'msf/base/persistent_storage/flatfile'
|