def reset_password(self, request, pk): data = request.data password = data.get('password', None) confirm_password = data.get('confirm_password', None) if password != confirm_password: return Response( Metadata(status='fail', message='password not equal with confirm password'). serialized_data()) email = self.queryset.get(code=pk) if email is None: return Response( Metadata(status='NotFound', message='code is not correct').serialized_data()) account = Account.objects.get(email=email.email) if account is None: return Response( Metadata( status='NotFound', message='email has not been registered').serialized_data()) account.set_password(password) account.save() email.delete() token = JWTExtension.generate_token(account) return Response( Metadata(data={ 'token': token, 'is_admin': account.is_admin }).serialized_data())
def post(self, request, format=None): data = request.data username = data.get('username', None) password = data.get('password', None) account = authenticate(username=username, password=password) if account is not None: if account.email_verified: login(request, account) token = JWTExtension.generate_token(account) return Response( MetadataSerializer( Metadata( data={ 'token': token, 'is_admin': account.is_admin, 'username': username, })).data) else: return Response( Metadata(status='forbidden', message='Please active your account by email'). serialized_data()) else: return Response( Metadata(status='unauthorized', message='Username/password combination invalid.'). serialized_data())
def create(self, request): serializer = self.serializer_class(data=request.data) if serializer.is_valid(): account = Account.objects.create_user(**serializer.validated_data) email_util.send(account.email) return Response( Metadata(data=serializer.validated_data).serialized_data(), status=status.HTTP_201_CREATED) return Response({ Metadata(status='BadRequest', message='Account could not be created with received data.' ).serialized_data() })
def update(self, request, pk): data = request.data try: player = self.queryset.get(id=pk) player.gold = data['gold'] player.level = data['level'] player.save() result = self.serializer_class(player).data except Player.DoesNotExist: return Response( Metadata(status="NotFound", message="No such player").serialized_data()) return Response(Metadata(data=result).serialized_data())
def use(self, request, pk): try: record = EquipRecord.objects.get(player__account=request.user, equipment=pk) if record.number is 0: return Response( Metadata(status="forbidden", message="Your don't have this equipment")) record.number -= 1 record.save() except EquipRecord.DoesNotExist: return Response( Metadata(status="forbidden", message="Your don't have this equipment")) data = EquipRecordSerializer(record).data return Response(Metadata(data=data).serialized_data())
def purchase(self, request, pk): equip = self.queryset.get(id=pk) player = Player.objects.get(account=request.user) if player.gold < equip.price: return Response( Metadata(status="forbidden", message="No enough gold").serialized_data()) try: record = EquipRecord.objects.get(player=player, equipment=equip) record.number += 1 record.save() except EquipRecord.DoesNotExist: record = EquipRecord(equipment=equip, player=player, number=1) record.save() data = EquipRecordSerializer(record).data return Response(Metadata(data=data).serialized_data())
def create(self, request, format=None): data = request.data username = data.get('username', None) email = data.get('email', None) send_type = data.get('send_type', None) if send_type not in email_util.send_types_handler: return Response({'message': 'no such send type'}, status=status.HTTP_400_BAD_REQUEST) account = Account.objects.get(username=username) if account is None: return Response( Metadata('NotFound', message='Username/email combination invalid'). serialized_data()) if account.email != email: return Response( Metadata('NotFound', message='Username/email combination invalid'). serialized_data()) email_util.send(email, send_type) return Response(Metadata().serialized_data())
def retrieve(self, request, pk): record = self.queryset.get(code=pk) if record is None: return Response({ 'success': False, 'message': 'code not exist', }) account = Account.objects.get(email=record.email) if account is None: return Response( Metadata(status='NotFound', message='email not exist').serialized_data()) handler = { 'register': lambda _record, _account: self.handle_register(record=_record, account=_account), 'forget': lambda _record, _account: self.handle_forget() } return Response(Metadata().serialized_data())
def current(self, request): data = self.serializer_class(request.user).data return Response(Metadata(data=data).serialized_data())
def post(self, request, format=None): logout(request) return Response(Metadata().serialized_data(), status=status.HTTP_204_NO_CONTENT)
def current(self, request): player = self.queryset.get(account=request.user) data = self.serializer_class(player).data return Response(Metadata(data=data).serialized_data())