From ac7633d8149a28af288ac0b850850cef9b13c151 Mon Sep 17 00:00:00 2001 From: sjtufs Date: Sun, 25 Aug 2013 15:45:55 +0800 Subject: This is alpha --- server/piztor/exc.py | 17 ----------- server/piztor/import.py | 44 --------------------------- server/piztor/model.py | 79 ------------------------------------------------- 3 files changed, 140 deletions(-) delete mode 100644 server/piztor/exc.py delete mode 100644 server/piztor/import.py delete mode 100644 server/piztor/model.py (limited to 'server/piztor') diff --git a/server/piztor/exc.py b/server/piztor/exc.py deleted file mode 100644 index 2c53dbf..0000000 --- a/server/piztor/exc.py +++ /dev/null @@ -1,17 +0,0 @@ -class PiztorError(Exception): - pass - -class DBCurruptedError(PiztorError): - pass - -class ConnectionError(PiztorError): - pass - -class ReqReadError(ConnectionError): - pass - -class BadReqError(ConnectionError): - pass - -class BadTokenError(ConnectionError): - pass diff --git a/server/piztor/import.py b/server/piztor/import.py deleted file mode 100644 index 1521849..0000000 --- a/server/piztor/import.py +++ /dev/null @@ -1,44 +0,0 @@ -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker -from model import * - -path = "piztor.sqlite" - -class UserData: - def __init__(self, username, password, sex): - self.username = username - self.password = password - self.sex = sex - -def create_database(): - engine = create_engine('sqlite:///' + path, echo = True) - Base.metadata.drop_all(engine) - Base.metadata.create_all(engine) - -def import_user_data(data): - engine = create_engine('sqlite:///' + path, echo = True) - Session = sessionmaker(bind = engine) - session = Session() - for user in data: - um = UserModel(username = user.username, sex = user.sex) - um.auth = UserAuth(user.password) - um.location = LocationInfo(lat = 0, lng = 0) - session.add(um) - session.commit() - -if __name__ == '__main__': - - from sys import argv, exit - if len(argv) != 2: - print "Usage: " + argv[0] + " FILE" - exit(0) - - data = list() - with open(argv[1], 'r') as f: - while True: - line = f.readline().split() - if len(line) == 0: break - data.append(UserData(line[0], line[1], line[2])) - - create_database() - import_user_data(data) diff --git a/server/piztor/model.py b/server/piztor/model.py deleted file mode 100644 index 70ca431..0000000 --- a/server/piztor/model.py +++ /dev/null @@ -1,79 +0,0 @@ -from sqlalchemy import Column, Integer, String, Float, ForeignKey, LargeBinary, Boolean -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relationship, backref - -Base = declarative_base() - -_SALT_LEN = 16 -_TOKEN_LEN = 16 - -class _TableName: # avoid typoes - UserModel = 'users' - LocationInfo = 'location_info' - UserAuth = 'user_auth' - -class UserModel(Base): - __tablename__ = _TableName.UserModel - - id = Column(Integer, primary_key = True) - username = Column(String) - sex = Column(Boolean) - location = None - auth = None - -class LocationInfo(Base): - __tablename__ = _TableName.LocationInfo - - uid = Column(Integer, ForeignKey('users.id'), primary_key = True) - lat = Column(Float(precesion = 64)) - lng = Column(Float(precesion = 64)) - user = relationship("UserModel", uselist = False, - backref = backref("location", uselist = False, - cascade = "all, delete-orphan")) - - # More: last_update - -from hashlib import sha256 -from os import urandom - -def _sprinkle_salt(uauth, passwd): - data = sha256(uauth.salt) - data.update(chr(0)) - data.update(passwd) - return data.digest() - -def _random_binary_string(length): - return urandom(length) - -class UserAuth(Base): - __tablename__ = _TableName.UserAuth - - uid = Column(Integer, ForeignKey('users.id'), primary_key = True) - password = Column(LargeBinary) - salt = Column(LargeBinary) - token = Column(LargeBinary) - - user = relationship("UserModel", uselist = False, - backref = backref("auth", uselist = False, - cascade = "all, delete-orphan")) - - def regen_token(self): - self.token = sha256(_random_binary_string(_TOKEN_LEN)).digest() - - def __init__(self, passwd): - self.set_password(passwd) - - def set_password(self, passwd): - self.salt = _random_binary_string(_SALT_LEN) - self.password = _sprinkle_salt(self, passwd) - self.regen_token() - - def check_password(self, passwd): - passwd = _sprinkle_salt(self, passwd) - return passwd == self.password - - def check_token(self, tk): - return self.token == tk - - def get_token(self): - return self.token -- cgit v1.2.3