Пример #1
0
def api_register_user(*, email, name, passwd):
    if not name or not name.strip():
        raise APIValueError('name')
    if not email or not _RE_EMAIL.match(email):
        raise APIValueError('email')
    if not passwd or not _RE_SHA1.match(passwd):
        raise APIValueError('passwd')
    users = yield from User.findAll('email=?', [email])
    if len(users) > 0:
        raise APIValueError('register:failed', 'email',
                            'Email is already in use.')
    uid = next_id()
    sha1_passwd = '%s:%s' % (uid, passwd)
    user = User(id=uid,
                name=name.strip(),
                email=email,
                passwd=hashlib.sha1(sha1_passwd.encode('utf-8')).hexdigest,
                image='http://www.gravatar.com/avatar/%s?d=mm&s=120' %
                hashlib.md5(email.encode('utf-8')).hexdigest())
    yield from user.save()
    r = web.Request()
    r.set_cookie(COOKIE_NAME,
                 user2cookie(user, 86400),
                 max_age=86400,
                 httponly=True)
    user.passwd = '******'
    r.content_type = 'application/json'
    r.body = json.dump(user, ensure_ascii=False).encode('utf-8')
    return r
 def setUp(self):
     meta = {}
     run_args = argparse.ArgumentParser()
     run_args.add_argument("--tanner")
     run_args.add_argument("--page-dir")
     self.main_page_path = generate_unique_path()
     os.makedirs(self.main_page_path)
     page_dir = self.main_page_path.rsplit('/')[-1]
     args = run_args.parse_args(['--page-dir', page_dir])
     snare_uuid = '9c10172f-7ce2-4fb4-b1c6-abc70141db56'.encode('utf-8')
     args.no_dorks = True
     self.handler = TannerHandler(args, meta, snare_uuid)
     headers = {
         'Host': 'test_host',
         'status': 200,
         'Cookie': 'sess_uuid=prev_test_uuid; test_cookie=test'
     }
     message = RawRequestMessage(method='POST',
                                 path='/',
                                 version=HttpVersion(major=1, minor=1),
                                 headers=headers,
                                 raw_headers=None,
                                 should_close=None,
                                 compression=None,
                                 upgrade=None,
                                 chunked=None,
                                 url=URL('http://test_url/'))
     loop = asyncio.get_event_loop()
     RequestHandler = Mock()
     protocol = RequestHandler()
     self.request = web.Request(message=message,
                                payload=None,
                                protocol=protocol,
                                payload_writer=None,
                                task='POST',
                                loop=loop)
     self.request.transport.get_extra_info = Mock(
         return_value=(['test_ip', 'test_port']))
     self.response_status = "test_status"
     self.data = None
     self.expected_data = {
         'method': 'POST',
         'path': 'http://test_url/',
         'headers': {
             'Host': 'test_host',
             'status': 200,
             'Cookie': 'sess_uuid=prev_test_uuid; test_cookie=test'
         },
         'uuid': '9c10172f-7ce2-4fb4-b1c6-abc70141db56',
         'peer': {
             'ip': 'test_ip',
             'port': 'test_port'
         },
         'status': 'test_status',
         'cookies': {
             'sess_uuid': 'prev_test_uuid',
             ' test_cookie': 'test'
         }
     }
 def setUp(self):
     meta = {}
     run_args = argparse.ArgumentParser()
     run_args.add_argument("--tanner")
     run_args.add_argument("--page-dir")
     self.main_page_path = generate_unique_path()
     os.makedirs(self.main_page_path)
     page_dir = self.main_page_path.rsplit("/")[-1]
     args = run_args.parse_args(["--page-dir", page_dir])
     args_dict = vars(args)
     args_dict["full_page_path"] = self.main_page_path
     snare_uuid = "9c10172f-7ce2-4fb4-b1c6-abc70141db56".encode("utf-8")
     args.no_dorks = True
     self.handler = TannerHandler(args, meta, snare_uuid)
     headers = {
         "Host": "test_host",
         "status": 200,
         "Cookie": "sess_uuid=prev_test_uuid; test_cookie=test",
     }
     message = RawRequestMessage(
         method="POST",
         path="/",
         version=HttpVersion(major=1, minor=1),
         headers=headers,
         raw_headers=None,
         should_close=None,
         compression=None,
         upgrade=None,
         chunked=None,
         url=URL("http://test_url/"),
     )
     loop = asyncio.get_event_loop()
     RequestHandler = Mock()
     protocol = RequestHandler()
     self.request = web.Request(
         message=message,
         payload=None,
         protocol=protocol,
         payload_writer=None,
         task="POST",
         loop=loop,
     )
     self.request.transport.get_extra_info = Mock(return_value=(["test_ip", "test_port"]))
     self.response_status = "test_status"
     self.data = None
     self.expected_data = {
         "method": "POST",
         "path": "http://test_url/",
         "headers": {
             "Host": "test_host",
             "status": 200,
             "Cookie": "sess_uuid=prev_test_uuid; test_cookie=test",
         },
         "uuid": "9c10172f-7ce2-4fb4-b1c6-abc70141db56",
         "peer": {"ip": "test_ip", "port": "test_port"},
         "status": "test_status",
         "cookies": {"sess_uuid": "prev_test_uuid", " test_cookie": "test"},
     }
 def setUp(self):
     meta = {}
     run_args = argparse.ArgumentParser()
     run_args.add_argument("--tanner")
     run_args.add_argument("--page-dir")
     self.main_page_path = generate_unique_path()
     os.makedirs(self.main_page_path)
     self.page_dir = self.main_page_path.rsplit('/')[-1]
     args = run_args.parse_args(['--page-dir', self.page_dir])
     args_dict = vars(args)
     args_dict['full_page_path'] = self.main_page_path
     uuid = '9c10172f-7ce2-4fb4-b1c6-abc70141db56'.encode('utf-8')
     args.tanner = 'tanner.mushmush.org'
     args.no_dorks = True
     args.server_header = "test_server"
     args.slurp_enabled = True
     self.handler = HttpRequestHandler(meta, args, uuid)
     self.request_data = {
         'method': 'GET',
         'path': '/',
         'headers': {
             'Host': 'test_host',
             'Content-Type': 'test_type',
         },
         'status': 200,
         'cookies': {
             'sess_uuid': 'prev_test_uuid',
         },
     }
     self.loop = asyncio.new_event_loop()
     self.response_content = '<html><body></body></html>'
     self.response_headers = multidict.CIMultiDict([("Content-Type", "text/html")])
     self.response_status = 200
     event_result = dict(response=dict(message=dict(detection={'type': 1}, sess_uuid="test_uuid")))
     RequestHandler = Mock()
     protocol = RequestHandler()
     message = RawRequestMessage(
         method='POST', path='/', version=HttpVersion(major=1, minor=1), headers=self.request_data['headers'],
         raw_headers=None, should_close=None, compression=None, upgrade=None, chunked=None,
         url=URL('http://test_url/')
     )
     self.request = web.Request(
         message=message, payload=None, protocol=protocol, payload_writer=None,
         task='POST', loop=self.loop
     )
     self.handler.tanner_handler.create_data = Mock(return_value=self.request_data)
     self.handler.tanner_handler.submit_data = AsyncMock(return_value=event_result)
     self.handler.submit_slurp = AsyncMock()
     web.Response.add_header = Mock()
     web.Response.write = Mock()
     web.Response.send_headers = Mock()
     web.Response.write_eof = AsyncMock()
     aiohttp.streams.EmptyStreamReader.read = AsyncMock(
         return_value=b'con1=test1&con2=test2')
     self.handler.tanner_handler.parse_tanner_response = AsyncMock(
         return_value=(self.response_content, self.response_headers, self.response_status))
Пример #5
0
 async def start_view(self, request):
     body = await request.json()
     txt = json.loads(body)
     self.n_view = txt['N_View']
     self.Log = txt['Log']
     self.n_operation = txt['N_Operation']
     self.n_commit = txt['N_Commit']
     self.primary = request.remote
     self.current_state = State.NORMAL
     return web.Request()
 def make_request(self, app, method, path):
     headers = CIMultiDict()
     message = aiohttp.RawRequestMessage(method, path,
                                         aiohttp.HttpVersion(1, 1), headers,
                                         False, False)
     self.payload = mock.Mock()
     self.transport = mock.Mock()
     self.writer = mock.Mock()
     req = web.Request(app, message, self.payload, self.transport,
                       self.writer, 15)
     return req
Пример #7
0
 def response(request):
     logging.info('Response handler...')
     #调用相应的handler处理request
     r =yield from handler(request)
     logging.info('r=%s'%str(r))
     #如果响应结果为web.StreamResponse类,则直接把它作为响应返回
     if isinstance(r,web.StreamResponse):
         return r
     #如果响应为字节流,则把字节流塞到response的body里,设置响应类型为流类型,返回
     if isinstance(r,bytes):
         resp=web.Response(body=r)
         resp.content_type='application/octet-stream'
         return resp
     #如果响应为字符串
     if isinstance(r,str):
         #先判断是不是需要先重定向,是的话直接用重定向的地址重定向
         if r.startswith('redirect:'):
             return web.HTTPFound(r[9:])
         #不是重定向的话,把字符串当做html代码来处理
         resp=web.Response(body=r.encode('utf-8'))
         resp.content_type='text/html;charset=utf-8'
         return resp
     #如果响应结果为字典
     if isinstance(r,dict):
         #先查看一下有没有'__template__'为key的值
         template=r.get('__template__')
         #如果没有,说明要返回json字符串,则把字典转换为json返回,对应的response类型设为json类型
         if template is None:
             resp=web.Response(body=json.dumps(r,ensure_ascii=False,default=lambda o:o.__dict__).encode('utf-8'))
             resp.content_type='application/json;charset=utf-8'
             return resp
         else:
             r['__user__']=request.__user__
             #如果有'__template__'为key的值,则说明要套用jinja2的模板,‘__template__’key对应的模板网页所在位置
             resp=web.Response(body=app['__templating__'].get_template(template).render(**r).encode('utf-8'))
             resp.content_type='text/html;charset=utf-8'
             #以html的形式返回
             return resp
     #如果响应结果为int
     if isinstance(r,int) and r>=100 and r<600:
         return web.Response(r)
     #如果响应结果为tuple且数量为2
     if isinstance(r,tuple) and len(r)==2:
         t,m=r
         #如果tuple的第一个元素是int类型且在100到600之间,这里应该是认定为t的http状态码,m为错误描述
         #或者是服务端自己定义的错误码+描述
         if isinstance(t,int) and t>=100 and t<600:
             return web.Request(status=t,text=str(m))
         #default:默认直接以字符串输出
         resp=web.Response(body=str(r).encode('utf-8'))
         resp.content_type='text/plain;charset=utf-8'
         return resp
