#!/usr/bin/env python # -*- coding: utf-8 -*- # WWW-sovellukset TJTA270 Vt4 Taso 5 # http://appro.mit.jyu.fi/sovellukset/vt/vt4/ # (C) Esa-Matti Suuronen ''' Created on Feb 7, 2010 @author: epeli ''' import os.path import md5 from run import USER_DB class User(object): def __init__(self, username, name, password_hash=None, password=None, ): self.username = username self.name = name if not password_hash and not password: raise TypeError("password or password_hash is required") if password: self.set_password(password) if password_hash: self.password_hash = password_hash def __str__(self): return "%s|%s|%s" % (self.username, self.name, self.password_hash) def __repr__(self): return "<%s \"%s\" %s>" % (self.__class__.__name__, self.name, self.username) def set_password(self, password): self.password_hash = self._create_hash(password) def _create_hash(self, password): return md5.new(password).hexdigest() def auth(self, password): return self.password_hash == self._create_hash(password.strip()) class UserDBException(Exception): pass class UserDB(object): users = {} def __init__(self, filename=USER_DB): this_dir = os.path.dirname(__file__) self.filepath = os.path.join(this_dir, filename) self._read_file() def _read_file(self): dbfile = open(self.filepath, "r") for line in dbfile: line = line.strip() if line.startswith("#") or not line: continue user = User(*line.strip().split("|")) self.users[user.username] = user def add_user(self, user): if self.users.has_key(user.username): raise UserDBException("User %s already exists!" % user.username) self.users[user.username] = user f = open(self.filepath, "a") f.write(str(user) + "\n") def has_user(self, username): return self.users.has_key(username) def save(self): """ Tartteisi lukkoja, mutta ehka tassa ei viela yhdenaikaisuutta tartte ottaa huomioon... """ f = open(self.filepath, "w") for user in self.users.values(): f.write(str(user) + "\n") f.close() def get_user(self, username): return self.users[username] def auth(self, username, password): print "LOGIN", username, password user = self.users[username] return user.auth(password) if __name__ == "__main__": u = UserDB() print u.users u.users.values()[0].set_password("tjta270") u.save()