Exemple #1
0
 def adapt_dnsmasq(self, origin_resolv_conf: Path,
                   vpn_service: str) -> Optional[Path]:
     content = FileHelper.read_file_by_line(self.config.main_cfg)
     resolv = TextHelper.awk(next(
         iter(TextHelper.grep(content, r'dnsmasq_resolv=.+')), None),
                             sep='=',
                             pos=1)
     return Path(resolv or self.config.runtime_resolv)
Exemple #2
0
 def query_sessions(self) -> dict:
     sessions = self.exec_command('SessionList')
     row = zip(TextHelper.grep(sessions, r'Session Name.+'),
               TextHelper.grep(sessions, r'User Name.+'))
     return {
         v.get('session_name'): self._lookup_session(v)
         for v in self._parse_row(row, {
             0: 'session_name',
             1: 'user_name'
         })
     }
Exemple #3
0
 def _query_mac_table(self):
     mac_table = self.exec_command('MacTable')
     row = zip(TextHelper.grep(mac_table, r'Session Name.+'),
               TextHelper.grep(mac_table, r'MAC Address.+\|.+'))
     return {
         v['mac']: v
         for v in self._parse_row(row, {
             0: 'session_name',
             1: 'mac'
         })
     }
Exemple #4
0
 def _query_dhcp_table(self):
     dhcp_table = self.exec_command('DhcpTable')
     row = zip(TextHelper.grep(dhcp_table, r'MAC Address.+'),
               TextHelper.grep(dhcp_table, r'Allocated IP.+'),
               TextHelper.grep(dhcp_table, r'Client Host Name.+'))
     return {
         v['mac']: v
         for v in self._parse_row(row, {
             0: 'mac',
             1: 'vpn_ip',
             2: 'hostname'
         })
     }
Exemple #5
0
 def _lookup_session(self, user_session: dict) -> Optional[UserSession]:
     if user_session.get('user_name', None) == UserSession.NAT_SESSION_USER:
         return None
     session = self.exec_command(
         f'SessionGet {user_session.get("session_name")}')
     row = zip(
         TextHelper.grep(session, r'Client IP Address[^(\n]+\|.+'),
         TextHelper.grep(session, r'Client Host Name[^(\n]+\|.+'),
         TextHelper.grep(session, r'Client IP Address.+\(Reported\).+\|.+'),
         TextHelper.grep(session, r'Client Host Name.+\(Reported\).+\|.+'))
     extra = next(
         self._parse_row(
             row, {
                 0: 'public_ip',
                 1: 'public_hostname',
                 2: 'local_ip',
                 3: 'local_hostname'
             }), None)
     if not extra:
         return None
     return UserSession(**{**user_session, **extra})
Exemple #6
0
 def get_vpn_status(self, vpn_acc: str) -> dict:
     if not vpn_acc:
         return {'connected': False}
     try:
         ss = self.exec_command('AccountStatusGet',
                                params=vpn_acc,
                                silent=True,
                                log_lvl=logger.DEBUG)
         ss_msg = TextHelper.awk(next(
             iter(TextHelper.grep(ss, r'Session Status.+')), None),
                                 sep='|',
                                 pos=1).strip()
         return {
             'connected':
             ss_msg == 'Connection Completed (Session Established)',
             'msg': ss_msg
         }
     except Exception as err:
         logger.debug(
             f'Something wrong when getting VPN status. Error[{err}]')
         return {'connected': False}
Exemple #7
0
 def _parse_row(row: Iterator[Tuple], columns: dict) -> Iterator[dict]:
     return map(
         lambda each: {
             columns[idx]: TextHelper.awk(r, sep='|', pos=1)
             for idx, r in enumerate(each)
         }, row)
Exemple #8
0
 def _parse_entry_value(self, idx: int, row: str):
     value = TextHelper.awk(row, sep='|', pos=1)
     return self.decode_host_name(value) if idx == 2 else value
Exemple #9
0
 def _optimize_command_result(self, output):
     r = TextHelper.grep(output, r'VPN Client>.+((?:\n.+)+)')
     return ''.join(r).replace('The command completed successfully.',
                               '').strip()
Exemple #10
0
 def read_env():
     content = FileHelper.read_file_by_line(VpnDirectory.PROFILE_D_ENV)
     env = TextHelper.awk(next(iter(TextHelper.grep(content, rf'{AppEnv.VPN_HOME_ENV}=.+', flags=re.VERBOSE)), None),
                          sep='=', pos=1)
     return None if not env else env.replace('"', "")
Exemple #11
0
def __do_encrypt(value, algorithm="sha256", enabled_base64=False):
    hash_algorithm = hashes.MD5() if algorithm == "md5" else hashes.SHA1() if algorithm == "sha1" else hashes.SHA256()
    digest = hashes.Hash(hash_algorithm, crypto_default_backend())
    digest.update(value.encode("utf-8"))
    encrypt = digest.finalize()
    return TextHelper.encode_base64(encrypt) if enabled_base64 else encrypt.hex()