Пример #8
0
def make_request(app, method, path):
    headers = CIMultiDict()
    if StrictVersion(aiohttp.__version__) < StrictVersion('0.20.0'):
        message = aiohttp.RawRequestMessage(method, path,
                                            aiohttp.HttpVersion(1, 1), headers,
                                            False, False)
    else:
        message = aiohttp.RawRequestMessage(method, path,
                                            aiohttp.HttpVersion(1, 1), headers,
                                            headers, False, False)
    payload = mock.Mock()
    transport = mock.Mock()
    writer = mock.Mock()
    req = web.Request(app, message, payload, transport, writer, 15)
    return req
Пример #9
0
 def response(request):
     logger.info('Response handler...')
     r = yield from handler(request)
     if isinstance(r, web.StreamResponse):
         return r
     if isinstance(r, bytes):
         res = web.Response(body = r)
         res.content_type = 'application/octet-stream'
         return res
     if isinstance(r, str):
         if r.startswith('redirect:'):
             return web.HTTPFound(r[9:])
         res = web.Response(body = r.encode('utf-8'))
         res.content_type = 'text/html; charset=utf-8'
         return res
     if isinstance(r, dict):
         template = r.get('__template__')
         if template is None:
             res = web.Response(body = json.dumps(r, ensure_ascii = False, default = lambda o: o.__dict__).encode('utf-8'))
             res.content_type = 'application/json;charset=utf-8'
             return res
         else:
             r['__user__'] = request.__user__
             r['web_meta'] = configs.web_meta
             r['categories'] = yield from get_categories()
             res = web.Response(body = app['__templating__'].get_template(template).render(**r).encode('utf-8'))
             res.content_type = 'text/html;charset=utf-8'
             return res
     if isinstance(r, int) and r >= 100 and r < 600:
         return web.Response(r)
     if isinstance(r, tuple) and len(r) == 2:
         t, m = r
         if isinstance(t, int) and t >= 100 and t < 600:
             return web.Response(t, str(m))
     #default:
     res = web.Request(body = str(r).encode('utf-8'))
     res.content_type = 'text/plain;charset=utf-8'
     return res
