Пример #1
0
    async def login(self, request: web.Request):
        if not self._user_db.is_user_exists():
            return web.HTTPFound(request.app.router['register'].url_for())

        if request.method == 'GET':
            session = await get_session(request)
            if 'username' in session:
                return web.HTTPFound(request.app.router['index'].url_for())

            return aiohttp_jinja2.render_template('login.html', request, {})

        elif request.method == 'POST':
            form_data = await request.post()
            if 'username' in form_data and 'password' in form_data:
                if self._user_db.has_user(form_data['username'],
                                          form_data['password']):
                    await self.authorize_user(request, form_data['username'])

                    return jsonp_response(
                        request, {
                            'status': 0,
                            'msg': 'success',
                            'url': str(request.app.router['index'].url_for())
                        })

            return jsonp_response(request, {
                'status': 200,
                'msg': 'Username or password error'
            })
Пример #2
0
    async def register(self, request: web.Request):
        if self._user_db.is_user_exists():
            return jsonp_response(
                request, {
                    'status':
                    100,
                    'msg':
                    'This method does not allow to visit after initialization'
                })
        if request.method == 'GET':
            return aiohttp_jinja2.render_template('register.html', request, {})
        elif request.method == 'POST':
            form_data = await request.post()
            if 'username' in form_data and 'password' in form_data:
                self._user_db.create_user(form_data['username'],
                                          form_data['password'],
                                          permission=0)
                if self._user_db.is_user_exists():
                    await self.authorize_user(request, form_data['username'])

                    return jsonp_response(
                        request, {
                            'status': 0,
                            'msg': 'success',
                            'url': str(request.app.router['index'].url_for())
                        })

        return jsonp_response(request, {
            'status': 101,
            'msg': 'Something went wrong'
        })
Пример #3
0
 async def remove_client_api(self, request: web.Request):
     uuid = request.match_info['uuid']
     exception = self.client_db.remove_client(uuid)
     if exception:
         return jsonp_response(request, {'status': 400, 'msg': exception})
     else:
         await self._disconnect_websocket(uuid)
         return jsonp_response(
             request, {
                 'status':
                 0,
                 'msg':
                 'Delete the uuid "{uuid}..." successfully'.format(
                     uuid=uuid[:5])
             })
Пример #4
0
 async def deauth_api(self, request: web.Request):
     uuid = request.match_info['uuid']
     check = self.client_db.clear_token(uuid)
     if check:
         return jsonp_response(
             request, {
                 'status': 0,
                 'msg': '{uuid}\'s token is cleared'.format(uuid=uuid)
             })
     else:
         return jsonp_response(
             request, {
                 'status': 101,
                 'msg': 'uuid: {uuid} not found'.format(uuid=uuid)
             })
Пример #5
0
    async def deploy(self, request: web.Request):
        project_name = request.match_info['project_name']
        uuid = request.match_info['uuid']
        filepath = self.__project_dir / project_name
        if project_name not in self.__projects or not filepath.is_dir():
            return jsonp_response(
                request, {
                    'status':
                    400,
                    'msg':
                    'project "{project_name}" is not found'.format(
                        project_name=project_name)
                })
        elif uuid not in self.ws_client:
            return jsonp_response(request, {
                'status': 400,
                'msg': 'the crawler is disconnected'
            })

        archive = self.__projects[project_name].get('archive', None)
        if archive is None \
                or archive.split('_', 2)[0] != self.__projects[project_name]['hash'] \
                or not Path(archive).is_file():

            archive = shutil.make_archive(
                base_name='{project_dir}/{hash}_{project_name}'.format(
                    project_dir=str(self.__project_dir),
                    hash=self.__projects[project_name]['hash'],
                    project_name=project_name),
                format=self.__archive_type,
                root_dir=str(filepath.absolute()))
            self.__projects[project_name]['archive'] = archive

        token = gen_token()
        while token in self.__downloads:
            token = gen_token()
        self.__downloads[token] = archive

        await self.send_command(uuid, 1, {
            'token': token,
            'filename': Path(archive).name
        })
        return jsonp_response(request, {
            'status': 0,
        })
Пример #6
0
 async def auth_api(self, request: web.Request):
     client_id = request.match_info['id']
     token = self.client_db.auth(client_id)
     if token:
         return jsonp_response(
             request, {
                 'status':
                 0,
                 'msg':
                 '"id: {client_id} is verified"'.format(client_id=client_id)
             })
     else:
         return jsonp_response(
             request, {
                 'status':
                 101,
                 'msg':
                 'id: {client_id} is not found'.format(client_id=client_id)
             })
Пример #7
0
 async def get_websocket_url(self, request: web.Request):
     session = await get_session(request)
     return jsonp_response(
         request, {
             'status':
             0,
             'websocket_url':
             str(request.app.router['user_websocket'].url_for(
                 token=session['token']))
         })
Пример #8
0
    async def get_active_client(self, request: web.Request):
        page_number = int(request.query.get('pageNumber', '1'))
        page_size = int(request.query.get('pageSize', '5'))

        total = self.__active_clients.count()
        rows = [{
            'id': one.client_id,
            'uuid': one.uuid,
            'remote': one.remote_ip,
            'host': one.host,
            'hostname': one.hostname,
            'status': one.status,
            'authorized_at': one.authorized_at.strftime(DATETIME_FORMAT)
        } for one in self.__active_clients.paginate(page_number, page_size)]

        return jsonp_response(request, {'total': total, 'rows': rows})
Пример #9
0
    async def get_unverified_client_api(self, request: web.Request):
        page_number = int(request.query.get('pageNumber', '1'))
        page_size = int(request.query.get('pageSize', '5'))

        total = self.__unverified_clients.count()
        # total = int(ceil(self.__unverified_clients.count() / page_size))
        rows = [{
            'id': one.client_id,
            'uuid': one.uuid,
            'remote': one.remote_ip,
            'host': one.host,
            'hostname': one.hostname,
            'last': one.connected_at.strftime(DATETIME_FORMAT)
        } for one in self.__unverified_clients.paginate(
            page_number, page_size)]

        return jsonp_response(request, {'total': total, 'rows': rows})
Пример #10
0
 async def get_project(self, request: web.Request):
     return jsonp_response(request, {
         'total': len(self.__projects),
         'rows': list(self.__projects.values())
     })