Skip to content

Instantly share code, notes, and snippets.

@felipecruz
Last active August 29, 2015 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felipecruz/10554112 to your computer and use it in GitHub Desktop.
Save felipecruz/10554112 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import six
import re
import hashlib
try:
from urllib2 import urlopen
except:
from urllib.request import urlopen
from datetime import datetime, timedelta
from coopy.base import init_persistent_system
from flask import (Flask, request, redirect, render_template, jsonify, session,
url_for)
from flask.ext.login import LoginManager, login_user, logout_user
from flask.ext.login import UserMixin
try:
from decouple import ConfigIni
except:
from decouple import Config as ConfigIni
from domain import make_text_item, List, Tree, DATE_FORMAT
from users import User, Realm, UserWrapper
import logging
log = logging.getLogger(__name__)
config = ConfigIni('settings.ini')
app = Flask(__name__)
app.secret_key = config('SECRET_KEY').encode('utf-8')
app.logger.addHandler(logging.StreamHandler())
login_manager = LoginManager()
login_manager.session_protection = "strong"
login_manager.init_app(app)
users = init_persistent_system(Realm('users'))
sha1 = lambda p: hashlib.sha1(p).hexdigest()
class UserWrapper(UserMixin):
def __init__(self, name, id, active=True):
self.name = name
self.id = name
self.active = active
def is_active(self):
# Here you should write whatever the code is
# that checks the database if your user is active
return self.active
def is_anonymous(self):
return False
def is_authenticated(self):
return True
def User(username, password, profile={}):
return dict(username=username,
password=sha1(password),
profile=profile)
class Realm(object):
def __init__(self, name):
self.name = name
self.users = {}
def add_user(self, user):
username = user['username']
password = user['password']
self.users[username] = user
return user
def authenticate(self, username, password):
if not username in self.users:
return None
realm_user = self.users[username]
if realm_user['password'] == sha1(password):
return True
return False
@app.route('/user/create', methods=['POST'])
def user_create():
username = request.form['username']
password = request.form['password']
if username and password:
users.add_user(User(username, password))
login_user(load_user(username))
return redirect('/')
@app.route('/logout')
def logout():
logout_user()
return redirect('/')
@app.route('/user/login')
def login_form():
post_url = '/login'
return render_template('login.html', post_url=post_url)
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
if authenticate(username, password):
login_user(load_user(username))
return redirect('/')
@login_manager.user_loader
def load_user(userid):
user = users.users[userid]
return UserWrapper(userid, userid, active=True)
def authenticate(username, password):
return users.authenticate(username, password)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment