import graphene import graphql_jwt from graphene import String, Boolean, List class TokenAuthMutation(graphene.Mutation): """Mutation to obtain JWT token.""" class Arguments: username = String(required=True) password = String(required=True) token = String() success = Boolean() errors = List(String) message = String() @staticmethod def mutate(root, info, username, password): try: result = graphql_jwt.ObtainJSONWebToken.mutate(root, info, username=username, password=password) return { 'token': result.token, 'success': True, 'errors': [], 'message': "Token obtained successfully" } except Exception as e: return { 'token': None, 'success': False, 'errors': [str(e)], 'message': "Failed to obtain token" } class VerifyTokenMutation(graphene.Mutation): """Mutation to verify JWT token.""" class Arguments: token = String(required=True) success = Boolean() errors = List(String) message = String() @staticmethod def mutate(root, info, token): try: graphql_jwt.Verify.mutate(root, info, token=token) return { 'success': True, 'errors': [], 'message': "Token verified successfully" } except Exception as e: return { 'success': False, 'errors': [str(e)], 'message': "Token verification failed" } class RefreshTokenMutation(graphene.Mutation): """Mutation to refresh JWT token.""" class Arguments: token = String(required=True) token = String() success = Boolean() errors = List(String) message = String() @staticmethod def mutate(root, info, token): try: result = graphql_jwt.Refresh.mutate(root, info, token=token) return { 'token': result.token, 'success': True, 'errors': [], 'message': "Token refreshed successfully" } except Exception as e: return { 'token': None, 'success': False, 'errors': [str(e)], 'message': "Token refresh failed" }