Guest User

Untitled

a guest
May 29th, 2018
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.12 KB | None | 0 0
  1. from pyramid.view import view_config
  2. from pyramid.renderers import get_renderer
  3. from pyramid.httpexceptions import HTTPFound
  4. from pyramid.security import remember
  5. from pyramid.security import forget
  6. from pyramid.security import authenticated_userid
  7. from pyramid_mailer import get_mailer, message
  8.  
  9. from ultima.models import transaction
  10. from ultima.models import DBSession
  11. from ultima.models import User
  12. from ultima.models import Game
  13. from ultima.models import Course
  14.  
  15. from sqlalchemy.orm.exc import NoResultFound
  16.  
  17. import bcrypt
  18. import re
  19.  
  20. #User system is to be rebuilt so that it uses built in authentication and authorization
  21. #SHOWS CURRENT USER OR USER WITH GIVEN ID
  22. @view_config(route_name='user_show', renderer="../templates/user_show.pt")
  23. def show(request):
  24.     username = "Not logged in"
  25.     main = get_renderer("../templates/master.pt").implementation()
  26.     try:
  27.         username = authenticated_userid(request)
  28.         dbsession = DBSession()
  29.         user = dbsession.query(User).filter_by(username=username).one()
  30.         return {'test':'test', 'main':main, 'username':username, 'user':user}
  31.     except:
  32.         url=request.route_url('user_login')
  33.         return HTTPFound(location=url)
  34.  
  35. #REGISTER FORM RENDERER
  36. @view_config(route_name='user_register', request_method="GET", renderer="../templates/user_signup.pt")
  37. def register(request):
  38.     main = get_renderer('../templates/master.pt').implementation()
  39.     return {'project':'ultima', 'main':main, 'emailerror':'', 'passworderror':''}
  40.  
  41. #Signup FORM POST HANDLER
  42. @view_config(route_name='user_signup', request_method="POST", renderer="../templates/user_signup.pt")
  43. def signup(request):
  44.     #if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None: #email validation
  45.     main = get_renderer('../templates/master.pt').implementation()
  46.     username = request.params['username']
  47.     email = request.params['email']
  48.     emailverification = request.params['emailverification']
  49.     password = request.params['password']
  50.     passwordverification = request.params['passwordverification']    
  51.     emailerror = ""
  52.     passworderror = ""
  53.     errors = False
  54.     if password != passwordverification:
  55.         passworderror = "Passwords do not match"
  56.         errors = True
  57.     if len(password) < 6:
  58.         passworderror = "Password to short"
  59.         errors = True  
  60.     if email != emailverification:
  61.         emailerror = "Email do not match"
  62.         errors = True
  63.     if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None:
  64.         emailerror = "This is not a valid email address"
  65.         errors = True
  66.     if errors == False:
  67.         salt = bcrypt.gensalt()
  68.         hashed = bcrypt.hashpw(password, salt)
  69.         newuser = User(username, email, hashed, salt)
  70.         DBSession()
  71.         DBSession.add(newuser)
  72.     DBSession.flush()
  73.     transaction.commit()
  74.     mailer = get_mailer(request)
  75.     message = Message(subject="Welcome to discgolfus",
  76.                   sender="admin@discgolf.hjonsson.nu",
  77.                   recipients=[email],
  78.                   body="Welcome to discgolfus, you are now signed up. Enjoy the service!")
  79.     mailer.send(message)
  80.     request.session['user'] = username
  81.         url=request.route_url('user_show')
  82.    
  83.         return HTTPFound(location=url)
  84.        
  85.  
  86.     return {'firstname':firstname, 'project':'ultima', 'session':request.session, 'main':main, 'emailerror':emailerror, 'passworderror':passworderror}
  87.     session.flush()
  88.  
  89. #LOGIN FORM RENDERER
  90. @view_config(route_name='user_login', renderer="../templates/user_login.pt")
  91. def login(request):
  92.     if request.POST:
  93.     main = get_renderer('../templates/master.pt').implementation()
  94.     errors = False
  95.     username = request.params['username']
  96.     password = request.params['password']
  97.     if errors == False:
  98.         try:
  99.         session = DBSession()
  100.         user = session.query(User).filter_by(username=username).one()
  101.         except NoResultFound, e:
  102.         user = False
  103.         fail = "Bad username or password"
  104.         if user:
  105.         salt = user.password_salt
  106.         password_hash = bcrypt.hashpw(password, salt)
  107.         if password_hash == user.password_hash:
  108.             headers = remember(request, username)
  109.             fail = ""
  110.             url=request.route_url('home')
  111.             return HTTPFound(location=url, headers=headers)
  112.         else:
  113.             fail = "Bad username or password"
  114.     return {'project':'ultima', 'main':main, 'user':username, 'fail':fail}
  115.     else:
  116.     main = get_renderer('../templates/master.pt').implementation()
  117.     return {'request':request, 'project':'ultima', 'session':request.session, 'main':main, 'fail':""}
  118.  
  119. #SIGNOUT HANDLER
  120. @view_config(route_name='user_signout', request_method="GET", renderer="../templates/user_login.pt")
  121. def signout(request):
  122.     try:
  123.         headers = forget(request)
  124.         url=request.route_url('home')
  125.         return HTTPFound(location=url, headers = headers)
  126.     except KeyError:
  127.         pass
  128.     main = get_renderer('../templates/master.pt').implementation()
  129.     return {'request':request, 'project':'ultima', 'main':main, 'fail':''}
  130.    
  131. @view_config(route_name="user_mycourses", request_method="GET", renderer="../templates/user_mycourses.pt")
  132. def mycourses(request):
  133.     main = get_renderer("../templates/master.pt").implementation()
  134.     try:
  135.         username = authenticated_userid(request)
  136.     except:
  137.         url=request.route_url('user_login')
  138.         return HTTPFound(location=url)
  139.     try:
  140.         user = DBSession.query(User).filter_by(username=username).one()
  141.         courses = DBSession.query(Course).all()
  142.     except:
  143.         return {'main':main, 'courses':''}
  144.     return {'main':main, 'courses':courses}
  145.  
  146.  
  147. @view_config(route_name="user_mygames", request_method="GET", renderer="../templates/user_mygames.pt")
  148. def mygames(request):
  149.     main = get_renderer("../templates/master.pt").implementation()
  150.     try:
  151.         username = authenticated_userid(request)
  152.         user = DBSession.query(User.id).filter_by(username=username).one()
  153.         games = DBSession.query(Game).filter_by(owner=user[0])
  154.         return {'main':main, 'games':games}
  155.     except:
  156.         url=request.route_url('user_login')
  157.         return HTTPFound(location=url)
Add Comment
Please, Sign In to add comment