from pyramid.view import ( view_config, forbidden_view_config, ) from pyramid.httpexceptions import HTTPFound from pyramid.security import remember, forget from ..services.user import UserService from ..services.blog_record import BlogRecordService from ..forms import UserCreateForm from ..models.user import User @view_config(route_name='home', renderer='cao_blogr:templates/home.jinja2') def home(request): # get the last created posts last_ten = BlogRecordService.get_last_created(request) return { 'page_title': "Bienvenue sur mon blog", 'last_ten': last_ten, } @view_config(route_name='apropos', renderer='cao_blogr:templates/apropos.jinja2') def apropos(request): return { 'page_title': "A propos", } @view_config(route_name='login', renderer='cao_blogr:templates/login.jinja2') @forbidden_view_config(renderer='cao_blogr:templates/login.jinja2') def login(request): username = '' login_url = request.route_url('login') referrer = request.url if referrer == login_url: referrer = '/' # never use the login form itself as came_from came_from = request.params.get('came_from', referrer) username = request.POST.get('username') userpwd = request.POST.get('password') if username: user = UserService.by_name(request, username) if user and user.verify_password(userpwd): headers = remember(request, username) request.session.flash("Bienvenue %s !" % username, 'success') return HTTPFound(location=came_from, headers=headers) else: headers = forget(request) request.session.flash("Login et mot de passe invalides. La connexion a échoué.", "danger") return { 'page_title': "", 'came_from': came_from, 'login_url': login_url, } @view_config(route_name='logout', renderer='string') def logout(request): username = request.authenticated_userid headers = forget(request) request.session.flash('Au revoir ' + username + ' !', 'success') return HTTPFound(location=request.route_url('home'), headers=headers) @view_config(route_name='users', renderer='cao_blogr:templates/users.jinja2', permission='manage') def users(request): # get all users users = UserService.all(request) return { 'page_title': "Liste des utilisateurs", 'users': users } @view_config(route_name='user_add', renderer='cao_blogr:templates/user_add.jinja2', permission='manage') def user_add(request): name = request.matchdict['name'] # nouveau form = UserCreateForm(request.POST) if 'form.submitted' in request.params and form.validate(): # créer nouveau new_user = User(name=form.username.data) new_user.set_password(form.password.data.encode('utf8')) request.dbsession.add(new_user) return HTTPFound(location=request.route_url('users')) return { 'page_title': 'Nouvel utilsateur', 'form': form, 'name': name, } @view_config(route_name='user_pwd', renderer='cao_blogr:templates/user_pwd.jinja2', permission='manage') def user_pwd(request): # reset password or delete user name = request.matchdict['name'] # lire la fiche du membre entry = UserService.by_name(request, name) if not entry: request.session.flash(u"Utilisateur non trouvé : %s" % name, 'warning') return HTTPFound(location=request.route_url('users')) if 'form.submitted' in request.params: mdp = request.params["new_password"] entry.set_password(mdp.encode('utf8')) return HTTPFound(location=request.route_url('users')) if 'form.deleted' in request.params: UserService.delete(request, entry.id) request.session.flash("La fiche a été supprimée avec succès.", 'success') return HTTPFound(location=request.route_url('users')) return { 'page_title': "Utilisateur : %s" %(entry.name), 'entry': entry, }