def post(self):
        # Provide a method to create access tokens. The create_jwt()
        # function is used to actually generate the token
        if not request.is_json:
            return jsonify({"msg": "Missing JSON in request"})

        params = request.get_json()
        email = params.get('email', None)
        password = params.get('password', None)

        if not email:
            return jsonify({"msg": "Missing email parameter"})
        if not password:
            return jsonify({"msg": "Missing password parameter"})

        # Verify the email/password.
        with grpc.insecure_channel(HOST + ':' + PORT) as channel:
            stub = accounts_pb2_grpc.AccountServiceStub(channel)
            try:
                user = stub.AuthenticateByEmail(
                    accounts_pb2.AuthenticateByEmailRequest(email=email,
                                                            password=password))
            except Exception as e:
                print(
                    "Invalid username or password? Or perphaps we couldn't connect?"
                )
                print(e)
                return False

        if not user:
            return jsonify({"msg": "Bad email or password"})

        # Identity can be any data that is json serializable
        ret = {'jwt': create_jwt(identity=user.id)}
        return jsonify(ret)
 def delete(self, id):
     with grpc.insecure_channel(HOST + ':' + PORT) as channel:
         stub = accounts_pb2_grpc.AccountServiceStub(channel)
         try:
             deleteAccountRequest = accounts_pb2.DeleteAccountRequest(id=id)
             account = stub.Delete(deleteAccountRequest)
         except Exception as e:
             print(e)
             raise
         return ''
 def get(self, id):
     """Get the details of a single account."""
     with grpc.insecure_channel(HOST + ':' + PORT) as channel:
         stub = accounts_pb2_grpc.AccountServiceStub(channel)
         try:
             account = stub.GetByID(
                 accounts_pb2.GetByIDAccountsRequest(id=id))
         except Exception as e:
             print(
                 "Invalid username or password? Or perphaps we couldn't connect?"
             )
             print(e)
             return False
         return jsonify(json.loads(MessageToJson(account)))
 def get(self):
     with grpc.insecure_channel(HOST + ':' + PORT) as channel:
         stub = accounts_pb2_grpc.AccountServiceStub(channel)
         try:
             accounts = stub.List(
                 accounts_pb2.ListAccountsRequest(page_size=1,
                                                  page_token="1"))
         except Exception as e:
             print(
                 "Invalid username or password? Or perphaps we couldn't connect?"
             )
             print(e)
             return False
         return jsonify(json.loads(MessageToJson(accounts)))
    def put(self, id):
        """Update a specific account."""
        params = request.get_json(force=True)
        email = params.get('email', None)
        name = params.get('name', None)
        password = params.get('password', None)

        with grpc.insecure_channel(HOST + ':' + PORT) as channel:
            stub = accounts_pb2_grpc.AccountServiceStub(channel)
            try:
                account = accounts_pb2.Account(name=name, email=email)

                updateAccountRequest = accounts_pb2.UpdateAccountRequest(
                    id=id, account=account, password=password)
                account = stub.Update(updateAccountRequest)
            except Exception as e:
                print(e)
                raise
            return jsonify(json.loads(MessageToJson(account)))
    def post(self):
        """Signup API endpoint"""
        params = request.get_json()
        email = params.get('email', None)
        name = params.get('name', None)
        password = params.get('password', None)

        with grpc.insecure_channel(HOST + ':' + PORT) as channel:
            stub = accounts_pb2_grpc.AccountServiceStub(channel)
            try:
                account = accounts_pb2.Account(name="Leslie Knope",
                                               email='*****@*****.**')

                createAccountRequest = accounts_pb2.CreateAccountRequest(
                    account=account, password='******')
                account = stub.Create(createAccountRequest)
            except Exception as e:
                print(e)
                raise
            return jsonify(json.loads(MessageToJson(account)))
def run():
    # NOTE(gRPC Python Team): .close() is possible on a channel and should be
    # used in circumstances in which the with statement does not fit the needs
    # of the code.
    with grpc.insecure_channel('0.0.0.0:22222') as channel:
        stub = accounts_pb2_grpc.AccountServiceStub(channel)

        # Test authentication.
        try:
            response = stub.AuthenticateByEmail(accounts_pb2.AuthenticateByEmailRequest(email='*****@*****.**', password='******'))
            print("Account ID received: " + response.id)
        except grpc.RpcError as e:
            status_code = e.code()
            if status_code.name == "UNAUTHENTICATED":
                print("Sorry you are UNAUTHENTICATED")
            elif status_code.name == "UNAVAILABLE":
                print("Server is unavailable.")
            else:
                print(e)

        print('-'*20)
        print("LIST:")

        # Test the list endpoint.
        response = stub.List(accounts_pb2.ListAccountsRequest(page_size=1, page_token="1"))
        for account in response.accounts:
            print(account)

        print('-'*20)
        print("CREATE:")

        account = accounts_pb2.Account(
            name="Leslie Knope",
            email='*****@*****.**'
        )

        createAccountRequest = accounts_pb2.CreateAccountRequest(
            account=account,
            password='******'
        )

        # Test the list endpoint.
        response = stub.Create(createAccountRequest)
        print(response)

        print('-'*20)
        print("LIST:")

        # Test the list endpoint.
        response = stub.List(accounts_pb2.ListAccountsRequest(page_size=1, page_token="1"))
        id_to_update = None
        for account in response.accounts:
            print(account)
            id_to_update = account.id

        print('-'*20)
        print("Update:")

        account = accounts_pb2.Account(
            name="Andy Dwyr",
            email='*****@*****.**'
        )

        updateAccountRequest = accounts_pb2.UpdateAccountRequest(
            id=id_to_update,
            account=account,
            password='******',
        )

        # Test the list endpoint.
        response = stub.Update(updateAccountRequest)
        print(response)

        print('-'*20)
        print("LIST:")

        # Test the list endpoint.
        response = stub.List(accounts_pb2.ListAccountsRequest(page_size=1, page_token="1"))
        id_to_update = None
        for account in response.accounts:
            print(account)
            id_to_update = account.id

        print('-'*20)
        print("Delete:")

        deleteAccountRequest = accounts_pb2.DeleteAccountRequest(
            id=id_to_update,
        )

        # Test the list endpoint.
        response = stub.Delete(deleteAccountRequest)
        print(response)
        print('-'*20)
        print("LIST:")

        # Test the list endpoint.
        response = stub.List(accounts_pb2.ListAccountsRequest(page_size=1, page_token="1"))
        id_to_update = None
        for account in response.accounts:
            print(account)
            id_to_update = account.id

        print('-'*20)