Пример #10
0
 def setUp(self):
     meta = {}
     run_args = argparse.ArgumentParser()
     run_args.add_argument("--tanner")
     run_args.add_argument("--page-dir")
     self.main_page_path = generate_unique_path()
     os.makedirs(self.main_page_path)
     self.page_dir = self.main_page_path.rsplit("/")[-1]
     args = run_args.parse_args(["--page-dir", self.page_dir])
     args_dict = vars(args)
     args_dict["full_page_path"] = self.main_page_path
     uuid = "9c10172f-7ce2-4fb4-b1c6-abc70141db56".encode("utf-8")
     args.tanner = "tanner.mushmush.org"
     args.no_dorks = True
     args.server_header = "test_server"
     args.slurp_enabled = True
     self.handler = HttpRequestHandler(meta, args, uuid)
     self.request_data = {
         "method": "GET",
         "path": "/",
         "headers": {
             "Host": "test_host",
             "Content-Type": "test_type",
         },
         "status": 200,
         "cookies": {
             "sess_uuid": "prev_test_uuid",
         },
     }
     self.loop = asyncio.new_event_loop()
     self.response_content = "<html><body></body></html>"
     self.response_headers = multidict.CIMultiDict([("Content-Type",
                                                     "text/html")])
     self.response_status = 200
     event_result = dict(response=dict(
         message=dict(detection={"type": 1}, sess_uuid="test_uuid")))
     RequestHandler = Mock()
     protocol = RequestHandler()
     message = RawRequestMessage(
         method="POST",
         path="/",
         version=HttpVersion(major=1, minor=1),
         headers=self.request_data["headers"],
         raw_headers=None,
         should_close=None,
         compression=None,
         upgrade=None,
         chunked=None,
         url=URL("http://test_url/"),
     )
     self.request = web.Request(
         message=message,
         payload=None,
         protocol=protocol,
         payload_writer=None,
         task="POST",
         loop=self.loop,
     )
     self.handler.tanner_handler.create_data = Mock(
         return_value=self.request_data)
     self.handler.tanner_handler.submit_data = AsyncMock(
         return_value=event_result)
     self.handler.submit_slurp = AsyncMock()
     web.Response.add_header = Mock()
     web.Response.write = Mock()
     web.Response.send_headers = Mock()
     web.Response.write_eof = AsyncMock()
     aiohttp.streams.EmptyStreamReader.read = AsyncMock(
         return_value=b"con1=test1&con2=test2")
     self.handler.tanner_handler.parse_tanner_response = AsyncMock(
         return_value=(
             self.response_content,
             self.response_headers,
             self.response_status,
         ))
Пример #11
0
async def index(request):
    await asyncio.sleep(0.5)
    return web.Request(body=b'<h1>Index</h1>')
Пример #12
0
async def hello(request):
    await asyncio.sleep(0.5)
    text = '<h1>hello, %s!</h1>'.format(request.match_info['name'])
    return web.Request(body=text.encode('utf-8'))
Пример #13
0
def index(request):
    return web.Request(body = b'<h1>Awesome</h1>')
Пример #14
0
async def hello(request):
	return web.Request(text='HEllo,world')
Пример #15
0
 async def get_xhrtime(request):
     return web.Request(text=str(xhr_record_time))
Пример #16
0
        raise APIValueError('email', 'Invalid email.')
    if not passwd:
        raise APIValueError('passwd', 'Invalid passwd.')
    users = yield from User.findAll('email=?', [email])
    if len(users) == 0:
        raise APIValueError('email', 'Email not exist.')
    user = user[0]
    # check passwd:
    sha1 = hashlib.sha1()
    sha1.update(user.id.encode('utf-8'))
    sha1.update(b':')
    sha1.update(passwd.encode('utf-8'))
    if user.passwd != sha1.hexdigest():
        raise APIValueError('passwd', 'Invalid password.')
    # authenticate ok, set cookie:
    r = web.Request()
    r.set_cookie(COOKIE_NAME, user2cookie(user, 86400), max_age=86400, httponly=True)
    user.passwd = '******'
    r.content_type = 'aplication/json'
    r.body = json.dumps(user, ensure_ascii=False).encode('utf-8')
    return r

@get('/signout')
def signout(requset):
    referer = requset.headers.get('Referer')
    r = web.HTTPFound(referer or '/')
    r.set_cookie(COOKIE_NAME, '-deleted-', max_age=0, httponly=True)
    logging.info('user signed out.')
    return r

@get('/manage')
Пример #17
0
def index(request):
    return web.Request(body=b'<h1>Awesome</h1>',
                       headers={'content-type': 'text/html'})