Added initial user registration, not very secure.

This commit is contained in:
Dorian 2013-05-29 08:45:17 -04:00
parent 22ccf88178
commit 40f792f3be
3 changed files with 54 additions and 16 deletions

View File

@ -8,8 +8,8 @@
<link rel="stylesheet" type="text/css" media="screen" href="{{ url_for('static', filename='css/bootstrap-responsive.css') }}" />
{# TODO Consider creating a white and blue theme or at least changeable themes for the site... #}
<link rel="stylesheet" type="text/css" media="screen" href="{{ url_for('static', filename='css/penguin-evening-theme.css') }}" />
<link rel="stylesheet" type="text/css" media="screen" href="http://openfontlibrary.org/face/Lavoir" />
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Raleway" />
{# <link rel="stylesheet" type="text/css" media="screen" href="http://openfontlibrary.org/face/Lavoir" />#}
{# <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Raleway" />#}
</head>
<body>
<script src="{{ url_for('static', filename='js/jquery-1.8.2.js') }}"></script>

View File

@ -7,14 +7,23 @@
{% if error %}
<div class="error_message">{{ error }}</div>
{% endif %}
<form action="{{ url_for('display_user_profile') }}" method="post">
{% if not registration and username is defined %}
<form action="{{ url_for('display_user_profile', username=username) }}" method="post">
{% else %}
<form action="{{ url_for('register_user') }}" method="post">
{% endif %}
<ul>
<li>Username: <input type="text" name="username" /></li>
<li>Email: <input type="text" name="email" /></li>
<li>Email: <input type="email" name="email" /></li>
<li>Full Name: <input type="text" name="user_full_name" /></li>
<li>Password: <input type="password" name="password" /></li>
<li><input type="submit" value="Login" /></li>
{% if registration %}
<li><input type="submit" value="Register" /></li>
{% else %}
<li><input type="submit" value="Update Profile" /></li>
{% endif %}
</ul>
</form>
</div>

View File

@ -31,7 +31,7 @@ import os
from rookeries.core.config import Config
from rookeries.core.database import db_session
from rookeries.core.models import User
from rookeries.core.security import check_password
from rookeries.core.security import check_password, generate_user_security_hash
app = Flask(__name__)
app.config.from_object(Config())
@ -101,15 +101,25 @@ def home_page():
return render_template("home.html", navigation=nav_menu, username=username)
def build_up_navigation_menu():
def build_up_navigation_menu(logged_in=False, username=None):
# TODO Make more dynamic.
# TODO Add in login and logout...
nav_map = [
{"title": "Home", "target_url": "/"},
{"title": "Login", "target_url": "/login"},
{"title": "FAQ", "target_url": "/docs/faq"},
{"title": "License", "target_url": "/docs/license"},
{"title": "Home", "target_url": url_for("home_page")},
{"title": "FAQ", "target_url": url_for("render_page_from_restructured_content", page="faq")},
{"title": "License", "target_url": url_for("render_page_from_restructured_content", page="license")},
]
if logged_in:
nav_map.append({"title": "Logout", "target_url": url_for("logout")})
nav_map.append({"title": "Edit User Profile", "target_url": url_for("display_user_profile", username=username)})
else:
nav_map.append({"title": "Login", "target_url": url_for("login")})
nav_map.append({"title": "Register User", "target_url": url_for("register_user")})
# TODO Add in tasks and project setup.
return nav_map
@ -130,28 +140,47 @@ def render_page_from_restructured_content(page="about_us"):
# Render the restructured text, but only retrieve the body itself.
code = Markup(markdown(rst_code, output_format="html5"))
# TODO Add in some login/logout logic... :S
nav_map = build_up_navigation_menu()
return render_template("layout.html", body_content=code, navigation=nav_map)
# Handle creation of users and editing of profiles
@app.route("/register")
@app.route("/register", methods=["GET", "POST"])
def register_user():
# TODO Consider adding a sign-up key
nav_map = build_up_navigation_menu()
nav_map = build_up_navigation_menu(False, None)
return render_template("user_profile.html", navigation=nav_map)
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
user_full_name = request.form["user_full_name"]
email = request.form["email"]
# TODO Add in validation of email... and status that requires email validation of user.
user = User(username=username, user_full_name=user_full_name, email=email)
hashed_password = generate_user_security_hash(user, password, Config.SITE_SECRET)
user.password = hashed_password
db_session.add(user)
db_session.commit()
# TODO Make something a bit nicer.
return render_template("user_profile.html", navigation=nav_map, registration=False)
else:
return render_template("user_profile.html", navigation=nav_map, registration=True)
# TODO Similair setup for editing the user profile
@app.route("/user/<username>")
def display_user_profile(username=None):
nav_map = build_up_navigation_menu()
nav_map = build_up_navigation_menu(True, username)
return render_template("user_profile.html", navigation=nav_map)
return render_template("user_profile.html", navigation=nav_map, registration=False)
# TODO Add in show_tasks or show_projects