recover account, email in preferences

This commit is contained in:
j 2010-02-06 13:54:39 +05:30
commit c964ffaa71
7 changed files with 136 additions and 48 deletions

View file

@ -26,7 +26,7 @@ class Preference(models.Model):
def getUserJSON(user):
json = {}
for key in ('username', 'email'):
for key in ('username', ):
json[key] = getattr(user, key)
json['preferences'] = getPreferences(user)
return json
@ -35,19 +35,29 @@ def getPreferences(user):
prefs = {}
for p in Preference.objects.filter(user=user):
prefs[p.key] = json.loads(p.value)
prefs['email'] = user.email
return prefs
def getPreference(user, key, value=None):
q = Preference.objects.filter(user=user, key=key)
if q.count() > 0:
value = json.loads(q[0].value)
if key in ('email', ):
value = getattr(user, key)
else:
q = Preference.objects.filter(user=user, key=key)
if q.count() > 0:
value = json.loads(q[0].value)
return value
def setPreference(user, key, value):
value = json.dumps(value)
q = Preference.objects.filter(user=user, key=key)
if q.count() > 0:
q[0].value = value
if key in ('email', ):
setattr(user, key, value)
user.save()
else:
p = Preference(user=user, key=key, value=value)
p.save()
value = json.dumps(value)
q = Preference.objects.filter(user=user, key=key)
if q.count() > 0:
p = q[0]
p.value = value
p.save()
else:
p = Preference(user=user, key=key, value=value)
p.save()

View file

@ -6,9 +6,10 @@ import hashlib
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404, redirect
from django.template import RequestContext, loader, Context
from django.utils import simplejson as json
from django.conf import settings
from oxdjango.shortcuts import render_to_json_response
from oxdjango.decorators import login_required_json
@ -116,8 +117,8 @@ def api_recover(request):
user_profile.recover_key = key
user_profile.save()
template = loader.get_template('recover_mail.txt')
context = RequestContext({
template = loader.get_template('recover_email.txt')
context = RequestContext(request, {
'recover_url': request.build_absolute_uri("/r/%s" % key),
'sitename': settings.SITENAME,
})
@ -131,6 +132,22 @@ def api_recover(request):
response = {'status': {'code': 400, 'text': 'username exists'}}
return render_to_json_response(response)
def recover(request, key):
qs = models.UserProfile.objects.filter(recover_key=key)
if qs.count() == 1:
user = qs[0].user
user.set_password(key)
user.save()
user_profile = user.get_profile()
user_profile.recover_key = ''
user_profile.save()
user = authenticate(username=user.username, password=key)
login(request, user)
#FIXME: set message to notify user to update password
return redirect('/#settings')
return redirect('/')
@login_required_json
def api_preferences(request):
'''