Added initial user registration, not very secure.
This commit is contained in:
parent
22ccf88178
commit
40f792f3be
|
@ -8,8 +8,8 @@
|
||||||
<link rel="stylesheet" type="text/css" media="screen" href="{{ url_for('static', filename='css/bootstrap-responsive.css') }}" />
|
<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... #}
|
{# 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="{{ 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" 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" href="http://fonts.googleapis.com/css?family=Raleway" />#}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script src="{{ url_for('static', filename='js/jquery-1.8.2.js') }}"></script>
|
<script src="{{ url_for('static', filename='js/jquery-1.8.2.js') }}"></script>
|
||||||
|
|
|
@ -7,14 +7,23 @@
|
||||||
{% if error %}
|
{% if error %}
|
||||||
<div class="error_message">{{ error }}</div>
|
<div class="error_message">{{ error }}</div>
|
||||||
{% endif %}
|
{% 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>
|
<ul>
|
||||||
<li>Username: <input type="text" name="username" /></li>
|
<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>Full Name: <input type="text" name="user_full_name" /></li>
|
||||||
|
|
||||||
<li>Password: <input type="password" name="password" /></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>
|
</ul>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -31,7 +31,7 @@ import os
|
||||||
from rookeries.core.config import Config
|
from rookeries.core.config import Config
|
||||||
from rookeries.core.database import db_session
|
from rookeries.core.database import db_session
|
||||||
from rookeries.core.models import User
|
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 = Flask(__name__)
|
||||||
app.config.from_object(Config())
|
app.config.from_object(Config())
|
||||||
|
@ -101,15 +101,25 @@ def home_page():
|
||||||
return render_template("home.html", navigation=nav_menu, username=username)
|
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 Make more dynamic.
|
||||||
# TODO Add in login and logout...
|
# TODO Add in login and logout...
|
||||||
nav_map = [
|
nav_map = [
|
||||||
{"title": "Home", "target_url": "/"},
|
{"title": "Home", "target_url": url_for("home_page")},
|
||||||
{"title": "Login", "target_url": "/login"},
|
{"title": "FAQ", "target_url": url_for("render_page_from_restructured_content", page="faq")},
|
||||||
{"title": "FAQ", "target_url": "/docs/faq"},
|
{"title": "License", "target_url": url_for("render_page_from_restructured_content", page="license")},
|
||||||
{"title": "License", "target_url": "/docs/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
|
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.
|
# Render the restructured text, but only retrieve the body itself.
|
||||||
code = Markup(markdown(rst_code, output_format="html5"))
|
code = Markup(markdown(rst_code, output_format="html5"))
|
||||||
|
# TODO Add in some login/logout logic... :S
|
||||||
nav_map = build_up_navigation_menu()
|
nav_map = build_up_navigation_menu()
|
||||||
|
|
||||||
return render_template("layout.html", body_content=code, navigation=nav_map)
|
return render_template("layout.html", body_content=code, navigation=nav_map)
|
||||||
|
|
||||||
|
|
||||||
# Handle creation of users and editing of profiles
|
# Handle creation of users and editing of profiles
|
||||||
@app.route("/register")
|
@app.route("/register", methods=["GET", "POST"])
|
||||||
def register_user():
|
def register_user():
|
||||||
# TODO Consider adding a sign-up key
|
# 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
|
# TODO Similair setup for editing the user profile
|
||||||
@app.route("/user/<username>")
|
@app.route("/user/<username>")
|
||||||
def display_user_profile(username=None):
|
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
|
# TODO Add in show_tasks or show_projects
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue