Advertisement
Guest User

Untitled

a guest
Sep 16th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.91 KB | None | 0 0
  1. # -*- coding: utf-8 -*-                                                                                                                                                                                  
  2. from django.conf import settings                                                                                                                                                                          
  3.                                                                                                                                                                                                          
  4. from django.core.cache import cache                                                                                                                                                                      
  5. from django.core.urlresolvers import reverse                                                                                                                                                              
  6.                                                                                                                                                                                                          
  7. from django.http import HttpResponse,HttpResponseRedirect                                                                                                                                                
  8.                                                                                                                                                                                                          
  9. from django.shortcuts import render_to_response                                                                                                                                                          
  10.                                                                                                                                                                                                          
  11. from django.contrib.auth import authenticate                                                                                                                                                              
  12.                                                                                                                                                                                                          
  13. from LdapHRWebUI.hr.models import LdapObject                                                                                                                                                              
  14.                                                                                                                                                                                                          
  15. from pumpkin import exceptions                                                                                                                                                                            
  16.                                                                                                                                                                                                          
  17.                                                                                                                                                                                                          
  18.                                                                                                                                                                                                          
  19. class User():                                                                                                                                                                                            
  20.                                                                                                                                                                                                          
  21.     backend='ldap'                                                                                                                                                                                        
  22.     id=''                                                                                                                                                                                                
  23.     username=""                                                                                                                                                                                          
  24.     db=""
  25.     password=""
  26.     def __init__(self,username=None,password=None,dn=None):
  27.         if username is not None: self.username=username
  28.         if password is not None: self.password=password
  29.         if dn is not None: self.dn=dn
  30.        
  31.     def save(self):              
  32.         self.id=self.username
  33.         cache.set_many({self.id+'-username':self.username,self.id+'-password':self.password,self.id+'-dn':self.dn},settings.AUTH_TIMEOUT)                                
  34.        
  35.     def load(self,user_id):                
  36.         self.id=cache.get(str(user_id)+'-username')
  37.         self.username=self.id        
  38.         self.password=cache.get(str(user_id)+'-password')
  39.         self.dn=cache.get(str(user_id)+'-dn')
  40.        
  41.         if (self.dn is None) or (self.password is None) or (self.username is None):
  42.             raise NameError('Auth timeout error')        
  43.         self.save() #re save cache
  44.        
  45.     def drop(self,user_id):        
  46.         self.id=self.username
  47.         cache.delete_many([self.id+'-username',self.id+'-password',self.id+'-dn'])                        
  48.        
  49.     def is_authenticated(self):
  50.         return True        
  51.        
  52.     def is_anonymous(self):
  53.         return False    
  54.  
  55. class Backend():
  56.        
  57.     def authenticate(self, username=None, password=None):    
  58.         dn=""
  59.         try:            
  60.                  
  61.             ldap_obj=LdapObject()  
  62.            
  63.             if len(username.split(','))>1:
  64.                 dn=username
  65.             else:
  66.                 #username=string.replace(username,',','\,')            
  67.                 dn=settings.LDAP_BIND_PARAM+'='+username+','+settings.LDAP_BIND_CATALOG
  68.             ldap_obj.bind(dn,password)
  69.             #ldap_conn=ldap_obj.bind(dn,password)                              
  70.         except exceptions.InvalidAuth:
  71.             return None
  72.                    
  73.         user=User(username,password,dn)            
  74.         user.save()
  75.         return user
  76.            
  77.     def get_user(self, user_id):
  78.         user=User()
  79.         try:
  80.             user.load(user_id)
  81.             ldap_obj=LdapObject()  
  82.             ldap_obj.bind(user.dn,user.password)
  83.             return user
  84.         except:
  85.             return None
  86.        
  87.  
  88. def login(request):
  89.  
  90.     if not request.user.is_authenticated():    
  91.         if request.method == 'POST':
  92.  
  93.             if ('nocookie' in request.POST) or request.session.test_cookie_worked():                
  94.                 if 'nocookie' not in request.POST:
  95.                     request.session.delete_test_cookie()
  96.                                                                
  97.                 try:
  98.                     user = authenticate(username=request.POST['username'], password=request.POST['password'])            
  99.                    
  100.                     if user is not None:
  101.                         from django.contrib.auth import login
  102.                         login(request, user)                                
  103.                         return HttpResponseRedirect(request.POST['next'])                          
  104.                        
  105.                     else:                      
  106.                         return HttpResponse("Неверные реквизиты доступа.")                                  
  107.                        
  108.                 except exceptions.ServerDown:                
  109.                     return HttpResponse("Не удалось соединиться с сервером Ldap")              
  110.                                    
  111.             else:
  112.                 return HttpResponse("Пожалуйста проверьте настройки cookie в Вашем браузере.")
  113.  
  114.         redirect_url=''
  115.         if 'next' not in request.GET:
  116.             redirect_url=reverse('index')
  117.            
  118.         else:
  119.             redirect_url=request.GET['next']    
  120.            
  121.         request.session.set_test_cookie()          
  122.         return render_to_response('hr/login.html', {'form_action':reverse('login'),'redirect_url':redirect_url})    
  123.        
  124.     else:
  125.         return HttpResponseRedirect(reverse('index'))          
  126.  
  127.  
  128. def logout(request):                  
  129.     user=User()
  130.     user.drop(request.user.username)
  131.     from django.contrib.auth import logout
  132.     logout(request)
  133.     return HttpResponseRedirect(reverse('login'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement