Revision bee5ffa6 pithos/im/views.py
b/pithos/im/views.py | ||
---|---|---|
50 | 50 |
from django.utils.translation import ugettext as _ |
51 | 51 |
from django.core.urlresolvers import reverse |
52 | 52 |
|
53 |
from urllib import quote |
|
54 |
|
|
53 | 55 |
from pithos.im.models import User, Invitation |
54 | 56 |
from pithos.im.util import isoformat |
55 | 57 |
|
... | ... | |
132 | 134 |
page=page, |
133 | 135 |
prev=prev, |
134 | 136 |
next=next) |
135 |
|
|
136 |
|
|
137 |
|
|
137 | 138 |
@requires_admin |
138 | 139 |
def users_create(request): |
139 | 140 |
if request.method == 'GET': |
... | ... | |
149 | 150 |
user.save() |
150 | 151 |
return redirect(users_info, user.id) |
151 | 152 |
|
152 |
|
|
153 | 153 |
@requires_admin |
154 | 154 |
def users_info(request, user_id): |
155 | 155 |
user = User.objects.get(id=user_id) |
... | ... | |
202 | 202 |
subject = _('Invitation to Pithos') |
203 | 203 |
message = render_to_string('invitation.txt', { |
204 | 204 |
'invitation': inv, |
205 |
'url': url}) |
|
205 |
'url': url, |
|
206 |
'baseurl': settings.BASE_URL, |
|
207 |
'service': settings.SERVICE_NAME, |
|
208 |
'support': settings.SUPPORT_EMAIL}) |
|
206 | 209 |
sender = settings.DEFAULT_FROM_EMAIL |
207 | 210 |
send_mail(subject, message, sender, [inv.uniq]) |
208 | 211 |
logging.info('Sent invitation %s', inv) |
... | ... | |
252 | 255 |
'status': status, |
253 | 256 |
'message': message}) |
254 | 257 |
return HttpResponse(html) |
258 |
|
|
259 |
def send_verification(user): |
|
260 |
url = settings.ACTIVATION_LOGIN_TARGET % quote(user.auth_token) |
|
261 |
message = render_to_string('activation.txt', { |
|
262 |
'user': user, |
|
263 |
'url': url, |
|
264 |
'baseurl': settings.BASE_URL, |
|
265 |
'service': settings.SERVICE_NAME, |
|
266 |
'support': settings.SUPPORT_EMAIL}) |
|
267 |
sender = settings.DEFAULT_FROM_EMAIL |
|
268 |
send_mail('Pithos account activation', message, sender, [user.email]) |
|
269 |
logging.info('Sent activation %s', user) |
|
270 |
|
|
271 |
def local_create(request): |
|
272 |
if request.method == 'GET': |
|
273 |
return render_response('local_create.html') |
|
274 |
elif request.method == 'POST': |
|
275 |
username = request.POST.get('uniq') |
|
276 |
realname = request.POST.get('realname') |
|
277 |
email = request.POST.get('email') |
|
278 |
password = request.POST.get('password') |
|
279 |
status = 'success' |
|
280 |
if not username: |
|
281 |
status = 'error' |
|
282 |
message = 'No username provided' |
|
283 |
elif not password: |
|
284 |
status = 'error' |
|
285 |
message = 'No password provided' |
|
286 |
elif not email: |
|
287 |
status = 'error' |
|
288 |
message = 'No email provided' |
|
289 |
|
|
290 |
if status == 'success': |
|
291 |
username = '%s@local' % username |
|
292 |
try: |
|
293 |
user = User.objects.get(uniq=username) |
|
294 |
status = 'error' |
|
295 |
message = 'Username is not available' |
|
296 |
except User.DoesNotExist: |
|
297 |
user = User() |
|
298 |
user.uniq = username |
|
299 |
user.realname = realname |
|
300 |
user.email = request.POST.get('email') |
|
301 |
user.password = request.POST.get('password') |
|
302 |
user.is_admin = False |
|
303 |
user.quota = 0 |
|
304 |
user.state = 'UNVERIFIED' |
|
305 |
user.level = 1 |
|
306 |
user.renew_token() |
|
307 |
try: |
|
308 |
send_verification(user) |
|
309 |
message = _('Verification sent to %s' % user.email) |
|
310 |
user.save() |
|
311 |
except (SMTPException, socket.error) as e: |
|
312 |
status = 'error' |
|
313 |
name = 'strerror' |
|
314 |
message = getattr(e, name) if hasattr(e, name) else e |
|
315 |
|
|
316 |
html = render_to_string('local_create.html', { |
|
317 |
'status': status, |
|
318 |
'message': message}) |
|
319 |
return HttpResponse(html) |
|
320 |
|
|
321 |
def send_password(user): |
|
322 |
url = settings.PASSWORD_RESET_TARGET % quote(user.auth_token) |
|
323 |
message = render_to_string('password.txt', { |
|
324 |
'user': user, |
|
325 |
'url': url, |
|
326 |
'baseurl': settings.BASE_URL, |
|
327 |
'service': settings.SERVICE_NAME, |
|
328 |
'support': settings.SUPPORT_EMAIL}) |
|
329 |
sender = settings.DEFAULT_FROM_EMAIL |
|
330 |
send_mail('Pithos password recovering', message, sender, [user.email]) |
|
331 |
logging.info('Sent password %s', user) |
|
332 |
|
|
333 |
def reclaim_password(request): |
|
334 |
if request.method == 'GET': |
|
335 |
return render_response('reclaim.html') |
|
336 |
elif request.method == 'POST': |
|
337 |
username = request.POST.get('uniq') |
|
338 |
username = '%s@local' % username |
|
339 |
try: |
|
340 |
user = User.objects.get(uniq=username) |
|
341 |
try: |
|
342 |
send_password(user) |
|
343 |
status = 'success' |
|
344 |
message = _('Password reset sent to %s' % user.email) |
|
345 |
user.save() |
|
346 |
except (SMTPException, socket.error) as e: |
|
347 |
status = 'error' |
|
348 |
name = 'strerror' |
|
349 |
message = getattr(e, name) if hasattr(e, name) else e |
|
350 |
except User.DoesNotExist: |
|
351 |
status = 'error' |
|
352 |
message = 'Username does not exist' |
|
353 |
|
|
354 |
html = render_to_string('reclaim.html', { |
|
355 |
'status': status, |
|
356 |
'message': message}) |
|
357 |
return HttpResponse(html) |
|
358 |
|
|
359 |
def reset_password(request): |
|
360 |
if request.method == 'GET': |
|
361 |
token = request.GET.get('auth') |
|
362 |
next = request.GET.get('next') |
|
363 |
kwargs = {'auth': token, |
|
364 |
'next': next} |
|
365 |
if not token: |
|
366 |
kwargs.update({'status': 'error', |
|
367 |
'message': 'Missing token'}) |
|
368 |
html = render_to_string('reset.html', kwargs) |
|
369 |
return HttpResponse(html) |
|
370 |
elif request.method == 'POST': |
|
371 |
token = request.POST.get('auth') |
|
372 |
password = request.POST.get('password') |
|
373 |
url = request.POST.get('next') |
|
374 |
if not token: |
|
375 |
status = 'error' |
|
376 |
message = 'Bad Request: missing token' |
|
377 |
try: |
|
378 |
user = User.objects.get(auth_token=token) |
|
379 |
user.password = password |
|
380 |
user.save() |
|
381 |
if url: |
|
382 |
return HttpResponseRedirect(url) |
|
383 |
except User.DoesNotExist: |
|
384 |
status = 'error' |
|
385 |
message = 'Bad Request: invalid token' |
|
386 |
|
|
387 |
html = render_to_string('reset.html', { |
|
388 |
'status': status, |
|
389 |
'message': message}) |
|
390 |
return HttpResponse(html) |
Also available in: Unified diff