Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- from datetime import datetime
- import cherrypy as cp
- class User:
- def __init__(self, pseudo, password, first):
- self.pseudo, self.password = pseudo, password
- self.first = self.last = first
- USERS = { 'admin' : User('admin', 'admin', datetime.now()) }
- HTML = {
- "base" : '<html><body>{body}</body></html>',
- "login" : ( '<h3>Inscription :</h3>'
- '<form action="/login" method="post">'
- '<input type="text" name="pseudo" /><br />'
- '<input type="password" name="password" /><br />'
- '<input type="password" name="confirm" /><br />'
- '<input type="submit" value="Inscription" /></form>'
- '<hr /><h3>Connexion :</h3>'
- '<form action="/login" method="post">'
- '<input type="text" name="pseudo" /><br />'
- '<input type="password" name="password" /><br />'
- '<input type="submit" value="Connexion" /></form>' ),
- "user" : ( '<p>{pseudo}, inscrit {first}.'
- '<em>Dernière connexion {last}.</em><p>'
- '<p><a href="/logout">logout...</a></p>' )
- }
- class App:
- @cp.expose
- def index(self):
- # 'current_user' vaut None si l'utilisateur n'est pas connecté,
- # sinon il vaudra une instance de la classe 'User'.
- current_user = cp.session.get('user')
- if current_user:
- return self.user(current_user)
- # si l'utilisateur n'est pas connecté, on force la redirection vers
- # la page d'inscription/connexion (c'est bon pour les stats...) :p
- raise cp.HTTPRedirect('/login')
- @cp.expose
- def login(self, pseudo=None, password=None, confirm=None):
- "Gestion minimaliste des formulaire d'inscription/connexion."
- # si 'pseudo' et 'password' sont définis, un des 2 formulaires a été
- # soumit
- if pseudo and password:
- now = datetime.now() # la date de la connexion en cours..
- # si 'password' vaut 'confirm', c'est le formulaire d'inscription
- # qui a été soumit
- if password == confirm:
- # il faut donc créer un nouvel utilisateur
- USERS[pseudo] = User(pseudo, password, now)
- if pseudo in USERS and USERS[pseudo].password == password:
- # après avoir vérifié que l'utilisateur existe et que le mot
- # de passe est correcte, on met à jour la date de dernière
- # connexion...
- user = USERS[pseudo]
- user.last = now
- # ...et on garde l'instance de l'utilisateur dans le fichier
- # de la session courante (ou en mémoire, c'est pareil)
- cp.session['user'] = user
- raise cp.HTTPRedirect('/')
- # si le formulaire n'a pas été soumit, ou s'il y a eu une erreur (mot
- # de passe ou pseudo erroné), on affiche simplement les formulaires
- return HTML['base'].format(body=HTML['login'])
- @cp.expose
- def logout(self):
- # pour déconnecter un utilisateur, il suffit de faire expirer sa
- # session
- cp.lib.sessions.expire()
- raise cp.HTTPRedirect('/')
- def user(self, current_user):
- return HTML['base'].format(
- body=HTML['user'].format(
- pseudo=current_user.pseudo,
- first=current_user.first.strftime('le %d/%m/%Y à %H:%M'),
- last=current_user.last.strftime('le %d/%m/%Y à %H:%M')
- )
- )
- cp.config['tools.sessions.on'] = True # activer les sessions
- cp.quickstart(App(), '/')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement