Guest User

Untitled

a guest
Aug 22nd, 2018
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. import pymongo
  2. import crypt
  3. import dbobject
  4. import datetime
  5. import config
  6. from handlers import helper
  7. from data import people
  8.  
  9. class User(dbobject.Base):
  10. def __init__(self):
  11. dbobject.Base.__init__(self)
  12. self.collection = self.db['users']
  13.  
  14. # These get populated when a user is searched for or created
  15. self.objectid = None
  16. self.data = None
  17.  
  18. # Creates a new user
  19. def new(self,username,password,email):
  20.  
  21. try:
  22. _user = username
  23. _pass = password
  24. _email = email
  25. _salt = "%s%s" % (_user[1],_email[0])
  26. _enc_pass = crypt.crypt(_pass, _salt)
  27.  
  28. except:
  29. # TODO: Debug message
  30. self.debug = "Data preparation failed ..."
  31. return False
  32.  
  33. _diaspora_handle = _user + "@" + config.pod_domain
  34. _pod_url = config.pod_url
  35.  
  36. # Generate RSA key pair, 4096 bit
  37. keys = helper.generate_rsa(4096)
  38. if keys != None:
  39. _priv_key = keys[1]
  40. _pub_key = keys[0]
  41. else:
  42. # TODO: Debug message
  43. self.debug = "Key generation failed ..."
  44. return False
  45.  
  46. # Construct user document
  47. user = {"username": _user,
  48. "email": _email,
  49. "encrypted_password":_enc_pass,
  50. "password_salt":"",
  51. "pending_request_ids":[],
  52. "visible_person_ids":[],
  53. "visible_post_ids": [],
  54. "current_sign_in_ip": "",
  55. "current_sign_in_at": datetime.datetime.utcnow(),
  56. "last_sign_in_ip": "",
  57. "last_sign_in_at": datetime.datetime.utcnow(),
  58. "sign_in_count": 0,
  59. "serialized_private_key": _priv_key,
  60. "getting_started": True
  61. }
  62.  
  63. # Try inserting object
  64. try:
  65.  
  66. self.object_id = self.collection.insert(user)
  67.  
  68. # Populate self.data
  69. self.get_by_id(self.object_id)
  70.  
  71. # Force creation of a corresponding people object
  72. people_obj = people.People().new(self.object_id,_diaspora_handle,_pub_key,_pod_url)
  73. if people_obj:
  74. return True
  75. else:
  76. # No profile could be created
  77. # TODO: Delete the newly created user object ( with id - self.object_id )
  78. # and print debug message before returning
  79. self.debug = "People object could not be created ..."
  80. return False
  81. except:
  82. # User could not be created
  83. # TODO: Debug message
  84. self.debug = "Could not insert object in ..."
  85. return False
  86.  
  87. # Authenticates a user, using username and password
  88. def authenticate(self,username,password):
  89. _user = username.lower().strip()
  90. _pass = password
  91. ret = self.collection.find_one({"username":_user})
  92. if ret:
  93. _enc_pass = ret[u'encrypted_password']
  94. res = crypt.crypt(_pass,_enc_pass)
  95. if res == _enc_pass:
  96. # Populate object with the authenticated user
  97. self.data = ret
  98. self.object_id = self.data[u'_id']
  99. return True
  100. else:
  101. return False
  102. else:
  103. return False
  104.  
  105. # Fetch a user by user_id
  106. def get_by_id(_id):
  107. self.object_id = _id
  108. self.data = self.collection.find_one({"_id":_id})
  109. return self.data
  110.  
  111. # Fetch a user by username
  112. def get_by_username(_user):
  113. self.data = self.collection.find_one({"username":_user})
  114. if ret != None:
  115. self.object_id = self.data[u'_id']
  116. return self.data
Add Comment
Please, Sign In to add comment