import json from datetime import date from sqlalchemy import ( Column, Integer, String, Boolean, Date, Enum ) from model import Base class User(Base): __tablename__ = 'accounts' name = Column(String(24), primary_key=True, unique=True) password = Column(String(10)) ip = Column(String(16)) register_date = Column(Date()) last_on = Column(Date()) loggedin = Column(Boolean()) vip = Column(Integer()) level = Column(Integer()) kills = Column(Integer()) deaths = Column(Integer()) money = Column(Integer()) score = Column(Integer()) skin = Column(Integer()) useskin = Column(Enum('0', '1')) times_on_server = Column(Integer()) horseshoe = Column(Integer()) bank = Column(Integer()) gang_bank = Column(Integer()) pmoff = Column(Boolean()) weed = Column(Integer()) gang = Column(Integer()) condoms = Column(Integer()) first_time = Column(Boolean()) def __init__(self, name, password, **kwargs): super(User, self).__init__(**kwargs) self.name = name self.password = self.password_hash(password) self.register_date = kwargs.get('register_date', date.today()) self.last_on = kwargs.get('last_on', date.today()) def to_json(self): return json.dumps({'player': self.to_dict()}) def to_dict(self): return { 'name': self.name, 'score': self.score, 'money': self.money, 'level': self.level, 'vip': self.vip, 'register_date': str(self.register_date), 'last_on': str(self.last_on), 'loggedin': self.loggedin, 'kills': self.kills, 'deaths': self.deaths, 'ratio': '{:.3f}'.format(self.kills / float(self.deaths)) if self.deaths else 0, 'times_on_server': self.times_on_server, } def auth(self, password): return self.password_hash(password) == int(self.password) @staticmethod def password_hash(password): s1 = 1 s2 = 0 for n in password: s1 = (s1 + ord(n)) % 65521 s2 = (s2 + s1) % 65521 return (s2 << 16) + s1