Skip to content

Commit

Permalink
Merge pull request #385 from KSG-IT/feature/add-single-user-endpoint
Browse files Browse the repository at this point in the history
feat(users): add invite new user mutation
  • Loading branch information
alexaor authored Sep 7, 2024
2 parents 6631951 + af49c73 commit 2186f86
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 8 deletions.
31 changes: 31 additions & 0 deletions users/emails.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from django.conf import settings


def welcome_single_user_email(user_email, jwt_token):
from common.util import send_email

content = f"""
Hei!
Velkommen til KSG! Første gang du logger inn må du sette et passord.
For å sette passordet ditt, trykk på lenken under:
{settings.APP_URL}/reset-password?token={jwt_token}
"""

html_content = f"""
Hei!
<br>
<br>
Velkommen til KSG! Første gang du logger inn må du sette et passord.
<br>
<br>
<span>{settings.APP_URL}/reset-password?token={jwt_token}</span>
"""
subject = "Velkommen til KSG!"
send_email(
subject=subject,
message=content,
html_message=html_content,
recipients=[user_email],
)
49 changes: 41 additions & 8 deletions users/schema.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import bleach
import jwt
import graphene
from django.contrib.auth.models import Permission
from django.core.exceptions import PermissionDenied
from django.db import transaction
from django.db.models import Value, Q
from django.db.models import Value
from django.conf import settings
from django.utils import timezone
from graphene import Node
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from graphene_django_cud.mutations import (
DjangoPatchMutation,
DjangoDeleteMutation,
DjangoCreateMutation,
)

from admissions.models import Admission
Expand All @@ -23,6 +23,7 @@
from django.db.models.functions import Concat
from economy.utils import parse_transaction_history
from economy.schema import BankAccountActivity
from economy.models import SociBankAccount
from users.filters import UserFilter
from graphql_relay import to_global_id
from schedules.schemas.schedules import ShiftSlotNode
Expand All @@ -31,6 +32,7 @@
from organization.graphql import InternalGroupPositionTypeEnum
from users.utils import ical_token_generator
from django.utils.html import strip_tags
from .emails import welcome_single_user_email


class UserTypeLogEntryNode(DjangoObjectType):
Expand Down Expand Up @@ -365,11 +367,6 @@ def resolve_all_allergies(self, info, *args, **kwargs):
return Allergy.objects.all().order_by("name")


class CreateUserMutation(DjangoCreateMutation):
class Meta:
model = User


class DeleteUserMutation(DjangoDeleteMutation):
class Meta:
model = User
Expand Down Expand Up @@ -603,8 +600,44 @@ def mutate(root, info, about_me):
return UpdateAboutMeMutation(user=user)


class InviteNewUserMutation(graphene.Mutation):
class Arguments:
email = graphene.String() # Can this be an email field?
first_name = graphene.String()
last_name = graphene.String()
send_welcome_email = graphene.Boolean()

user = graphene.Field(UserNode)

@gql_has_permissions("users.create_user")
def mutate(
root, info, email, first_name, last_name, send_welcome_email, *args, **kwargs
):
user = User.objects.create(
email=email, username=email, first_name=first_name, last_name=last_name
)

SociBankAccount.objects.create(card_uuid=None, user=user)

if send_welcome_email:
jwt_reset_token = jwt.encode(
{
"action": "reset_password",
"user_id": user.id,
"iss": "KSG-nett",
"iat": timezone.now(),
"exp": timezone.now() + timezone.timedelta(hours=24),
},
settings.AUTH_JWT_SECRET,
algorithm=settings.AUTH_JWT_METHOD,
)
welcome_single_user_email(email, jwt_reset_token)

return InviteNewUserMutation(user=user)


class UserMutations(graphene.ObjectType):
create_user = CreateUserMutation.Field()
invite_new_user = InviteNewUserMutation.Field()
patch_user = PatchUserMutation.Field()
delete_user = DeleteUserMutation.Field()
update_my_info = UpdateMyInfoMutation.Field()
Expand Down

0 comments on commit 2186f86

Please sign in to comment.