def Login(self, request, context): """Login user and return a JWT token if succeed""" log = get_logger() result = TokenReply() try: email = request.email.lower() password = request.password log = log.bind(email=email, method="login") token = User.login(email, password) if token: result = TokenReply(token=token) except NoResultFound as err: context.set_code(grpc.StatusCode.NOT_FOUND) context.set_details('Invalid username') except ValueError as err: context.set_code(grpc.StatusCode.PERMISSION_DENIED) context.set_details(str(err)) except Exception as err: context.set_code(grpc.StatusCode.INTERNAL) context.set_details(str(err)) finally: handle_resp('login', context, log) return result