Advertisement
Guest User

Untitled

a guest
Mar 15th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.44 KB | None | 0 0
  1. from django.shortcuts import render
  2. from django.http import JsonResponse
  3.  
  4. from profiles.models import User
  5.  
  6. import string
  7. import random
  8. import hashlib
  9. import datetime
  10.  
  11.  
  12. MIN_USERNAME_LEN = 5
  13. MAX_USERNAME_LEN = 30
  14. MIN_PASSWORD_LEN = 6
  15. MAX_PASSWORD_LEN = 30
  16. TOKEN_LEN = 20
  17. SATL_LEN = 20
  18.  
  19. SECRET_SALT = "20randomnyhsimwolow)"
  20. ALPHABET = ''.join([string.ascii_letters, string.digits])
  21.  
  22.  
  23. def generate_str(len):
  24.     res = []
  25.     for i in range(len):
  26.         res.append(random.choice(ALPHABET))
  27.     return ''.join(res)
  28.  
  29.  
  30. def check_auth(username, token):
  31.     count = User.objects.filter(
  32.             username__iexact = username,
  33.             token = token,
  34.             token_time__gte = datetime.datetime.now() - datetime.timedelta(days = 1)
  35.     ).count()
  36.  
  37.     return (count == 1) and (len(token) == TOKEN_LEN)
  38.  
  39.  
  40. def user_exists(username):
  41.     count_username = User.objects.filter(username__iexact = username).count()
  42.     if count_username == 0:
  43.         return False
  44.     elif count_username == 1:
  45.         return True
  46.  
  47.     # ошибка: существуют пользователи с одинаковым username
  48.     return False
  49.  
  50.  
  51. def register(request):
  52.     if ('username' not in request.GET) or ('password' not in request.GET) or ('email' not in request.GET):
  53.         return JsonResponse({'result':'error', 'error':'input error'})
  54.  
  55.     username = request.GET['username']
  56.     password = request.GET['password']
  57.     email = request.GET['email']    
  58.  
  59.     if len(username) < MIN_USERNAME_LEN or len(username) > MAX_USERNAME_LEN:
  60.         return JsonResponse({'result':'error', 'error':'invalid username length'})
  61.  
  62.     if len(password) < MIN_PASSWORD_LEN or len(password) > MAX_PASSWORD_LEN:
  63.         return JsonResponse({'result':'error', 'error':'invalid password length'})
  64.  
  65.     count_email = User.objects.filter(email__iexact = email).count()
  66.     if count_email > 0:
  67.         return JsonResponse({'result':'error', 'error':'email is already used'})
  68.  
  69.     if user_exists(username):
  70.         return JsonResponse({'result':'error', 'error':'username is already used'})
  71.  
  72.     private_salt = generate_str(SATL_LEN)
  73.     password_hash = hashlib.sha512((password + private_salt + SECRET_SALT).encode()).hexdigest()
  74.  
  75.     new_user = User(username = username, password_hash = password_hash,
  76.                     token = '', email = email, private_salt = private_salt)
  77.     new_user.save()
  78.  
  79.     return JsonResponse({'result':'success'})
  80.  
  81. ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement