
.cXj                 @   se  d  d l  m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 m Z m Z m Z m Z m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l Z d  d l m  Z  d  d l! Z! d  d l m" Z" d  d l# m$ Z$ d  d l% Z% d  d l& Z& d  d l% m' Z' d  d l( m) Z) d  d l* m+ Z, d  d l- Z- d  d l. m/ Z/ e j0 d d  Z1 d d d  Z2 d d d  Z3 d d   Z4 d d   Z5 d d    Z6 d! d"   Z7 d# d$   Z8 d d% d& d'  Z9 d( d)   Z: d* d+   Z; d, d-   Z< d. d/   Z= d0 d1   Z> d2 d3   Z? d d4 d5  Z@ d S)6    )HttpResponseRedirect)renderget_object_or_404)get_template)RequestContext)RegistrationForm	LoginFormProfileFormPasswordRecoverChangePasswordChangePasswordWQ)User)authenticateloginlogout)UserProfile)Devices)	send_mail)settingsN)Q)redirect)Image)	timedelta)timezone)ugettext)ModelBackendc             C   sc  d d  l  } d d l m } d d  l } | j d  } y6 |  j d d  } t | d  } t | d  } Wn t k
 r t d   Yn X| | d d	 t	 |  d	 d	  } | | d d	 t	 |  d	 d	  }	 | j
 |	  }	 |	 j d
  j   d k rt d   n- | j | d | j d  d t j j   }
 | |
 k r[t d   n |	 Sd  S)Nr   )urlsafe_b64decodezutf-8.      z'signed_request' malformed=   	algorithmzHMAC-SHA256z.'signed_request' is using an unknown algorithmmsg	digestmodz#'signed_request' signature mismatch)hmacbase64r   Z
simplejsonencodesplitstr
IndexError
ValueErrorlenloadsgetuppernewhashlibsha256digest)signed_requestZ
app_secretr%   r   jsonlZencoded_sigpayloadsigdataZexpected_sig r:   7/home/ubuntu/projects/ifolica/data/usercontrol/views.pyparse_signed_request   s&    &&-r<   Fc       
      C   s7  t  j t t j    j d   j   d  d  } t  j t | |   j d   j   } t j j   t j d  } t	 j
 j d |   j } t j
 j d |  } | j d | d |  t d  } t d	  } | j i |  d
 6| d 6| d 6t j d 6 }	 y' t | |	 t j d |  g d d Wn Yn Xd  S)Nzutf-8   r   usernameuserpassword_recovery_keypassword_recovery_key_expiresu)   Восстановление пароляz'usercontrol/email/password_recover.htmlemailkey
first_timehome_urlz%sfail_silentlyF)r1   sha1r)   randomr'   	hexdigestdatetimetodayr   r   objectsr.   pkr   filterupdate_r   r   r   DEFAULT_EMAIL_URLr   DEFAULT_FROM_EMAIL)
r>   rD   saltr@   rA   user_pkprofileemail_subjecttemplate
email_bodyr:   r:   r;   send_new_password_recovery_key9   s     4('rY   c       
      C   s(  t  j t t j    j d   j   d  d  } t  j t | |   j d   j   } t j j   t j d  } t	 j
 j d |   j } t j
 j d |  } | j d | d |  t d  } t d	  } | j i |  d
 6| d 6| d 6t j d 6 }	 t | |	 t j d |  g d d d  S)Nzutf-8r=   r   r>   r?   email_activation_keyemail_activation_key_expiresu1   Подтверждение регистрацииz)usercontrol/email/email_confirmation.htmlrB   rC   rD   rE   z%srF   F)r1   rG   r)   rH   r'   rI   rJ   rK   r   r   rL   r.   rM   r   rN   rO   rP   r   r   r   rQ   r   rR   )
r>   rD   rS   rZ   r[   rT   rU   rV   rW   rX   r:   r:   r;   send_new_email_activation_keyP   s    4(r\   c             C   s  |  j  j   r t d  Si t d  d 6} |  j d k sY |  j d k rd |  j k rt |  j  } d } | j   s | j	 d s d |  j k rjd |  j k r|  j d } t
 j d	 t j | f  } | j   } d
 | k r| d } t
 j d | d | d
 f  } | j   } t j j   } | d d d }	 | d d d }
 y9 t j j d |  } d | _ t |  |  t d  SWqd } YqXqt d  Sn  | j	 d rWt | j	 d  st d  S| j	 d } t j j   } | j	 d }	 | j	 d }
 y9 t j j d |  } d | _ t |  |  t d  SWqd } YqXnF d |  j k r| j	 d } | j	 d } | j	 d }	 | j	 d }
 n  t j j d | d | d |  } | j   t d | d |	 d |
 d |  } | j   | sy t |  WqYqXn  t d | d |  } | d  k	 r]|  j j d'  t |  |  t d  St d  Sq| | d" <d | d# <t |  d$ |  Sn t   | d" <t |  d$ |  Sd  S)(Nz	/profile/u   Регистрация	seo_titlePOSTGETcodeFfbidzvhttp://api.vk.com/oauth/access_token?client_id=5604935&client_secret=%s&code=%s&redirect_uri=http://ifolica.ru/signup/access_tokenrB   zLhttp://api.vk.com/method/users.get?uids=%s&fields=screen_nameaccess_token=%suser_idresponser   
first_name	last_namer>   z)django.contrib.auth.backends.ModelBackendz/games/Tz/signup/r4   z/login/
fbusernamefbfirstname
fblastnamepasswordr?   email_proof<      im  formpostzusercontrol/registration.htmli  iQ i3)r?   is_authenticatedr   rP   methodr_   r   r^   is_validcleaned_datarequestsr.   r   VK_APP_SECRETr5   r   rL   make_random_passwordbackendr   r<   create_usersaver   r\   r   session
set_expiryr   )requestcontextrn   rk   vk_codedata1r>   data2rj   re   rf   r?   user_profiletry_authr:   r:   r;   registrationh   s    
-(	
		
	!
	



r   c             C   s  |  j  j   r t d  Si t d  d 6} |  j d k sJ d |  j k rt |  j  } | j   s | j	 d d k s d |  j k rd |  j k r|  j d } t
 j d t j | f  } | j   } y= t j j d	 | d
  } d | _ t |  |  t d  SWqt j k
 r | d
 } t
 j d | d | d f  } | j   } t j j   } | d d d }	 | d d d }
 t j j d	 | d
 | d |  } | j   t d | d |	 d |
 d d  } | j   d | _ t |  |  t d  SYqXn  | j	 d d k s;t | j	 d  s4t d  Sy@ t j j d	 | j	 d  } d | _ t |  |  t d  SWq;t j k
 r7| j	 d }	 | j	 d }
 | j	 d } t j j   } t j j d	 | d
 | d |  } | j   t d | d |	 d |
 d d  } | j   d | _ t |  |  t d  SYq;Xn  t d	 | j	 d	 d | j	 d  } | d  k	 r| j	 d r|  j j d&  n |  j j d  t |  |  t d  St d   qt |  d! i | d" 6d d# 6 Sn  t   } t |  d! i | d" 6 Sd  S)'Nz	/profile/u   Регистрацияr]   r^   r`   rg    zvhttps://api.vk.com/oauth/access_token?client_id=5604935&client_secret=%s&code=%s&redirect_uri=http://ifolica.ru/login/r>   rB   z)django.contrib.auth.backends.ModelBackendz/games/zLhttp://api.vk.com/method/users.get?uids=%s&fields=screen_nameaccess_token=%src   rb   rd   r   re   rf   rj   r?   rk   Tr4   z/login/rh   ri   Zremember_merl   rm   im  z/500/zusercontrol/login.htmlrn   ro   i  iQ i3)r?   rp   r   rP   rq   r_   r   r^   rr   rs   rt   r.   r   ru   r5   r   rL   rw   r   DoesNotExistrv   rx   ry   r   r<   r   rz   r{   r   )r|   r}   rn   r~   r   r?   r>   r   rj   re   rf   r   r   r:   r:   r;   login_request   s    
/		
	!
	
	
	!
	
	#
