def port_probe(self, request, request_ip): validator = Validator(request) token = validator.token() port = validator.port('port', True) protocol = validator.string('protocol', False) ip = validator.string('ip', False) check_validator(validator) domain = None with self.create_storage() as storage: domain = storage.get_domain_by_update_token(token) if not domain or not domain.user.active: raise servicesexceptions.bad_request('Unknown domain update token') try: if ip: request_ip = ip response = requests.get('{0}://{1}:{2}/ping'.format( protocol, request_ip, port), timeout=1, verify=False, allow_redirects=False) if response.status_code == 200: return {'message': response.text, 'device_ip': request_ip}, 200 # TODO: Remove after release 18.07 reaches wider adoption elif response.status_code == 301 and protocol == 'http': return {'message': "OK", 'device_ip': request_ip}, 200 except Exception, e: pass
def domain_acquire(self, request): user = self.authenticate(request) validator = Validator(request) user_domain = validator.new_user_domain() device_mac_address = validator.device_mac_address() device_name = validator.string('device_name', required=True) device_title = validator.string('device_title', required=True) check_validator(validator) with self.create_storage() as storage: domain = storage.get_domain_by_name(user_domain) if domain and domain.user_id != user.id: raise servicesexceptions.parameter_error( 'user_domain', 'User domain name is already in use') update_token = util.create_token() if not domain: domain = Domain(user_domain, device_mac_address, device_name, device_title, update_token=update_token) domain.user = user storage.add(domain) else: domain.update_token = update_token domain.device_mac_address = device_mac_address domain.device_name = device_name domain.device_title = device_title return domain
def port_probe(self, request, request_ip): validator = Validator(request) token = validator.token() port = validator.port('port', True) protocol = validator.string('protocol', False) ip = validator.string('ip', False) check_validator(validator) domain = None with self.create_storage() as storage: domain = storage.get_domain_by_update_token(token) if not domain or not domain.user.active: raise servicesexceptions.bad_request('Unknown domain update token') try: if ip: request_ip = ip response = requests.get('{0}://{1}:{2}/ping'.format(protocol, request_ip, port), timeout=1, verify=False, allow_redirects=False) if response.status_code == 200: return {'message': response.text, 'device_ip': request_ip}, 200 # TODO: Remove after release 18.07 reaches wider adoption elif response.status_code == 301 and protocol == 'http': return {'message': "OK", 'device_ip': request_ip}, 200 except Exception, e: pass
def domain_acquire(self, request): user = self.authenticate(request) validator = Validator(request) user_domain = validator.new_user_domain() device_mac_address = validator.device_mac_address() device_name = validator.string('device_name', required=True) device_title = validator.string('device_title', required=True) check_validator(validator) with self.create_storage() as storage: domain = storage.get_domain_by_name(user_domain) if domain and domain.user_id != user.id: raise servicesexceptions.parameter_error('user_domain', 'User domain name is already in use') update_token = util.create_token() if not domain: domain = Domain(user_domain, device_mac_address, device_name, device_title, update_token=update_token) domain.user = user storage.add(domain) else: domain.update_token = update_token domain.device_mac_address = device_mac_address domain.device_name = device_name domain.device_title = device_title return domain
def domain_update(self, request, request_ip=None): validator = Validator(request) token = validator.token() ip = validator.ip(request_ip) local_ip = validator.local_ip() map_local_address = validator.boolean('map_local_address', required=False) platform_version = validator.string('platform_version', required=False) web_protocol = validator.web_protocol(required=True) web_local_port = validator.port('web_local_port', required=True) web_port = validator.port('web_port', required=False) check_validator(validator) if map_local_address is None: map_local_address = False with self.create_storage() as storage: domain = storage.get_domain_by_update_token(token) if not domain or not domain.user.active: raise servicesexceptions.bad_request('Unknown domain update token') update_ip = (domain.map_local_address != map_local_address) or (domain.ip != ip) or (domain.local_ip != local_ip) domain.ip = ip domain.local_ip = local_ip domain.map_local_address = map_local_address domain.platform_version = platform_version domain.web_protocol = web_protocol domain.web_local_port = web_local_port domain.web_port = web_port if update_ip: self.dns.update_domain(self.main_domain, domain) domain.last_update = datetime.now() return domain
def user_log(self, request): validator = Validator(request) token = validator.token() data = validator.string('data') include_support = validator.boolean('include_support', False, True) with self.create_storage() as storage: user = storage.get_user_by_update_token(token) if not user: raise servicesexceptions.bad_request('Invalid update token') self.mail.send_logs(user.email, data, include_support)
def domain_update(self, request, request_ip=None): validator = Validator(request) token = validator.token() ip = validator.ip(request_ip) local_ip = validator.local_ip() map_local_address = validator.boolean('map_local_address', required=False) platform_version = validator.string('platform_version', required=False) web_protocol = validator.web_protocol(required=True) web_local_port = validator.port('web_local_port', required=True) web_port = validator.port('web_port', required=False) check_validator(validator) if map_local_address is None: map_local_address = False with self.create_storage() as storage: domain = storage.get_domain_by_update_token(token) if not domain or not domain.user.active: raise servicesexceptions.bad_request( 'Unknown domain update token') update_ip = (domain.map_local_address != map_local_address) or ( domain.ip != ip) or (domain.local_ip != local_ip) domain.ip = ip domain.local_ip = local_ip domain.map_local_address = map_local_address domain.platform_version = platform_version domain.web_protocol = web_protocol domain.web_local_port = web_local_port domain.web_port = web_port if update_ip: self.dns.update_domain(self.main_domain, domain) domain.last_update = datetime.now() return domain