--- a/server/ammicosrv/ammico/admin.py Wed Jun 10 15:15:41 2015 +0200
+++ b/server/ammicosrv/ammico/admin.py Wed Jun 10 15:19:07 2015 +0200
@@ -16,7 +16,7 @@
class Meta:
model = get_user_model()
- fields = ('email', 'idUser')
+ fields = ('email', 'id_user')
def clean_password2(self):
# Check that the two password entries match
@@ -44,7 +44,7 @@
class Meta:
model = get_user_model()
- fields = ('email', 'password', 'idUser', 'is_active', 'is_admin')
+ fields = ('email', 'password', 'id_user', 'is_active', 'is_admin')
def clean_password(self):
# Regardless of what the user provides, return the initial value.
@@ -61,11 +61,11 @@
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
- list_display = ('email', 'idUser', 'is_admin')
+ list_display = ('email', 'id_user', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, {'fields': ('email', 'password')}),
- ('external id', {'fields': ('idUser',)}),
+ ('external id', {'fields': ('id_user',)}),
('Permissions', {'fields': ('is_admin',)}),
)
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
@@ -73,7 +73,7 @@
add_fieldsets = (
(None, {
'classes': ('wide',),
- 'fields': ('email', 'idUser', 'password1', 'password2')}
+ 'fields': ('email', 'id_user', 'password1', 'password2')}
),
)
search_fields = ('email',)
--- a/server/ammicosrv/ammico/views.py Wed Jun 10 15:15:41 2015 +0200
+++ b/server/ammicosrv/ammico/views.py Wed Jun 10 15:19:07 2015 +0200
@@ -32,7 +32,7 @@
#r = requests.get('http://fui-ammico.jamespot.pro/api/api.php?&k=6c8bfcea247e8a5841288269887d88f0&d=2016-01-31&m=EXT-IRI&v=2.0&f=get&o=article&idArticle=169')
#simulate the request
- params = {'o': 'article', 'f': 'list', 'idUser': user.idUser}
+ params = {'o': 'article', 'f': 'list', 'idUser': user.id_user}
r = requests.get(settings.URL_JAMESPOT, params=params)
visits = json.loads(r.content.decode('utf-8'))
@@ -73,10 +73,10 @@
)
@api_view(('GET',))
-def api_root(request, format=None):
+def api_root(request):
return Response({
- 'books': reverse('books', request=request, format=format),
- 'slides': reverse('slides', request=request, format=format)
+ 'books': reverse('books', request=request),
+ 'slides': reverse('slides', request=request)
})
class AmmicoView(View):
@@ -88,7 +88,7 @@
print(payload)
if (('email' and 'idUser') in payload):
print('here !');
- user, _ = User.objects.get_or_create(email = payload['email'], idUser = payload['idUser'])
+ user, _ = User.objects.get_or_create(email = payload['email'], id_user = payload['idUser'])
populateVisit(user, idExpo)
token, _ = Token.objects.get_or_create(user=user)
key = str(token.key)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/ammicosrv/authentication/migrations/0001_initial.py Wed Jun 10 15:19:07 2015 +0200
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='AmmicoUser',
+ fields=[
+ ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)),
+ ('password', models.CharField(max_length=128, verbose_name='password')),
+ ('last_login', models.DateTimeField(blank=True, verbose_name='last login', null=True)),
+ ('email', models.EmailField(max_length=255, verbose_name='email address', unique=True)),
+ ('id_user', models.IntegerField(blank=True, verbose_name='identifiant utilisateur', null=True)),
+ ('is_active', models.BooleanField(default=True)),
+ ('is_admin', models.BooleanField(default=False)),
+ ],
+ options={
+ 'abstract': False,
+ },
+ ),
+ migrations.CreateModel(
+ name='Profile',
+ fields=[
+ ('id', models.AutoField(primary_key=True, auto_created=True, verbose_name='ID', serialize=False)),
+ ('image', models.URLField(max_length=2048, blank=True)),
+ ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ ]
--- a/server/ammicosrv/authentication/models.py Wed Jun 10 15:15:41 2015 +0200
+++ b/server/ammicosrv/authentication/models.py Wed Jun 10 15:19:07 2015 +0200
@@ -9,7 +9,7 @@
class AmmicoUserManager(BaseUserManager):
- def create_user(self, email, idUser=None, password=None):
+ def create_user(self, email, id_user=None, password=None):
"""
Creates and saves a User with the given email and password.
"""
@@ -18,20 +18,20 @@
user = self.model(
email=self.normalize_email(email),
- idUser=idUser,
+ id_user=id_user,
)
user.set_password(password)
user.save(using=self._db)
return user
- def create_superuser(self, email, password, idUser=None):
+ def create_superuser(self, email, password, id_user=None):
"""
Creates and saves a superuser with the given email and password.
"""
user = self.create_user(email,
password=password,
- idUser=idUser
+ id_user=id_user
)
user.is_admin = True
user.save(using=self._db)
@@ -40,7 +40,7 @@
class AmmicoUser(AbstractBaseUser):
email = models.EmailField(verbose_name='email address', max_length=255, unique=True)
- idUser = models.IntegerField(_('identifiant utilisateur'), blank=True, null=True)
+ id_user = models.IntegerField(_('identifiant utilisateur'), blank=True, null=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/server/ammicosrv/authentication/serializers.py Wed Jun 10 15:19:07 2015 +0200
@@ -0,0 +1,35 @@
+from django.contrib.auth import authenticate, get_user_model
+from django.utils.translation import ugettext_lazy as _
+from rest_framework import exceptions, serializers
+
+
+class AuthTokenSerializer(serializers.Serializer):
+ email = serializers.CharField()
+ password = serializers.CharField(style={'input_type': 'password'})
+
+ def validate(self, attrs):
+ email = attrs.get('email')
+ password = attrs.get('password')
+
+ if email and password:
+ user = authenticate(email=email, password=password)
+
+ if user:
+ if not user.is_active:
+ msg = _('User account is disabled.')
+ raise exceptions.ValidationError(msg)
+ else:
+ msg = _('Unable to log in with provided credentials.')
+ raise exceptions.ValidationError(msg)
+ else:
+ msg = _('Must include "email" and "password".')
+ raise exceptions.ValidationError(msg)
+
+ attrs['user'] = user
+ return attrs
+
+class UserSerializer(serializers.ModelSerializer):
+
+ class Meta:
+ model = get_user_model()
+ fields = ('id', 'email', 'last_login', 'id_user')
\ No newline at end of file
--- a/server/ammicosrv/authentication/views.py Wed Jun 10 15:15:41 2015 +0200
+++ b/server/ammicosrv/authentication/views.py Wed Jun 10 15:19:07 2015 +0200
@@ -1,6 +1,7 @@
import json
+from django.conf import settings
from django.contrib.auth import get_user_model
import requests
from rest_framework import serializers, status, permissions, parsers, renderers
@@ -9,14 +10,11 @@
from rest_framework.views import APIView
from ammicosrv.ammico.views import populateVisit
-from django.conf import settings
+from ammicosrv.authentication.serializers import AuthTokenSerializer, \
+ UserSerializer
#from ammico.views import populateVisit
-class UserSerializer(serializers.ModelSerializer):
- class Meta:
- model = get_user_model()
-
class User(APIView):
"""
get list user or add user
@@ -39,7 +37,7 @@
r = requests.get(settings.URL_JAMESPOT, params=params)
infoUser = json.loads(r.content.decode('utf-8'))
if ('idUser' in infoUser['VAL']):
- user_data.update({"idUser":infoUser['VAL']['idUser']})
+ user_data.update({"id_user":infoUser['VAL']['idUser']})
user = get_user_model().objects.create_user(
**user_data
)
@@ -54,8 +52,11 @@
renderer_classes = (renderers.JSONRenderer,)
def post(self, request):
- user = get_user_model().objects.get(email = request.data['email'], password = request.data['password'])
- if (user.idUser and 'idExpo' in request.GET):
- populateVisit(user, request.GET['idExpo']);
- token, _ = Token.objects.get_or_create(user=user)
- return Response({'token': token.key})
\ No newline at end of file
+ serializer = AuthTokenSerializer(data=request.data)
+ if serializer.is_valid():
+ user = serializer.validated_data['user']
+ if (user.id_user and 'idExpo' in request.GET):
+ populateVisit(user, request.GET['idExpo'])
+ token, _ = Token.objects.get_or_create(user=user)
+ return Response({'token': token.key})
+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
\ No newline at end of file