from mod_python import apache, Session,util import md5 import os from string import Template import sys path = "" host = "" loginstring = """ Kirjautumispalvelu

$registerstatus



Rekisteröidy

""" registerstring = """ Kirjautumispalvelu




Login

""" class person: def __init__(self,nickname,name,password): self.nickname = nickname self.name = name self.password = password def __str__(self): return "%s|%s|%s"%(self.nickname,self.name,self.password) def getNickname(self): return self.nickname def comparePassword(self,password): temp = md5hash(password) for i in range(len(temp)): if temp[i] != self.password[i]: return False return True def setPassword(self,password): self.password = md5hash(password) def getPassword(self): return self.password def getName(self): return self.name def md5hash(str): hash = md5.new() hash.update(str) return hash.hexdigest() def index(req): util.redirect(req,host+"test.py") return apache.OK def handler(req): """ authentication handler """ req.content_type = "text/html" #toimintahakemisto ylös global path global host pathlist = req.filename.split("/") host = "http://"+req.hostname+req.uri[:-len(pathlist[-1])] path = os.path.join(os.path.dirname(req.filename)) form = util.FieldStorage(req) # tarkistetaan sessiossa auth key if req.session.has_key("auth"): # iJos käyttäjä haluaa kirjautua ulos if form.has_key("logout"): req.session["auth"] = 'false' req.session.save() if form.has_key("return"): util.redirect(req,"%s%s"%(host,form.getfirst("return"))) util.redirect(req,"%slogin.py"%host) # tarkistetaan onko käyttäjä tunnistettu if req.session["auth"] == 'true': return apache.OK users = readUsersFile() # tarksitetaan kirjautuminen if form.has_key("login"): for user in users: if user.getNickname() == form.getfirst("tunnus"): if user.comparePassword(form.getfirst("salasana")): req.session["auth"] = 'true' req.session["user"] = user.getNickname() req.session["name"] = user.getName() req.session.save() return apache.OK else: req.write(login("","","Salasana on virheellinen")) return apache.DONE req.write(login("","tunnusta ei löydy","")) return apache.DONE # Rekisteröinnin tarkistus if form.has_key("submitregistration"): str = checkRegistration(form,users) if str != "": req.write(str) return apache.DONE else: util.redirect(req, host+"login.py?register=successfull") #rekisteröinti if form.has_key("register"): if form.getfirst("register","") == "successfull": req.write(login("rekisteröinti onnistui","","")) return apache.DONE else: req.write(register("","","")) return apache.DONE #muuten kirjautumis sivulle req.write(login("","","")) return apache.DONE def readUsersFile(): """ reads users.txt and creates person instances of each user and returns list of thease instances""" list = [] file = open('%s/users.txt'%path,'r') for line in file: parsedstr = parse(line) if len(parsedstr) == 3: list.append(person(parsedstr[0],parsedstr[1],parsedstr[2].rstrip('\n'))) return list def saveUsers(users): file = open('%s/users.txt'%path,'w') for user in users: file.write('%s\n'%user) file.close() def checkNickname(nick): users = readUsersFile() for user in users: if user.getNickname() == nick: return False return True def checkPassword(password): if len(password) < 5: return False for i in range(len(password)): if password[i] == '|': return False return True def checkRegistration(form,users): if len(form.getfirst("tunnus","")) >= 5: if checkNickname(form.getfirst("tunnus")): if form.getfirst("nimi","") != "" : if checkPassword(form.getfirst("salasana")): if form.getfirst("salasana") ==form.getfirst("salasana2"): users.append(person(form.getfirst("tunnus"),form.getfirst("nimi"),md5hash(form.getfirst("salasana")))) saveUsers(users) return "" else: return register("","","Salasanat eivät täsmää") else: return register("","","Salasanan tulee olla yli 5 merkkiä ja siinä ei saa olla |-merkkiä") else: return register("","Nimi kenttä ei saa olla tyhjä","") else: return register("Käyttäjätunnus on jo käytössä","","") else: return register("Käyttäjätunnuksen tulee ollva vähintään 5 merkkiä pitkä","","") def parse(str): return str.split('|') def login(register,tvirhe,svirhe): tmp = Template(loginstring) return tmp.substitute(registerstatus = register,tunnusvirhe = tvirhe,salasanavirhe = svirhe) def register(tvirhe,nvirhe,svirhe): tmp = Template(registerstring) return tmp.substitute(tunnusvirhe = tvirhe,nimivirhe = nvirhe,salasanavirhe = svirhe)