spacepaste

  1.  
  2. import json
  3. from datetime import date
  4. from sqlalchemy import (
  5. Column, Integer, String, Boolean, Date, Enum
  6. )
  7. from model import Base
  8. class User(Base):
  9. __tablename__ = 'accounts'
  10. name = Column(String(24), primary_key=True, unique=True)
  11. password = Column(String(10))
  12. ip = Column(String(16))
  13. register_date = Column(Date())
  14. last_on = Column(Date())
  15. loggedin = Column(Boolean())
  16. vip = Column(Integer())
  17. level = Column(Integer())
  18. kills = Column(Integer())
  19. deaths = Column(Integer())
  20. money = Column(Integer())
  21. score = Column(Integer())
  22. skin = Column(Integer())
  23. useskin = Column(Enum('0', '1'))
  24. times_on_server = Column(Integer())
  25. horseshoe = Column(Integer())
  26. bank = Column(Integer())
  27. gang_bank = Column(Integer())
  28. pmoff = Column(Boolean())
  29. weed = Column(Integer())
  30. gang = Column(Integer())
  31. condoms = Column(Integer())
  32. first_time = Column(Boolean())
  33. def __init__(self, name, password, **kwargs):
  34. super(User, self).__init__(**kwargs)
  35. self.name = name
  36. self.password = self.password_hash(password)
  37. self.register_date = kwargs.get('register_date', date.today())
  38. self.last_on = kwargs.get('last_on', date.today())
  39. def to_json(self):
  40. return json.dumps({'player': self.to_dict()})
  41. def to_dict(self):
  42. return {
  43. 'name': self.name,
  44. 'score': self.score,
  45. 'money': self.money,
  46. 'level': self.level,
  47. 'vip': self.vip,
  48. 'register_date': str(self.register_date),
  49. 'last_on': str(self.last_on),
  50. 'loggedin': self.loggedin,
  51. 'kills': self.kills,
  52. 'deaths': self.deaths,
  53. 'ratio': '{:.3f}'.format(self.kills / float(self.deaths)) if self.deaths else 0,
  54. 'times_on_server': self.times_on_server,
  55. }
  56. def auth(self, password):
  57. return self.password_hash(password) == int(self.password)
  58. @staticmethod
  59. def password_hash(password):
  60. s1 = 1
  61. s2 = 0
  62. for n in password:
  63. s1 = (s1 + ord(n)) % 65521
  64. s2 = (s2 + s1) % 65521
  65. return (s2 << 16) + s1
  66.