def doInsert(self, values): """ Insert the Scope represented by this model in the database with the given values. Args: values: A dictionary crafted by MultipleScopeView or ScopeView containg all form fields values needed. Returns: { '_id': The mongo ObjectId _id of the inserted command document. 'nbErrors': The number of objects that has not been inserted in database due to errors. } """ # Only multi insert exists at the moment for Scope # Get form values wave = values["wave"] ret = [] total = 0 accepted = 0 insert_setting = values["Settings"] split_range_setting = values.get("Split", False) for line in values["Scopes"].split("\n"): if line.strip() != "": # Insert in database scopeToAdd = line.strip() if Utils.isIp(scopeToAdd): scopeToAdd += "/32" if Utils.isNetworkIp(scopeToAdd): if split_range_setting: network_ips = Utils.splitRange(scopeToAdd) if len(network_ips) == 0: model = Scope().initialize(wave, scopeToAdd, "") inserted_res, iid = model.addInDb() else: for network_ip in network_ips: model = Scope().initialize( wave, str(network_ip), "") inserted_res, iid = model.addInDb() if inserted_res: accepted += 1 ret.append(iid) total += 1 else: model = Scope().initialize(wave, scopeToAdd, "") inserted_res, iid = model.addInDb() else: model = Scope().initialize(wave, scopeToAdd, "") inserted_res, iid = model.addDomainInDb(insert_setting) if inserted_res == 1: accepted += 1 ret.append(iid) total += 1 return ret, total - accepted # nb errors = total - accepted
def checkDomainFit(cls, waveName, domain): """ Check if a found domain belongs to one of the scope of the given wave. Args: waveName: The wave id (name) you want to search for a validating scope domain: The found domain. Returns: boolean """ # Checking settings for domain check. settings = Settings() # get the domain ip so we can search for it in ipv4 range scopes. domainIp = Utils.performLookUp(domain) apiclient = APIClient.getInstance() scopesOfWave = apiclient.find("scopes", {"wave": waveName}) for scopeOfWave in scopesOfWave: scopeIsANetworkIp = Utils.isNetworkIp(scopeOfWave["scope"]) if scopeIsANetworkIp: if settings.db_settings.get("include_domains_with_ip_in_scope", False): if Ip.checkIpScope(scopeOfWave["scope"], domainIp): return True else: # If scope is domain # check if we include subdomains if settings.db_settings.get("include_all_domains", False): return True else: splitted_domain = domain.split(".") # Assuring to check only if there is a domain before the tld (.com, .fr ... ) topDomainExists = len(splitted_domain) > 2 if topDomainExists: if settings.db_settings.get("include_domains_with_topdomain_in_scope", False): if splitted_domain[1:] == scopeOfWave["scope"].split("."): return True if settings.db_settings.get("include_domains_with_ip_in_scope", False): inRangeDomainIp = Utils.performLookUp( scopeOfWave["scope"]) if str(inRangeDomainIp) == str(domainIp): return True return False
def isDomain(self): """Returns True if this scope is not a valid NetworkIP Returns: bool """ return not Utils.isNetworkIp(self.scope)