def do_add(self, arguments): """add a new remote module repository""" if len(arguments.options) == 1: url = arguments.options[0] Remote.create(url) print "Added remote: %s.\n" % url else: print "usage: drozer module remote create http://path.to.repository/\n"
def do_list(self, arguments): """shows a list of all remotes""" print "Remote repositories:" for url in Remote.all(): print " %s" % url try: Remote(url).download("INDEX.xml") except NetworkException: print " INACCESSIBLE" print
def __read_remote_module(self, module): """ Read a module file from a remote, and return the source. """ for url in Remote.all(): source = Remote.get(url).download(module) # if we found the source, we return straight away - this allows us to # install the module from the first source that we come across if source != None: return source return None
def do_remove(self, arguments): """remove a remote module repository""" if len(arguments.options) == 1: url = arguments.options[0] try: Remote.delete(url) print "Removed remove %s.\n" % url except UnknownRemote: print "The target (%s) is not a remote module repository.\n" % url else: print "usage: drozer module remote delete http://path.to.repository/\n"
def testItShouldRetrieveAllWithoutAConfigFile(self): Configuration._Configuration__config = self.mockConfigWithoutRemotes() # if there are no remotes specified, we should create a default one pointing # to the Github repository assert Remote.all() == [ 'https://raw.github.com/mwrlabs/drozer-modules/repository/' ]
def __get_combined_index(self): """ Fetches INDEX files from all known remotes, and builds a combined INDEX listing of all available modules. """ index = set([]) for url in Remote.all(): source = Remote.get(url).download("INDEX.xml") if source != None: modules = xml.fromstring(source) index = index.union(map(lambda m: ModuleInfo(url, m.attrib['name'], m.find("./description").text), modules.findall("./module"))) return filter(lambda m: m != None and m != "", index)
def testItShouldNotRemoteARemoteTheDoesNotExist(self): Configuration._Configuration__config = self.mockConfigWithRemotes([]) try: assert Remote.delete("http://myremote.com/") assert False, "expected UnknownRemote" except UnknownRemote: pass
def testItShouldRetrieveNoRemotes(self): Configuration._Configuration__config = self.mockConfigWithRemotes([]) assert Remote.all() == []
def testItShouldNotReAddARemote(self): Configuration._Configuration__config = self.mockConfigWithRemotes( ["http://myremote.com/"]) assert not Remote.create("http://myremote.com/") assert Remote.all() == ["http://myremote.com/"]
def testItShouldRemoveARemote(self): Configuration._Configuration__config = self.mockConfigWithRemotes( ["http://myremote.com/"]) assert Remote.delete("http://myremote.com/") assert Remote.all() == []
def testItShouldGetARemote(self): Configuration._Configuration__config = self.mockConfigWithRemotes( ["http://myremote.com/"]) assert isinstance(Remote.get("http://myremote.com/"), Remote)
def testItShouldGetNoneIfARemoteDoesNotExist(self): Configuration._Configuration__config = self.mockConfigWithRemotes([]) assert Remote.get("http://myremote.com/") == None
def testItShouldConstructAValidDownloadPathIfNoTrailingSlashIsGiven(self): assert Remote("http://myremote.com").buildPath( "INDEX") == "http://myremote.com/INDEX"
def testItShouldRetrieveASingleRemote(self): Configuration._Configuration__config = self.mockConfigWithRemotes( ['http://www.mercury.com']) assert Remote.all() == ['http://www.mercury.com']