"""
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)