!	r   c             C   s  |  j  d k rft |  j  } | j   rE| j d } y t j j d |  j j	 } t j j d |  j j
 } | s | t j   t d d  k  r t |  t |  d i t d |  d 6 St |  d i | d	 6d
 d 6d
 d 6t d  d 6 SWqct j k
 rAt |  d i | d	 6d
 d 6d
 d 6t d |  d 6 SYqcXqt |  d i | d	 6d
 d 6 Sn  t   } t |  d i | d	 6 Sd  S)Nr^   r>   hours/   zusercontrol/login.htmlue   Инструкции по восстановлению пароля были отправлы на %ssys_messagez!usercontrol/password_recover.htmlrn   Tro   	sys_errorub   Восстановление пароля возможно не чаще чем 1 раз в часu'   %s не зарегистрирован.)rq   r
   r^   rr   rs   r   rL   r.   rU   rA   r@   r   nowr   rY   r   rP   r   r   )r|   rn   r>   Zkey_expiresr@   r:   r:   r;   password_recover  s,    &
!	r   c             C   s  t  t d | } | j ra | j t j   k  ra t |  d i d d 6t d  d 6t d  d 6 Si | j j d	 6} | | d
 <t d  | d <|  j	 d k rt
 |  j  } | | d <| j   rv| j d } | j j |  | j j   d | _ | j   |  j j   sXt d	 | j j d |  } | d  k	 rX|  j j d  t |  |  qXn  t |  d i d d 6d d 6 Sd | d <t d  | d <n  t |  d |  S)Nr@   zusercontrol/login.htmlTr   zLog inr]   u   Ссылка для восстановления пароля недействительна, <a href="/login/recover/">переотправить</a>r   r>   Zrecovery_keyu0   Смена пароля активированаr^   rn   new_passwordr   rj   rl   rm   im  zusercontrol/profile.htmlu"   Пароль был изменен
is_profileErrorz usercontrol/password_change.htmli  iQ i3)r   r   rA   r   r   r   rP   r?   r>   rq   r   r^   rr   rs   set_passwordry   r@   rp   r   rz   r{   r   )r|   r@   r   r}   rn   r   r   r:   r:   r;    password_recover_link_activation5  s:    

	

r   c             C   s1   |  j  j   s t d  St |   t d  Sd  S)Nz/login/)r?   rp   r   r   )r|   r:   r:   r;   logout_request\  s    

r   i  c       	      C   s   t  j d t j |  f  } | j d k r= | j d  } n  | j \ } } | | k r t | | | d  } t | d d |  } | | f } | j | t  j	  } n  | r | j
 |  } n  | j d t j |  f | j  d S)Nz%s/%sLRGBd   T)r   r   )r   openr   
MEDIA_ROOTmodeconvertsizeroundresizeZ	ANTIALIAScropry   format)	filenamer   	max_widthimagewidthheightZfor_percentZ
new_heightr   r:   r:   r;   avatar_cropperi  s     r   c             C   s*   i d d 6t  d  d 6} t |  d |  S)NTr   u   Ваш профильr]   zusercontrol/profile_view.html)rP   r   )r|   r}   r:   r:   r;   profile_viewz  s    r   c             C   s7   i d d 6t  d  d 6t  d  d 6} t |  d |  S)NTr   u#   Пароль был изменен.r   u   Ваш профильr]   zusercontrol/profile_view.html)rP   r   )r|   r}   r:   r:   r;   profile_view_password_changed  s    
r   c             C   s/  |  j  j   s t d  Si d d 6} |  j d k rt |  j  } | j   r | j   } | r|  j  j |  |  j  j	   t
 d |  j  j d |  } | d  k	 r |  j j d  t |  |  n
 t d  St d
  Sqi | d 6d d 6t d  d 6d d 6d d 6} t |  d |  Sn  t |  d |  S)Nz/login/TZis_password_changer^   r>   rj   rl   rm   im  z/profile/password_changed/rn   ro   u4   Неправильный текущий парольr   r   z*usercontrol/password_change_instantly.htmli  iQ i3)r?   rp   r   rq   r   r^   rr   clean_new_passwordr   ry   r   r>   rz   r{   r   rP   r   )r|   r}   rn   r   r   r:   r:   r;   password_change_instantly  s.    



