Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
 def get_domain(self, request):
     validator = Validator(request)
     token = validator.token()
     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')
         return domain
Пример #5
0
 def get_domain(self, request):
     validator = Validator(request)
     token = validator.token()
     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')
         return domain
Пример #6
0
 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)
Пример #7
0
 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)
Пример #8
0
    def activate(self, request):
        validator = Validator(request)
        token = validator.token()
        check_validator(validator)

        with self.create_storage() as storage:
            user = storage.get_user_by_activate_token(token)
            if not user:
                raise servicesexceptions.bad_request('Invalid activation token')

            if user.active:
                raise servicesexceptions.bad_request('User is active already')

            user.active = True

        return True
Пример #9
0
    def activate(self, request):
        validator = Validator(request)
        token = validator.token()
        check_validator(validator)

        with self.create_storage() as storage:
            user = storage.get_user_by_activate_token(token)
            if not user:
                raise servicesexceptions.bad_request(
                    'Invalid activation token')

            if user.active:
                raise servicesexceptions.bad_request('User is active already')

            user.active = True

        return True
Пример #10
0
    def user_set_password(self, request):
        validator = Validator(request)
        token = validator.token()
        password = validator.new_password()
        check_validator(validator)

        with self.create_storage() as storage:
            user = storage.get_user_by_token(ActionType.PASSWORD, token)

            if not user:
                raise servicesexceptions.bad_request('Invalid password token')

            user.password_hash = util.hash(password)

            self.mail.send_set_password(user.email)

            action = storage.get_action(token)
            storage.delete(action)
Пример #11
0
    def user_set_password(self, request):
        validator = Validator(request)
        token = validator.token()
        password = validator.new_password()
        check_validator(validator)

        with self.create_storage() as storage:
            user = storage.get_user_by_token(ActionType.PASSWORD, token)

            if not user:
                raise servicesexceptions.bad_request('Invalid password token')

            user.password_hash = util.hash(password)

            self.mail.send_set_password(user.email)

            action = storage.get_action(token)
            storage.delete(action)
Пример #12
0
    def activate(self, request):
        validator = Validator(request)
        token = validator.token()
        errors = validator.errors

        if errors:
            message = ", ".join(errors)
            raise servicesexceptions.bad_request(message)

        with self.create_storage() as storage:
            user = storage.get_user_by_activate_token(token)
            if not user:
                raise servicesexceptions.bad_request('Invalid activation token')

            if user.active:
                raise servicesexceptions.conflict('User is active already')

            user.active = True

        return True
Пример #13
0
    def domain_update(self, request, request_ip=None):
        validator = Validator(request)
        token = validator.token()
        ip = validator.ip(request_ip)
        errors = validator.errors

        if errors:
            message = ", ".join(errors)
            raise servicesexceptions.bad_request(message)

        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')

            map(self.validate_service, request['services'])

            request_services = [new_service_from_dict(s) for s in request['services']]
            added_services = self.get_missing(request_services, domain.services)
            removed_services = self.get_missing(domain.services, request_services)

            storage.delete(removed_services)

            for s in added_services:
                s.domain = domain
                domain.services.append(s)

            storage.add(added_services)

            is_new_dmain = domain.ip is None
            update_ip = domain.ip != ip
            domain.ip = ip

            if is_new_dmain:
                self.dns.new_domain(self.main_domain, domain)
            else:
                self.dns.update_domain(self.main_domain, domain, update_ip=update_ip, added=added_services, removed=removed_services)

            domain.last_update = datetime.now()
            return domain
Пример #14
0
    def user_set_password(self, request):
        validator = Validator(request)
        token = validator.token()
        password = validator.new_password()
        errors = validator.errors

        if errors:
            message = ", ".join(errors)
            raise servicesexceptions.bad_request(message)

        with self.create_storage() as storage:
            user = storage.get_user_by_token(ActionType.PASSWORD, token)

            if not user:
                raise servicesexceptions.forbidden('Invalid password token')

            user.password_hash = util.hash(password)

            self.mail.send_set_password(user.email)

            action = storage.get_action(token)
            storage.delete(action)
Пример #15
0
    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