Esempio n. 1
0
 async def post(self) -> json_response:
     try:
         form = await self.request.json()
         if form['title'] is None or 60 < len(form['title']) < 4:
             return failure_response(400, 'Invalid title')
         if form['text'] is None or len(form['text']) > 500:
             return failure_response(400, 'Invalid text')
         user = get_user_from_token(self.request.headers['Authorization'])
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(select_from_users_where_email(user['email']))
                 u = await c.fetchone()
                 if u is None:
                     return failure_response(401, 'No such user')
                 await c.execute(select_from_news_where_title(form['title']))
                 n = await c.fetchone()
                 if n is None:
                     return failure_response(400, f"No such post with title {form['title']}")
                 com = CommentModel(text=form['text'],
                                    title=form['title'],
                                    author=user['name'],
                                    email=user['email'])
                 await c.execute(insert_new_comment(com))
                 return success_response(201, f'New comment at {com.created}', data=com.to_json())
     except Exception as e:
         return server_error_response(e)
Esempio n. 2
0
 async def delete(self) -> json_response:
     try:
         usr = get_user_from_token(self.request.headers['Authorization'])
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(select_from_users_where_email(usr['email']))
                 u = await c.fetchone()
                 if u is not None:
                     await c.execute(delete_user_by_email(usr['email']))
                     return success_response(200, f"Deleted user with email {usr['email']}")
                 return failure_response(400, 'Bad email')
     except Exception as e:
         return server_error_response(e)
Esempio n. 3
0
 async def get(self) -> json_response:
     try:
         email = self.request.rel_url.query['email']
         if email is not None:
             if 20 < len(email) < 8:
                 return failure_response(400, 'Invalid email length')
             pool = self.request.app['pool']
             async with pool.acquire() as conn:
                 async with conn.cursor() as c:
                     await c.execute(select_from_users_where_email(email))
                     u = await c.fetchone()
                     if u is not None:
                         return success_response(200, 'OK', data=user_tuple_to_json(u))
                     return failure_response(400, f"No such email : '{email}'")
         return failure_response(400, 'No email param')
     except Exception as e:
         return server_error_response(e)
Esempio n. 4
0
 async def post(self) -> json_response:
     try:
         form = await self.request.json()
         if form['email'] is None or 8 > len(form['email']) > 20:
             return failure_response(400, 'Invalid email length')
         if form['password'] is None or 8 > len(form['password']) > 20:
             return failure_response(400, 'Invalid password length')
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(
                     select_from_users_where_email(form['email']))
                 user = await c.fetchone()
                 if user is not None and compare(user[3], form['password']):
                     token = generate_token(
                         dict(user=user_tuple_to_json(user),
                              password=form['password']))
                     return success_response(200, 'OK', token=token)
                 return failure_response(400, 'Invalid email or password')
     except Exception as e:
         return server_error_response(e)
Esempio n. 5
0
 async def post(self) -> json_response:
     try:
         form = await self.request.json()
         if form['name'] is None or 8 > len(form['name']) > 20:
             return failure_response(400, 'Invalid name length')
         if form['email'] is None or 8 > len(form['email']) > 20:
             return failure_response(400, 'Invalid email length')
         if form['password'] is None or 8 > len(form['password']) > 20:
             return failure_response(400, 'Invalid password length')
         if form['country'] is None or 3 > len(form['country']) > 15:
             return failure_response(400, 'Invalid country length')
         if form['age'] is None or 6 > int(form['age']) > 65:
             return failure_response(400, 'Invalid age ')
         if not isinstance(form['gender'], bool):
             return failure_response(400, 'Invalid gender')
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(
                     select_from_users_where_email(form['email']))
                 usr = await c.fetchone()
                 if usr is None:
                     password_hash = crypt_password(form['password'])
                     user = User(name=form['name'],
                                 email=form['email'],
                                 password=password_hash,
                                 country=form['country'],
                                 age=int(form['age']),
                                 gender=form['gender'],
                                 active=True,
                                 role='User')
                     await c.execute(insert_new_user(user))
                     print(f'Created new user : {user.email}')
                     return success_response(
                         201, f'Created user : {user.email}')
                 return failure_response(
                     400, f"User with email {form['email']} already exists")
     except Exception as e:
         return server_error_response(e)
Esempio n. 6
0
 async def post(self) -> json_response:
     try:
         form = await self.request.json()
         if form['title'] is None or 4 > len(form['title']) > 60:
             return failure_response(400, 'Invalid title length')
         if form['text'] is None or len(form['text']) < 15:
             return failure_response(400, 'Invalid text length')
         if form['url'] is None or 5 > len(form['url']) < 60:
             return failure_response(400, 'Invalid url')
         user = get_user_from_token(self.request.headers['Authorization'])
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(
                     select_from_users_where_email(user['email']))
                 u = await c.fetchone()
                 if u is not None:
                     await c.execute(
                         select_from_news_where_title(form['title']))
                     n = await c.fetchone()
                     if n is None:
                         post = New_Model(title=form['title'],
                                          text=form['text'],
                                          image_url=form['url'],
                                          name=user['name'],
                                          email=user['email'])
                         await c.execute(insert_new_post(post))
                         print(
                             f"New {post.title} was created by {user['email']}"
                         )
                         return success_response(
                             201, f'New {post.title} was created!')
                     return failure_response(
                         400,
                         f"New with title {form['title']} already exist")
                 return failure_response(401, 'No such user')
     except Exception as e:
         return server_error_response(e)
Esempio n. 7
0
 async def put(self) -> json_response:
     try:
         form = await self.request.json()
         if len(form['obj'].items()) == 0:
             return failure_response(400, 'Nothing to edit')
         obj = form['obj']
         token = self.request.headers['Authorization']
         if 'password' in obj:
             if get_old_pass(token) == obj['password']:
                 if obj['newPassword'] is None or 20 < len(obj['newPassword']) < 8:
                     return failure_response(400, 'Invalid length of new password')
                 obj['password'] = crypt_password(obj['newPassword'])
             else:
                 return failure_response(401, 'Invalid password')
         usr = get_user_from_token(token)
         pool = self.request.app['pool']
         async with pool.acquire() as conn:
             async with conn.cursor() as c:
                 await c.execute(select_from_users_where_email(usr['email']))
                 u = await c.fetchone()
                 if u is not None:
                     new_user = user_tuple_to_json(u)
                     new_user.update(obj)
                     if 'password' not in obj:
                         new_user['password'] = u[3]
                     await c.execute(update_users_where_email(new_user, usr['email']))
                     updated = dict((i, new_user[i]) for i in new_user if i != 'password')
                     if 'password' in obj:
                         new_token = generate_token(dict(user=updated,
                                                         password=obj['newPassword']))
                     else:
                         new_token = generate_token(dict(user=updated,
                                                         password=get_old_pass(token)))
                     return success_response(200, 'OK', token=new_token)
                 return failure_response(400, f"No such user with email {usr['email']}")
     except Exception as e:
         return server_error_response(e)