r   c             C   s  d } i t  d  d 6} |  j j   s2 t d  S|  j d k rwt |  j d |  j } d | d <| | d	 <| j   r6| j   } | r|  j j	 |  |  j j
   t d
 |  j j d |  } | d  k	 r |  j j d#  t |  |  n
 t d  St  d  } n  t j j d |  j j  } | j d | _ | j d | _ | j d | _ | j
   | j   } | |  j j k r|  j j j ra|  j j j rat j   |  j j j } | t d d  k  rat d d  | }	 t |	 j    d  }
 |  j j j t j   t d d  k r^d | d <t  d |
  | d <d | d <d | d <t! |  d |  Sqan  | |  j _ | |  j _" d |  j j _ t j   |  j j _ |  j j j
   |  j j
   t# |  j j  t  d |  j j  | d <d | d <d | d <t! |  d |  St  d  | | d <d | d <t! |  d |  Sd | d <t  d   | d <d | d <d | d <t! |  d |  Sn  t d |  j  } | | d	 <d | d <d | d <t! |  d |  S)$Nr   u   Учетные данныеr]   z/login/r^   r?   Tro   rn   r>   rj   rl   rm   im  z/404/u$   , пароль был измененagere   rf   r   r   daysr   uI   Смена пароля будет доступна через %s мин.r   r   Zis_profile_editingzusercontrol/profile.htmlFu}   Перейдите по ссылке, которую мы отправили на %s, чтобы подтвердить emailu)   Профиль был сохранен %su,   Профиль не был сохранен!i  iQ i3)$rP   r?   rp   r   rq   r	   r^   rr   r   r   ry   r   r>   rz   r{   r   r   rL   r.   idrs   r   re   rf   clean_usernamerU   email_last_changedrk   r   r   r   r   total_secondsr   rB   r\   )r|   Zadd_sys_messager}   rn   r   r   Zuser_profile_hr>   Zafter_last_email_changedZto_waitZto_wait_minutesr:   r:   r;   rU     s|    




(











rU   c             C   s6  t  t d | } | j rI t |  d i t d  |  j j d 6d d 6 S| j t j	   k  r t |  d i d d 6t d  d 6d d 6 Sd | _ | j
   |  j j   s| j } t d	 | j d
 | j  } | d  k	 r |  j j d  t |  |  qt d  Sn  t |  d i t d |  j j  d 6d d 6 S)NrZ   zusercontrol/profile.htmlu   %s подтвержденr   Tr   r   uz   Ссылка недействительна, <a href="/profile/activate/send/">переотправить ссылку</a>r>   rj   rl   rm   im  z/404/i  iQ i3)r   r   rk   r   rP   r?   r>   r[   r   r   ry   rp   r   rj   rz   r{   r   r   )r|   rZ   r   r?   r   r:   r:   r;   rk     s,    		
	rk   c             C   s   |  j  j   s t d  S|  j  j j rV t |  d i t d |  j  j  d 6d d 6 St j	   |  j  j j
 t d d
  } y t |  j  j  Wn Yn Xt |  d i t d	 |  j  j  d 6d d 6 S)Nz/login/zusercontrol/profile.htmlu)   %s подтвержден, спасибоr   Tr   r   r   ut   Чтобы подтвердить email перейдите по ссылке, что мы отправили на %sr   )r?   rp   r   rU   rk   r   rP   r>   r   r   r[   r   r\   )r|   Zafter_last_key_generatedr:   r:   r;   send_email_proof  s    
&r   c             C   s   |  j  j   s t d  Si d d 6t d  d 6t d  d 6} | r y4 t j j d |  j  d |  j   d	 | | d
 <Wq Yq Xn  t j j d |  j   | d <t	 |  d |  S)Nz/login/TZ
is_objectsr   Z
profile_h2r]   r?   	device_idu>   Устройство с ID '%s' успешно овязано.r   deviceszusercontrol/devices.html)
r?   rp   r   rP   r   rL   r.   deleterN   r   )r|   Z	remove_idr}   r:   r:   r;   r   6  s    
'"r   )Adjango.http.responser   django.shortcutsr   r   Zdjango.template.loaderr   django.templater   Zusercontrol.formsr   r   r	   r
   r   r   django.contrib.auth.modelsr   django.contrib.authr   r   r   Zusercontrol.modelsr   Zgame.modelsr   django.core.mailr   django.confr   r1   django.db.modelsr   rH   r   PILr   rJ   rer   django.utilsr   django.utils.translationr   rP   rt   django.contrib.auth.backendsr   FACEBOOK_APP_SECRETr<   rY   r\   r   r   r   r   r   r   r   r   r   rU   rk   r   r   r:   r:   r:   r;   <module>   sL   .ZV'R!