apipublic.py 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # -*- coding: utf-8 -*-
  2. import tg
  3. import repoze.who.api
  4. from tg import _compat
  5. from pboard.lib import base as plb
  6. from pboard.lib import dbapi as pld
  7. from pboard import model as pm
  8. from pboard.model import data as pmd
  9. from pboard.model import serializers as pms
  10. from tg.i18n import ugettext as _
  11. class PODPublicApiController(plb.BaseController):
  12. @tg.expose()
  13. def create_account(self, email='', password='', retyped_password='', real_name='', **kw):
  14. if email=='' or password=='' or retyped_password=='':
  15. tg.flash(_('Account creation error: please fill all the fields'), 'error')
  16. tg.redirect(tg.lurl('/'))
  17. elif password!=retyped_password:
  18. tg.flash(_('Account creation error: passwords do not match'), 'error')
  19. tg.redirect(tg.lurl('/'))
  20. else:
  21. loExistingUser = pld.PODStaticController.getUserByEmailAddress(email)
  22. if loExistingUser!=None:
  23. tg.flash(_('Account creation error: account already exist: %s') % (email), 'error')
  24. tg.redirect(tg.lurl('/'))
  25. loNewAccount = pld.PODStaticController.createUser()
  26. loNewAccount.email_address = email
  27. loNewAccount.display_name = real_name if real_name!='' else email
  28. loNewAccount.password = password
  29. loUserGroup = pld.PODStaticController.getGroup('user')
  30. loUserGroup.users.append(loNewAccount)
  31. pm.DBSession.add(loNewAccount)
  32. pm.DBSession.flush()
  33. pm.DBSession.refresh(loNewAccount)
  34. loUserSpecificGroup = pld.PODStaticController.createGroup()
  35. loUserSpecificGroup.group_id = 0-loNewAccount.user_id # group id of a given user is the opposite of the user id
  36. loUserSpecificGroup.group_name = 'user_%d' % loNewAccount.user_id
  37. loUserSpecificGroup.personnal_group = True
  38. loUserSpecificGroup.users.append(loNewAccount)
  39. pm.DBSession.flush()
  40. tg.flash(_('Account successfully created: %s') % (email), 'info')
  41. who_api = repoze.who.api.get_api(tg.request.environ)
  42. creds = {}
  43. creds['login'] = email
  44. creds['password'] = password
  45. authenticated, headers = who_api.login(creds)
  46. tg.response.headers = headers
  47. tg.redirect(tg.lurl('/'))