Last active
August 29, 2015 13:59
-
-
Save felipecruz/10554112 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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