123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from tastypie import fields
- from tastypie.resources import ModelResource
- from tastypie.authorization import Authorization
- from tastypie.exceptions import ImmediateHttpResponse
- from tastypie.utils import trailing_slash
- from django.conf.urls import url
- from django.contrib.auth.models import User
- from api.validations.user_validation import UserValidation
- from api.resources.group_resource import GroupResource
- from api.utils.jwt_authentication import JWTAuthentication
- import simplejson as json
- '''
- '''
- class UserResource(ModelResource):
- groups = fields.ToManyField(GroupResource, 'groups')
- class Meta:
- queryset = User.objects.all()
- always_return_data = True
- validation = UserValidation()
- authentication = JWTAuthentication()
- '''
- '''
- def prepend_urls(self):
- return [
- url(r'^(?P<resource_name>%s)/(?P<%s>.*?)/change_password%s$' % (self._meta.resource_name, self._meta.detail_uri_name, trailing_slash), self.wrap_view('change_password'), name='api_change_password')
- ]
- '''
- '''
- def change_password(self, request, **kwargs):
- self.method_check(request, ['post'])
- self.is_authenticated(request)
- # Check content type
- if request.content_type != 'application/json':
- return self.create_response(request, {
- 'error_message': 'request is not json'
- })
- # Check body
- if not request.body:
- return self.create_response(request, {
- 'error_message': 'request body is empty'
- })
-
- # Check if password is present in body
- if not 'password' in request.body:
- return self.create_response(request, {
- 'error_message': 'password is not provided'
- })
- body = json.loads(request.body)
- user = User.objects.get(pk=kwargs.get('pk'))
- user.set_password(body['password'])
- bundle = self.build_bundle(obj=user, request=request)
- bundle = self.full_dehydrate(bundle)
- return self.create_response(request, {
- self._meta.resource_name: bundle
- })
- '''
- '''
- def save(self, bundle, skip_errors=False):
- if bundle.via_uri:
- return bundle
- self.is_valid(bundle)
- # If bundle has errors send this reponse
- if bundle.errors and not skip_errors:
- raise ImmediateHttpResponse(response=self.error_response(bundle.request, bundle.errors))
- # If object data is not persist create django auth user
- if bundle.obj._state.adding:
- user = User.objects.create_user(bundle.data['username'], bundle.data['email'], bundle.data['password'])
- user.first_name = bundle.data.get('first_name', '')
- user.last_name = bundle.data.get('last_name', '')
- bundle.obj = user
-
- bundle.data['groups'] = bundle.data.get('groups', [])
- if bundle.obj.pk:
- self.authorized_update_detail(self.get_object_list(bundle.request), bundle)
- else:
- self.authorized_create_detail(self.get_object_list(bundle.request), bundle)
- self.save_related(bundle)
- obj_id = self.create_identifier(bundle.obj)
- if obj_id not in bundle.objects_saved or bundle.obj._state.adding:
- bundle.obj.save()
- bundle.objects_saved.add(obj_id)
- m2m_bundle = self.hydrate_m2m(bundle)
- self.save_m2m(m2m_bundle)
-
- return bundle
|