def home(request: Request): loggedUserId: int = request.json['user_id'] user: User = User.query().select().where('id', loggedUserId).getOne() notifications: List[Notification] = Notification.query().select( ).where('is_read', 0).get() posts = Post.query().select().where('user_id', user.id).get() view = View( 'home', { 'user': user, 'notification_count': len(notifications), 'my_post_count': len(posts) }, request.json) return Response(ResponseType.valid, view)
def login(request: Request): username = request.json['inputs']['name'] password: str = request.json['inputs']['password'] passHash = hashlib.sha256(password.encode()) passHash = passHash.hexdigest() users: List[User] = User.query().select().where( 'name', username).where('passwordHash', passHash).get() if not users: view = View('', {'error': 'Invalid credentials. Please try again...'}, request.json) return Response(ResponseType.error, view) user = users[0] token = user.hash() User_auth.query().insert( [user.id, token, datetime.today(), datetime.today()]) notifications: List[Notification] = Notification.query().select( ).where('is_read', 0).get() posts = Post.query().select().where('user_id', user.id).get() view = View( 'home', { 'user': user, 'notification_count': len(notifications), 'my_post_count': len(posts) }, { 'user_id': user.id, 'authToken': token }) return Response(ResponseType.valid, view)
def edit_password(request: Request): loggedUserId: int = request.json['user_id'] old_password = request.json['inputs']['old_password'] password = request.json['inputs']['password'] re_password = request.json['inputs']['re_password'] user: User = User.query().select().where('id', loggedUserId).getOne() if password != re_password: view = View('user.edit', {'error': 'passwords do not match'}, request.json) return Response(ResponseType.valid, view) passHash = hashlib.sha256(old_password.encode()) passHash = passHash.hexdigest() if user.passwordHash != passHash: view = View('user.edit', {'error': 'old password is wrong'}, request.json) return Response(ResponseType.valid, view) passHash = hashlib.sha256(password.encode()) passHash = passHash.hexdigest() user.passwordHash = passHash user.save() notifications: List[Notification] = Notification.query().select( ).where('is_read', 0).get() posts = Post.query().select().where('user_id', user.id).get() view = View( 'home', { 'user': user, 'notification_count': len(notifications), 'my_post_count': len(posts) }, request.json) return Response(ResponseType.valid, view)
def register(request: Request): username = request.json['inputs']['name'] email = request.json['inputs']['email'] password: str = request.json['inputs']['password'] re_password = request.json['inputs']['re_password'] role = 1 if request.json['inputs']['role'] == '1' else 2 if len(password) < 8: view = View( '', objects={'error': 'Password too short. Please try again...'}) return Response(ResponseType.error, view) if password != re_password: view = View('', objects={ 'error': 'Passwords do not match. Please try again...' }) return Response(ResponseType.error, view) if '@' not in email or '.' not in email: view = View('', objects={ 'error': 'Email format is wrong. Please try again...' }) return Response(ResponseType.error, view) user = User.query().select().where('name', username).getOne() if user is not None: view = View('', objects={ 'error': 'Username already taken. Please try again...' }) return Response(ResponseType.error, view) passHash = hashlib.sha256(password.encode()) passHash = passHash.hexdigest() User.query().insert([ username, email, '', passHash, role, datetime.today(), datetime.today() ]) user: User = User.query().select().where('name', username).getOne() token = user.hash() User_auth.query().insert( [user.id, token, datetime.today(), datetime.today()]) NotificationController.notifyUser( user, 'Welcome to freelancerHub, Feel free to look around the site.') notifications: List[Notification] = Notification.query().select( ).where('is_read', 0).get() posts = Post.query().select().where('user_id', user.id).get() view = View( 'home', { 'user': user, 'notification_count': len(notifications), 'my_post_count': len(posts) }, { 'user_id': user.id, 'authToken': token }) return Response(ResponseType.valid, view)