def __init__(self, cfg, **kwargs): self.vpns = cfg.vpns if 'vpn_id' in kwargs: vpn = self.vpns[kwargs['vpn_id']] self._socket_connect(vpn) if vpn['socket_connected']: version = self.send_command('version\n') sem_ver = semver(self.parse_version(version).split(' ')[1]) if sem_ver.minor == 4 and 'port' not in kwargs: command = 'client-kill {0!s}\n'.format(kwargs['client_id']) else: command = 'kill {0!s}:{1!s}\n'.format( kwargs['ip'], kwargs['port']) info('Sending command: {0!s}'.format(command)) self.send_command(command) self._socket_disconnect() geoip_data = cfg.settings['geoip_data'] self.gi = GeoIP.open(geoip_data, GeoIP.GEOIP_STANDARD) for key, vpn in list(self.vpns.items()): self._socket_connect(vpn) if vpn['socket_connected']: self.collect_data(vpn) self._socket_disconnect()
def __init__(self, cfg, **kwargs): self.vpns = cfg.vpns if 'vpn_id' in kwargs: vpn = self.vpns[kwargs['vpn_id']] self._socket_connect(vpn) if vpn['socket_connected']: release = self.send_command('version\n') version = semver(self.parse_version(release).split(' ')[1]) if version.major == 2 and \ version.minor >= 4 and \ 'port' not in kwargs: command = 'client-kill {0!s}\n'.format(kwargs['client_id']) else: command = 'kill {0!s}:{1!s}\n'.format(kwargs['ip'], kwargs['port']) self.send_command(command) self._socket_disconnect() geoip_data = cfg.settings['geoip_data'] if geoip_data.endswith('.mmdb') and geoip2_available: self.gi = database.Reader(geoip_data) self.geoip_version = 2 elif geoip_data.endswith('.dat') and geoip1_available: self.gi = geoip1.open(geoip_data, geoip1.GEOIP_STANDARD) self.geoip_version = 1 else: warning('No compatible geoip1 or geoip2 data/libraries found.') self.geoip_version = None self.gi = None for key, vpn in list(self.vpns.items()): self._socket_connect(vpn) if vpn['socket_connected']: self.collect_data(vpn) self._socket_disconnect()
def collect_data(self, vpn): version = self.send_command('version\n') vpn['version'] = self.parse_version(version) vpn['semver'] = semver(vpn['version'].split(' ')[1]) state = self.send_command('state\n') vpn['state'] = self.parse_state(state) stats = self.send_command('load-stats\n') vpn['stats'] = self.parse_stats(stats) status = self.send_command('status 3\n') vpn['sessions'] = self.parse_status(status, self.gi, vpn['semver'])
def collect_data(self, vpn): ver = self.send_command('version\n') vpn['release'] = self.parse_version(ver) vpn['version'] = semver(vpn['release'].split(' ')[1]) state = self.send_command('state\n') vpn['state'] = self.parse_state(state) stats = self.send_command('load-stats\n') vpn['stats'] = self.parse_stats(stats) status = self.send_command('status 3\n') vpn['sessions'] = self.parse_status(status, vpn['version'])
def collect_data(self, vpn): ver = self.send_command("version\n") vpn["release"] = self.parse_version(ver) vpn["version"] = semver(vpn["release"].split(" ")[1]) state = self.send_command("state\n") vpn["state"] = self.parse_state(state) stats = self.send_command("load-stats\n") vpn["stats"] = self.parse_stats(stats) status = self.send_command("status 3\n") vpn["sessions"] = self.parse_status(status, vpn["version"])
def kill_client(self, vpn_name, ip, port, client_id): vpn = self.vpns[vpn_name] self._socket_connect(vpn) if vpn["socket_connected"]: release = self.send_command("version\n") version = semver(self.parse_version(release).split(" ")[1]) if version.major == 2 and version.minor >= 4 and not port: command = "client-kill {0!s}\n".format(client_id) else: command = "kill {0!s}:{1!s}\n".format(ip, port) self.send_command(command) self._socket_disconnect()
def __init__(self, cfg, **kwargs): self.vpns = cfg.vpns if 'vpn_id' in kwargs: vpn = self.vpns[kwargs['vpn_id']] self._socket_connect(vpn) if vpn['socket_connected']: release = self.send_command('version\n') version = semver(self.parse_version(release).split(' ')[1]) if version.major == 2 and \ version.minor >= 4 and \ 'port' not in kwargs: command = 'client-kill {0!s}\n'.format(kwargs['client_id']) else: command = 'kill {0!s}:{1!s}\n'.format(kwargs['ip'], kwargs['port']) self.send_command(command) self._socket_disconnect() geoip_data = cfg.settings['geoip_data'] self.geoip_version = None self.gi = None try: if geoip_data.endswith('.mmdb') and geoip2_available: self.gi = database.Reader(geoip_data) self.geoip_version = 2 elif geoip_data.endswith('.dat') and geoip1_available: self.gi = geoip1.open(geoip_data, geoip1.GEOIP_STANDARD) self.geoip_version = 1 else: warning('No compatible geoip1 or geoip2 data/libraries found.') except IOError: warning('No compatible geoip1 or geoip2 data/libraries found.') for key, vpn in list(self.vpns.items()): self._socket_connect(vpn) if vpn['socket_connected']: self.collect_data(vpn) self._socket_disconnect()
def main(args): incr = get_increment(args) if (not os.path.isfile(CFG)): exit("No config file found, nothing to do.") files, pre_cmds, post_cmds = read_conf() files_paths = list(map(get("path"), files)) files_patterns = list(map(get("pattern"), files)) files_lines = list(map(read_lines, files_paths)) # check if versions are unique versions = flatten(map(get_versions, files_lines, files_patterns)) current = check_versions(versions) newver = str(incr(semver(current))) if current == newver: exit("Nothing to do.") print("Bumping to version %s" % newver) t_vars = {"oldv": current, "newv": newver, "files": " ".join(files_paths)} exec_many(pre_cmds, t_vars) for pattern, lines, path in zip(files_patterns, files_lines, files_paths): splice_new_version = replace_first_with(pattern, newver) is_version_line = partial(re.search, pattern) new_lines = map(update_matching(is_version_line, splice_new_version), lines) copyfile(path, "%s.%d.bkp" % (path, epoch_now())) write_lines(path, new_lines) exec_many(post_cmds, t_vars)