Guest User

Untitled

a guest
May 6th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.99 KB | None | 0 0
  1. from mongoengine import fields, Document, CASCADE
  2. from django.contrib.auth.hashers import check_password, make_password
  3. from django.contrib import auth
  4. from django.conf import settings
  5. from django.utils import timezone
  6. from django.contrib.auth.models import _user_has_perm
  7. from user.models import Token
  8.  
  9. #from captive_portal.models import Voucher
  10.  
  11. class Permission(Document):
  12. name = fields.StringField(required=True)
  13. created_at = fields.DateTimeField(default=timezone.now)
  14. modified_at = fields.DateTimeField(default=timezone.now)
  15.  
  16. def __unicode__(self):
  17. return self.name
  18.  
  19. meta = {
  20. 'indexes': [
  21. {'fields': ['name'], 'unique': True}
  22. ]
  23. }
  24.  
  25.  
  26. class Role(Document):
  27. name = fields.StringField(unique=True, required=True)
  28. created_at = fields.DateTimeField(default=timezone.now)
  29. modified_at = fields.DateTimeField(default=timezone.now)
  30.  
  31. def __unicode__(self):
  32. return self.name
  33.  
  34. meta = {
  35. 'indexes': [
  36. {'fields': ['name']}
  37. ]
  38. }
  39.  
  40.  
  41.  
  42.  
  43. class User(Document):
  44. first_name = fields.StringField(max_length=30, required=False)
  45. last_name = fields.StringField(max_length=30, required=False)
  46. username = fields.StringField(max_length=30, required=False)
  47. email = fields.EmailField(max_length=30, required=False)
  48. password = fields.StringField(min_length=6, max_length=128, required=False)
  49. phone = fields.StringField(max_length=15, required=False)
  50. address = fields.StringField(max_length=100, required=False)
  51. city = fields.StringField(max_length=50, required=False)
  52. state = fields.StringField(max_length=50, required=False)
  53. country = fields.StringField(max_length=30, required=False)
  54.  
  55. verification_code = fields.StringField(max_length=30, required=False)
  56. country_code = fields.StringField(max_length=30, required=False)
  57.  
  58. gender = fields.StringField(max_length=30, required=False)
  59.  
  60. #re_password = fields.StringField(max_length=30, required=False)
  61.  
  62. is_active = fields.BooleanField(default = False)
  63.  
  64. # Designates that this user has all permissions without explicitly assigning them.
  65. is_superuser = fields.BooleanField(default=False)
  66. token = fields.EmbeddedDocumentField(Token, required=False, null=True)
  67.  
  68.  
  69. USERNAME_FIELD = getattr(settings, 'USERNAME_FIELD', 'username')
  70. REQUIRED_FIELDS = []
  71.  
  72. meta = {
  73. 'indexes': [
  74. {'fields': ['username', 'email']}
  75. ]
  76. }
  77.  
  78. def __unicode__(self):
  79. return self.username if self.username else self.email
  80.  
  81. def save(self, *args, **kwargs):
  82. if not self.id:
  83. self.set_password(self.password)
  84.  
  85. if not self.token:
  86. self.token = Token()
  87.  
  88. return super().save(*args, **kwargs)
  89.  
  90. @property
  91. def full_name(self):
  92. return '{}{}'.format(self.first_name, self.last_name)
  93.  
  94. @property
  95. def is_authenticated(self):
  96. """
  97. Always return True. This is a way to tell if the user has been
  98. authenticated in templates.
  99. """
  100. return True
  101.  
  102. def set_password(self, raw_password):
  103. self.password = make_password(raw_password)
  104. return self
  105.  
  106. def check_password(self, raw_password):
  107. return check_password(raw_password, self.password)
  108.  
  109. def get_role_permissions(self, obj=None):
  110. """
  111. Returns a list of permission strings that this user has through his/her
  112. roles. This method queries all available auth backends. If an object
  113. is passed in, only permissions matching this object are returned.
  114. """
  115. permissions = set()
  116. for backend in auth.get_backends():
  117. if hasattr(backend, "get_role_permissions"):
  118. permissions.update(backend.get_role_permissions(self, obj))
  119. return permissions
  120.  
  121. def get_all_permissions(self, obj=None):
  122. """
  123. Returns a list of permission strings that this user has through his/her
  124. roles. This method queries all available auth backends. If an object
  125. is passed in, only permissions matching this object are returned.
  126. """
  127. permissions = set()
  128. for backend in auth.get_backends():
  129. print(backend.__dict__)
  130. if hasattr(backend, "get_role_permissions"):
  131. permissions.update(backend.get_role_permissions(self, obj))
  132. return permissions
  133.  
  134. def has_perm(self, perm, obj=None):
  135. """
  136. Returns True if the user has the specified permission. This method
  137. queries all available auth backends, but returns immediately if any
  138. backend returns True. Thus, a user who has permission from a single
  139. auth backend is assumed to have permission in general. If an object is
  140. provided, permissions for this specific object are checked.
  141. """
  142. # superusers have all permissions.
  143. if self.is_superuser:
  144. print("super")
  145. return True
  146. print(perm)
  147. print("not")
  148. return _user_has_perm(self, perm, obj)
  149.  
  150. def has_perms(self, perm_list, obj=None):
  151. """
  152. Returns True if the user has each of the specified permissions. If
  153. object is passed, it checks if the user has all required perms for this
  154. object.
  155. """
  156. for perm in perm_list:
  157. if not self.has_perm(perm, obj):
  158. return False
  159. return True
  160.  
  161. @property
  162. def is_anonymous(self):
  163. """
  164. Always return False. This is a way of comparing User objects to
  165. anonymous users.
  166. """
  167. return False
  168.  
  169.  
  170. class UserRole(Document):
  171. role = fields.ReferenceField(Role, required=True, reverse_delete_rule=CASCADE)
  172. user = fields.ReferenceField(User, required=True, reverse_delete_rule=CASCADE)
  173.  
  174. meta = {
  175. 'indexes': [
  176. {'fields': ['role', 'user']}
  177. ]
  178. }
  179.  
  180.  
  181. class Provider(Document):
  182. """
  183. This table keep settings for social providers for which this application would
  184. allow login for user.
  185. Admin can add/remove social providers from here to decide which social login
  186. to keep and which one to remove
  187. """
  188. name = fields.StringField(required=True)
  189. table_name = fields.StringField(required=True)
  190. is_active = fields.BooleanField(default=True)
  191. configuration = fields.DictField()
  192. created_at = fields.DateTimeField(default=timezone.now)
  193. modified_at = fields.DateTimeField(default=timezone.now)
  194.  
  195. def __unicode__(self):
  196. return '{} {}'.format(self.name, self.is_active)
  197.  
  198. meta = {
  199. 'indexes': [
  200. {'fields': ['name'], 'unique': True}
  201. ]
  202. }
  203.  
  204.  
  205. class ProviderSettings(Document):
  206. auth_fields = fields.StringField()
  207. provider_fields = fields.StringField()
  208. provider = fields.ReferenceField(Provider, reverse_delete_rule=CASCADE)
  209.  
  210.  
  211. class UserProvider(Document):
  212. auth_data = fields.StringField()
  213. user_data = fields.StringField()
  214. created_at = fields.DateTimeField(default=timezone.now)
  215. modified_at = fields.DateTimeField(default=timezone.now)
  216. user = fields.ReferenceField(User, reverse_delete_rule=CASCADE)
  217. provider = fields.ReferenceField(Provider, reverse_delete_rule=CASCADE)
  218.  
  219.  
  220. class Device(Document):
  221. mac_address = fields.StringField()
  222. type = fields.StringField()
  223. operating_system = fields.StringField()
  224. model = fields.StringField()
  225. browser = fields.StringField()
  226. user = fields.ReferenceField(User, reverse_delete_rule=CASCADE)
  227.  
  228. meta = {
  229. 'indexes': [
  230. {'fields': ['user', 'mac_address', 'type']}
  231. ]
  232. }
  233.  
  234.  
  235. class Settings(Document):
  236. # in minutes
  237. login_timeout = fields.IntField(min_value=1, default=1, required=True)
  238.  
  239.  
  240. # class UserPermission(Document):
  241. # #username = fields.ReferenceField(User, required=True, reverse_delete_rule=CASCADE)
  242. # permission = fields.ReferenceField(Permission, required=True, reverse_delete_rule=CASCADE)
  243. # user = fields.ReferenceField(User, required=True, reverse_delete_rule=CASCADE)
  244. #
  245. # meta = {
  246. # 'indexes': [
  247. # {'fields': ['permission', 'user']}
  248. # ]
  249. # }
  250.  
  251.  
  252.  
  253.  
  254. class RolePermission(Document):
  255. #user = fields.ReferenceField(User, required=True, reverse_delete_rule=CASCADE)
  256. role = fields.ReferenceField(Role, required=True, reverse_delete_rule=CASCADE)
  257. permission = fields.ReferenceField(Permission, required=True, reverse_delete_rule=CASCADE)
  258.  
  259. can_view = fields.BooleanField(default=True)
  260. can_edit = fields.BooleanField(default=True)
  261. can_delete = fields.BooleanField(default=True)
  262. can_manage = fields.BooleanField(default=True)
  263.  
  264. meta = {
  265. 'indexes': [
  266. {'fields': ['role', 'permission']}
  267. ]
  268. }
  269.  
  270. def get_perm_dict(self):
  271. return {
  272. 'name': self.permission.name,
  273. 'can_view': self.can_view,
  274. 'can_edit': self.can_edit,
  275. 'can_delete': self.can_delete,
  276. 'can_manage': self.can_manage
  277. }
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290. from mongoengine import EmbeddedDocument, Document, CASCADE
  291. from mongoengine import fields
  292. import binascii
  293. import os
  294. from django.utils import timezone
  295. from captive_portal.models import Voucher
  296. from configuration.models import User, Device
  297.  
  298.  
  299.  
  300.  
  301. class Token(EmbeddedDocument):
  302. key = fields.StringField(max_length=44)
  303. created = fields.DateTimeField()
  304.  
  305. def __init__(self, *args, **kwargs):
  306. super().__init__(*args, **kwargs)
  307. if not self.key:
  308. self.key = self._generate_key()
  309.  
  310. @staticmethod
  311. def _generate_key():
  312. return binascii.hexlify(os.urandom(22)).decode()
  313.  
  314. def __unicode__(self):
  315. return self.key
  316.  
  317.  
  318.  
  319. class SessionHistory(Document):
  320. start_datetime = fields.DateTimeField(default=timezone.now)
  321. end_datetime = fields.DateTimeField(default=timezone.now)
  322. data_usage = fields.StringField()
  323. voucher = fields.ReferenceField(Voucher, reverse_delete_rule=CASCADE)
  324. device = fields.ReferenceField(Device, reverse_delete_rule=CASCADE)
  325. user = fields.ReferenceField(User, reverse_delete_rule=CASCADE)
Add Comment
Please, Sign In to add comment