Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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'])
Ejemplo n.º 4
0
 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'])
Ejemplo n.º 5
0
 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"])
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)