From a4a012616c2938335516dcfafc1c6f56a4d9c4c9 Mon Sep 17 00:00:00 2001
From: Alex <constantingomez@icloud.com>
Date: Wed, 3 Nov 2021 17:47:25 +0000
Subject: [PATCH] Updated template with more features

---
 .gitignore                 |   1 +
 Procfile                   |   2 +-
 README.md                  |  48 ++++++++++++++++++++-
 app.py                     |  66 +++++++++++++++++++++++++---
 auth/__init__.py           |   0
 auth/constants.py          |  13 ++++++
 auth/ldap_auth.py          |  43 +++++++++++++++++++
 auth/ldap_handler.py       |  85 +++++++++++++++++++++++++++++++++++++
 blueprints/__init__.py     |   0
 blueprints/auth.py         |  23 ++++++++++
 blueprints/home.py         |  35 +++++++++++++++
 config/__init__.py         |  12 ++++++
 config/config.py           |  50 ++++++++++++++++++++++
 database/__init__.py       |   0
 database/db.py             |   3 ++
 models/__init__.py         |   0
 models/user.py             |  18 ++++++++
 requirements.txt           |   6 ++-
 static/img/python-logo.png | Bin 0 -> 50806 bytes
 templates/index.html       |  31 ++++++++++----
 templates/login.html       |  28 ++++++++++++
 21 files changed, 445 insertions(+), 19 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 auth/__init__.py
 create mode 100644 auth/constants.py
 create mode 100644 auth/ldap_auth.py
 create mode 100644 auth/ldap_handler.py
 create mode 100644 blueprints/__init__.py
 create mode 100644 blueprints/auth.py
 create mode 100644 blueprints/home.py
 create mode 100644 config/__init__.py
 create mode 100644 config/config.py
 create mode 100644 database/__init__.py
 create mode 100644 database/db.py
 create mode 100644 models/__init__.py
 create mode 100644 models/user.py
 create mode 100644 static/img/python-logo.png
 create mode 100644 templates/login.html

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..59ee0a5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+**/__pycache__/**
diff --git a/Procfile b/Procfile
index 244c130..bff65d4 100644
--- a/Procfile
+++ b/Procfile
@@ -1 +1 @@
-web: gunicorn app:app --log-file=-
+web: gunicorn app:app --log-file=-
\ No newline at end of file
diff --git a/README.md b/README.md
index a7a88e4..4647bea 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,47 @@
-## Imperial PaaS Template: Python Flask
+# Python3 Flask Template
 
-Get started with this Python Flask template.
+A started template for Flask web apps using **Python 3.8**. This started template includes:
+
+- Dynamic frontend templates (not React)
+- Database support
+- Imperial LDAP user authentication
+- Multiple environments (development and production)
+
+
+This template is useful if you would like to create a backend REST API, optionally coupled with a simple dynamic frontend.
+
+## Getting started
+
+Once you have created your new app, take a few minutes to look through the files to familiarise yourself with the project structure.
+
+- `app.py` : entry point to the Flask app
+- `templates/` : contains the frontend dynamic HTML files
+- `static/` : contains the static frontend assets (images, stylesheets and scripts)
+- `blueprints/` : contains all the application routes
+- `models/` : contains all the database models
+- `database/` : contains the database creation
+- `config/` : contains the app settings for the different environments
+
+**The first change you should make** is to set the `APP_NAME` variable in `config/config.py` to whatever you app's name is.
+
+To start the application locally, you can just run `python3 app.py` and this will launch the app on port 5000 (by default).
+You will notice a message in the console saying: 
+
+`WARNING: Could not connect to the given database URL!`
+
+To fix this, you should set the environment variable DATABASE_URL accordingly. If you have PostgreSQL running locally, you can use that. Alternatively, you could use SQLite which is much simpler and does not require installation.
+
+If you do not want to use a database yet, you can ignore this warning and delete any routes that interact with the database.
+
+If you navigate to `http://localhost:5000`, you will see the response created by the route defined in `blueprints/home.py`.
+
+You will also notice the lines `Environment: production` and `Debug mode: off` when the Flask application starts in the console. To enable debug mode, you must set the environment variable `ENV` to `dev`, ie: `export ENV=dev` (see `config/config.py` for more details on different environments).
+
+## Tutorial 1: Adding a new route
+
+
+
+## Tutorial 2: Adding database interaction
+
+
+## Tutorial 3: Configuring a test environment
\ No newline at end of file
diff --git a/app.py b/app.py
index 566010b..709de36 100644
--- a/app.py
+++ b/app.py
@@ -1,15 +1,69 @@
-from flask import Flask, render_template
+from flask import Flask, send_from_directory, url_for
 
+from database.db import db
+from config.config import APP_NAME, ENV, get_app_config, get_static_url
 
-app = Flask(__name__)
+# Create and configure our Flask app
+app = Flask(__name__, static_url_path=get_static_url())
+app.url_map.strict_slashes = False
+app.config.from_object(get_app_config())
 
+db.init_app(app)
 
-@app.route('/')
-def index():
-    return render_template('index.html')
+# uri = os.getenv("DATABASE_URL")  # or other relevant config var
+# print(uri)
 
+# # if uri and uri.startswith("postgres://"):
+# #     uri = uri.replace("postgres://", "postgresql://", 1)
 
+# #     app.config["SQLALCHEMY_DATABASE_URI"] = uri
+# #     db = SQLAlchemy(app)
 
+# #     db.create_all()
 
+# #     if db.session.query(User).filter_by(username="testuser").first() is not None:
+# #         db.session.add(User(username='testuser', email='admin@example.com'))
+# #         db.session.commit()
 
-if __name__ == '__main__': app.run(debug=True)
\ No newline at end of file
+# #     if db.session.query(Entity).filter_by(username="my entity").first() is not None:
+# #         db.session.add(Entity(username='my entity', email='entity@example.com'))
+# #         db.session.commit()
+
+# # else:
+# #     print("No database created/linked with this application")
+
+
+# Serve all static assets for the frontend
+@app.route('/static/<path:path>')
+def serve_static_files(path):
+    return send_from_directory('static', path)
+
+
+# Register all routes from the blueprints module
+from blueprints.home import home_blueprint
+from blueprints.auth import auth_blueprint
+app.register_blueprint(home_blueprint)
+app.register_blueprint(auth_blueprint)
+
+# @app.route('/test-db')
+# def test_db():
+#     try:
+#         rows = ""
+
+#         for user in db.session.query(User).all():
+#             rows += str(user) + " "
+
+#         for e in db.session.query(Entity).all():
+#             rows += str(e) + " "
+
+#         print("All rows:", rows)
+#         return rows
+#     except:
+#         return "App database error"
+
+# Hook any custom Jinja templating functions
+from config import CUSTOM_TEMPLATE_FUNCTIONS
+app.jinja_env.globals.update(CUSTOM_TEMPLATE_FUNCTIONS)
+
+if __name__ == '__main__':
+    app.run()
\ No newline at end of file
diff --git a/auth/__init__.py b/auth/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/auth/constants.py b/auth/constants.py
new file mode 100644
index 0000000..bd47363
--- /dev/null
+++ b/auth/constants.py
@@ -0,0 +1,13 @@
+# LDAP server config
+LDAP_URL = "ldaps://ldaps-vip.cc.ic.ac.uk:636"
+LDAP_DN = "OU=Users,OU=Imperial College (London),DC=ic,DC=ac,DC=uk"
+
+# Relevant IC LDAP attributes
+TITLE = "extensionAttribute6"
+NAME = "givenName"
+SURNAME = "sn"
+DN = "distinguishedName"
+MEMBERSHIPS = "memberOf"
+
+# List of attributes to be parsed into dictionaries
+ATTRIBUTES_TO_SERIALISE = [DN, MEMBERSHIPS]
\ No newline at end of file
diff --git a/auth/ldap_auth.py b/auth/ldap_auth.py
new file mode 100644
index 0000000..f7a1cd7
--- /dev/null
+++ b/auth/ldap_auth.py
@@ -0,0 +1,43 @@
+from .constants import *
+from .ldap_handler import ldap_service
+
+WHITE_LIST = ["ictsec"]
+
+
+def ldap_login(username, password):
+    """
+    Perform (a) LDAP authentication and (b) additional (app specific) verifications
+    before granting access and returning the user LDAP attributes 'name, surname, title and memberships'.
+    """
+    ldap_attributes = ldap_service.ldap_login(
+        username, password, query_attrs=(TITLE, NAME, SURNAME, DN, MEMBERSHIPS)
+    )
+    return custom_authentication_checks(username, ldap_attributes)
+
+
+def custom_authentication_checks(username, ldap_attributes):
+    # ADD HERE CUSTOM HIGHER-LEVEL CHECKS
+    # e.g.:
+    #
+    # if 'doc' not in dict_attrs[DN]['OU']: # is 'doc' in the organisation sub-attribute?
+    #     if 'doc-all-students' not in dict_attrs[MEMBERSHIPS]['CN']: # is 'doc-all-students' among the memberships?
+    #         raise ldap.INVALID_CREDENTIALS # raise INVALID_CREDENTIALS exception
+    return ldap_attributes
+
+
+# To enforce a distinction between "student" and "staff", the `ldap_constant_TITLE` ldap attribute is
+# requested (see above) and associated to the user model. The following decorator is then an example
+# on how to leverage the title to implement title-based access (where DEFAULT_REDIRECTION is assigned
+# a convenient application route).
+# For inspiration on how to implement title-based access, refer to emarking's source code:
+#   https://gitlab.doc.ic.ac.uk/edtech/emarking
+#
+# def role_required(access_role, redirection_url=None):
+#     def decorator(f):
+#         @wraps(f)
+#         def decorated_function(*args, **kwargs):
+#             if current_user.title == access_role:
+#                 return f(*args, **kwargs)
+#             return redirect(url_for(redirection_url or DEFAULT_REDIRECTION))
+#         return decorated_function
+#     return decorator
diff --git a/auth/ldap_handler.py b/auth/ldap_handler.py
new file mode 100644
index 0000000..855af32
--- /dev/null
+++ b/auth/ldap_handler.py
@@ -0,0 +1,85 @@
+import itertools
+import re
+from collections import defaultdict
+
+from .constants import *
+import ldap
+
+# Used to parse key-value LDAP attributes
+KEY_VAL_ATT_REGEX = "([A-Za-z0-9]+)=([A-Za-z0-9-@]+)"
+USERNAME_FILTER_TEMPLATE = "(&(objectClass=user)(sAMAccountName=%s))"
+BINDING_TEMPLATE = "%s@IC.AC.UK"
+
+
+class LdapConnectionHandler:
+    """
+    Adapter for the python-LDAP library.
+    The class simplifies the interaction with python-LDAP
+    to initialise an LDAPObject and handle the retrieval of
+    relevant LDAP user attributes.
+
+    EXAMPLE USAGE FOR LOGIN PURPOSES:
+        1. An LDAP object is initialised with LDAP server URL and base distinct name
+        2. A new connection is established with connect()
+        3. The LDAP binding for a given username and password is performed with ldap_login()
+        4. Relevant attributes are queried with query_attributes().
+    """
+
+    def __init__(self):
+        self.base_dn = LDAP_DN
+        self.server_url = LDAP_URL        
+
+    def ldap_login(self, username, password, query_attrs):
+        """
+        Performs basic LDAP authentication by binding on a fresh connection with `username` and `password`.
+        Throws INVALID_CREDENTIALS exception if authentication fails. On successful authentication,
+        retrieves the values stored on the LDAP server associated to `username` for the given `attributes`.
+        :param username: username credential
+        :param password: password credential
+        :param attributes: names of the attributes to filter for
+        :return: attr_name -> attr_value dict for given username
+        """
+        connection = ldap.initialize(self.server_url)
+        connection.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
+        connection.set_option(ldap.OPT_X_TLS_NEWCTX, 0)
+        connection.simple_bind_s(BINDING_TEMPLATE % username, password)
+        attributes = parse_ldap_attributes(
+            self.raw_attributes(username, query_attrs, connection)
+        )
+        connection.unbind_s()
+        return attributes
+
+    def raw_attributes(self, username, attributes, connection):
+        ldap_filter = USERNAME_FILTER_TEMPLATE % username
+        raw_res = connection.search(
+            self.base_dn, ldap.SCOPE_SUBTREE, ldap_filter, attributes
+        )
+        res_type, res_data = connection.result(raw_res)
+        _, filtered_attributes = res_data[0]
+        return filtered_attributes.items()
+
+
+###################################################################
+# U T I L I T I E S                                               #
+###################################################################
+def parse_ldap_attributes(attributes):
+    return {
+        k: ldap_attributes_to_dictionary(vs)
+        if k in ATTRIBUTES_TO_SERIALISE
+        else vs[0].decode("utf-8")
+        for k, vs in attributes
+    }
+
+
+def ldap_attributes_to_dictionary(attr_values):
+    items = (
+        re.findall(KEY_VAL_ATT_REGEX, item.decode("utf-8").replace(",", " "))
+        for item in attr_values
+    )
+    d = defaultdict(set)
+    for k, v in itertools.chain.from_iterable(items):
+        d[k].add(v)
+    return d
+
+
+ldap_service = LdapConnectionHandler()
diff --git a/blueprints/__init__.py b/blueprints/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/blueprints/auth.py b/blueprints/auth.py
new file mode 100644
index 0000000..59362cd
--- /dev/null
+++ b/blueprints/auth.py
@@ -0,0 +1,23 @@
+from flask import Blueprint, render_template, request
+from auth.ldap_auth import ldap_login
+import ldap
+
+auth_blueprint = Blueprint('auth', __name__, url_prefix='/auth')
+
+
+@auth_blueprint.route('/login', methods=['GET', 'POST'])
+def login():
+    if request.method == 'GET':
+        return render_template('login.html')
+    
+    # Handle post request
+    username = request.form.get('username')
+    password = request.form.get('password')
+    print(f'Got username={username} and password={password}')
+    if username and password:
+        try:
+            r = ldap_login(username, password)
+            return f"Logged in! LDAP response: {r}"
+        except ldap.INVALID_CREDENTIALS:
+            return "Invalid credentials."
+    return "please provide a username and password"
\ No newline at end of file
diff --git a/blueprints/home.py b/blueprints/home.py
new file mode 100644
index 0000000..2b9af5b
--- /dev/null
+++ b/blueprints/home.py
@@ -0,0 +1,35 @@
+from flask import Blueprint, render_template, request, redirect, url_for
+from database.db import db
+from models.user import Entity
+
+home_blueprint = Blueprint('home', __name__, url_prefix='/')
+
+@home_blueprint.route('')
+def home():
+    return render_template('index.html')
+
+@home_blueprint.route('/hello/<name>')
+def hello(name: str):
+    return "Hello, " + name
+
+
+# Example CRUD route
+
+@home_blueprint.route('/entities', methods=['GET', 'POST'])
+def entities():
+    if request.method == "GET":
+        try:
+            rows = ""
+            for e in db.session.query(Entity).all():
+                rows += str(e) + "<br>"
+
+            return rows
+        except:
+            return "App database error (have you setup a database for this app?)"
+    else:
+        username = request.form.get('username')
+        email = request.form.get('email')
+
+        db.session.add(Entity(username=username, email=email))
+        db.session.commit()
+        return redirect('/entities')
diff --git a/config/__init__.py b/config/__init__.py
new file mode 100644
index 0000000..65531fe
--- /dev/null
+++ b/config/__init__.py
@@ -0,0 +1,12 @@
+# Define any custom Jinja2 functions here
+from flask import url_for
+from .config import URL_PREFIX
+
+# Get around the routing prefix issue inside the templates
+def url_for2(endpoint: str, **kwargs):
+    return URL_PREFIX + str(url_for(endpoint, **kwargs))
+
+
+CUSTOM_TEMPLATE_FUNCTIONS = {
+    "url": url_for2,
+}
diff --git a/config/config.py b/config/config.py
new file mode 100644
index 0000000..c0738ad
--- /dev/null
+++ b/config/config.py
@@ -0,0 +1,50 @@
+import os
+
+# This should match exactly the name of the app you specified
+APP_NAME = "dbtestapp2"
+ENV = os.environ.get('ENV', 'prod').lower()
+URL_PREFIX = f"/{APP_NAME}" if ENV == 'prod' else ""
+
+# Get the static URL of the app (to get around the production path issue)
+def get_static_url():
+    if ENV == 'prod':
+        return f'/{APP_NAME}/static'
+    else:
+        return '/static'
+
+# Get the app configuration based on the ENV environment variable (default is prod)
+def get_app_config():
+    if ENV == 'prod':
+        return ProductionConfig()
+    else:
+        return DevelopmentConfig()
+
+
+# If you have created a database for this app, the connection string will be automatically
+# accessible through the DATABASE_URL environment variable.
+def get_db_url():
+    url = os.environ.get('DATABASE_URL')
+    if url is None:
+        print("WARNING: Could not connect to the given database URL!")
+
+    # For PostgreSQL databases, the conn string needs to start with "postgresql"
+    if url and url.startswith("postgres://"):
+        url = url.replace("postgres://", "postgresql://", 1)
+
+    return url
+
+
+# Flask App settings for production environment
+class ProductionConfig:
+    DEBUG = False
+    APPLICATION_ROOT = f"/{APP_NAME}"
+    SQLALCHEMY_DATABASE_URI = get_db_url()
+    SQLALCHEMY_TRACK_MODIFICATIONS = False
+
+
+# Flask App settings for local development enviroment
+class DevelopmentConfig:
+    DEBUG = True
+    SQLALCHEMY_DATABASE_URI = get_db_url()
+    SQLALCHEMY_TRACK_MODIFICATIONS = False
+
diff --git a/database/__init__.py b/database/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/database/db.py b/database/db.py
new file mode 100644
index 0000000..2e1eeb6
--- /dev/null
+++ b/database/db.py
@@ -0,0 +1,3 @@
+from flask_sqlalchemy import SQLAlchemy
+
+db = SQLAlchemy()
\ No newline at end of file
diff --git a/models/__init__.py b/models/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/models/user.py b/models/user.py
new file mode 100644
index 0000000..dc40828
--- /dev/null
+++ b/models/user.py
@@ -0,0 +1,18 @@
+from database.db import db
+
+# class User(db.Model):
+#     id = db.Column(db.Integer, primary_key=True)
+#     username = db.Column(db.String(80), unique=True, nullable=False)
+#     email = db.Column(db.String(120), unique=True, nullable=False)
+
+#     def __repr__(self):
+#         return f'User({self.id}, {self.username}, {self.email})'
+
+
+class Entity(db.Model):
+    id = db.Column(db.Integer, primary_key=True)
+    username = db.Column(db.String(80), unique=True, nullable=False)
+    email = db.Column(db.String(120), unique=True, nullable=False)
+
+    def __repr__(self):
+        return f'Entity({self.id}, {self.username}, {self.email})'
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 961decf..ee819a9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,4 +4,8 @@ gunicorn
 itsdangerous
 Jinja2
 peewee
-Werkzeug
\ No newline at end of file
+Werkzeug
+Flask-SQLAlchemy
+SQLAlchemy
+psycopg2-binary
+python_ldap
\ No newline at end of file
diff --git a/static/img/python-logo.png b/static/img/python-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a4bfafc006f4dfa6edee0d25b5efaa5a8edc6fc
GIT binary patch
literal 50806
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

literal 0
HcmV?d00001

diff --git a/templates/index.html b/templates/index.html
index 8840789..e83b98f 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,25 +1,38 @@
 <!DOCTYPE html>
 <html lang="en">
     <head>
-        <title>Heroku Flask Template</title>
+        <title>Flask Template</title>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1">
         
     </head>
     <body>
-        <h1 id="tittle">Heroku Flask Template</h1>
+        <h1 id="title">Imperial PaaS - Python Flask Template</h1>
         <nav>
             <ul>
-                <li><a href="index.html">HOME</a></li>
-                <li><a href="https://github.com/vetronus/heroku-flask-template">SOURCE CODE(GitHub)</a></li>
-                <li><a href="http://parthsarthee.com/">PARTH SARTHEE(Author)</a></li>
-                <li><a href="http://aroxbit.com">AROXBIT(Awesome Indie Startup)</a></li>
+                <li><a href="{{ url('home.home') }}">HOME</a></li>
+                <li><a href="{{ url('auth.login') }}">LOGIN</a></li>
             </ul>
         </nav>
-        <h2>What is Heroku Flask Template</h2>
+
+        <img src="{{ url('static', filename='img/python-logo.png') }}" width="100px" alt="python logo"/>
+
+        <h2>What is Flask Template</h2>
         <p>
-            Heroku Flask Template is a simple web app programmed in Python-3 using flask micro-framework. It is created for begginers to understand the basics of creating a flask web app and deploying it on the Heroku. It can also be used as a template to create your new flask web apps which can then easily be deployable on Heroku.
+            Flask Template is a simple web app programmed in Python-3 using flask micro-framework. It is created for begginers to understand the basics of creating a flask web app and deploying it on the Heroku. It can also be used as a template to create your new flask web apps.
         </p><br>
-        <h3>You can download this plugin, or modify its source code from <a href="https://github.com/vetronus/heroku-flask-template">GitHub</a></h3>
+
+        Example CRUD form:
+        <form method="post" action="{{ url('home.entities') }}">
+            Username:<br>
+            <input type="text" name="username">
+            <br>
+            Email:<br>
+            <input type="email" name="email">
+            <br>
+            <button type="submit">Create Entry</button>
+        </form>
+        <br>
+        <a href="{{ url('home.entities') }}">View entities</a>
     </body>
 </html>
\ No newline at end of file
diff --git a/templates/login.html b/templates/login.html
new file mode 100644
index 0000000..6771198
--- /dev/null
+++ b/templates/login.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <title>Flask Template</title>
+        <meta charset="UTF-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+        
+    </head>
+    <body>
+        <h1 id="title">Imperial PaaS - Python Flask Template</h1>
+        <nav>
+            <ul>
+                <li><a href="{{ url('home.home') }}">HOME</a></li>
+                <li><a href="{{ url('auth.login') }}">LOGIN</a></li>
+            </ul>
+        </nav>
+
+        <form method="post">
+            LDAP Username:<br>
+            <input type="text" name="username">
+            <br>
+            Password:<br>
+            <input type="password" name="password">
+            <br>
+            <button type="submit">Login</button>
+        </form>
+    </body>
+</html>
\ No newline at end of file
-- 
GitLab