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