Sfoglia il codice sorgente

Get hash from signing the user and store in cookie

https
jakobsn 6 anni fa
parent
commit
88667a300a
3 ha cambiato i file con 45 aggiunte e 2 eliminazioni
  1. +1
    -1
      README.md
  2. +3
    -1
      src/app/views/app.py
  3. +41
    -0
      src/app/views/login.py

+ 1
- 1
README.md Vedi File

@@ -53,7 +53,7 @@ Edit src/app/models/database.py to point at local server






Run app
###Run app


$ cd src/app/ $ cd src/app/




+ 3
- 1
src/app/views/app.py Vedi File

@@ -1,3 +1,4 @@
import os
import web import web
from views.utils import get_nav_bar from views.utils import get_nav_bar
from views.login import Login from views.login import Login
@@ -8,7 +9,7 @@ from views.new_project import New_project
from views.open_projects import Open_projects from views.open_projects import Open_projects
from views.project import Project from views.project import Project
from views.index import Index from views.index import Index
#from views.apply import Apply


# Define application routes # Define application routes
urls = ( urls = (
@@ -20,6 +21,7 @@ urls = (
'/open_projects', 'Open_projects', '/open_projects', 'Open_projects',
'/project', 'Project', '/project', 'Project',
'/admin', 'Admin', '/admin', 'Admin',
'/apply', 'Apply',
) )
# Initialize application using the web py framework # Initialize application using the web py framework


+ 41
- 0
src/app/views/login.py Vedi File

@@ -2,12 +2,20 @@ import web
from views.forms import login_form from views.forms import login_form
import models.login import models.login
from views.utils import get_nav_bar from views.utils import get_nav_bar
import os, hmac, base64, pickle, hashlib
from io import StringIO


# Get html templates # Get html templates
render = web.template.render('templates/') render = web.template.render('templates/')




class Login(): class Login():


# Get the server secret to perform signatures
secret = web.config.get('session_parameters')['secret_key']


def GET(self): def GET(self):
""" """
Show the login page Show the login page
@@ -20,6 +28,9 @@ class Login():
else: else:
friends = [[],[]] friends = [[],[]]
nav = get_nav_bar(session) nav = get_nav_bar(session)
if 1 == 1:
print(web.cookies())

return render.login(nav, login_form, friends) return render.login(nav, login_form, friends)


def POST(self): def POST(self):
@@ -36,8 +47,38 @@ class Login():
friends = models.login.get_users() friends = models.login.get_users()
session.username = user[0][1] session.username = user[0][1]
session.userid = user[0][0] session.userid = user[0][0]
print('remember me')
web.setcookie('remember', self.rememberme())
else: else:
friends = [[],[]] friends = [[],[]]
nav = get_nav_bar(session) nav = get_nav_bar(session)
return render.login(nav, login_form, friends) return render.login(nav, login_form, friends)


def rememberme(self):
session = web.ctx.session
creds = [session.username , self.sign() ]
print(creds)
return base64.b64encode(pickle.dumps(creds))

def sign(self):
session = web.ctx.session
return self.sign_username(session.username)

@classmethod
def sign_username(self, username):
secret = base64.b64decode(self.secret)
print(username)
return hmac.HMAC(secret, username.encode('utf-8')).hexdigest()
@classmethod
def valid_rememberme(self, cookie):
userame, userid, sign = pickle.load(StringIO.StringIO(base64.b64decode(cookie)))
if User.sign_username(user) == sign:
return True
return False
@classmethod
def from_rememberme(self, cookie):
user, sign= pickle.load(StringIO.StringIO(base64.b64decode(cookie)))
return user

Loading…
Annulla
Salva