Просмотр исходного кода

user authentication base template & functionality

control 3 лет назад
Родитель
Сommit
d0b4b1ad88
7 измененных файлов с 148 добавлено и 4 удалено
  1. 2 2
      app/__init__.py
  2. BIN
      app/database.db
  3. 66 1
      app/logic.py
  4. 8 0
      app/models.py
  5. 1 1
      app/templates/base.html
  6. 28 0
      app/templates/login.html
  7. 43 0
      app/templates/register.html

+ 2 - 2
app/__init__.py

@@ -19,13 +19,13 @@ def create_app():
     app.register_blueprint(logic, url_prefix  = '/') # allows the setting of prefixes for pages
 
     # import Database models
-    from .models import User
+    from .models import User, Bookmark
 
     create_database(app)
 
     login_manager = LoginManager()
     # redirect here if not logged in
-    login_manager.login_view =  'logic.profile' ##'logic.login' 
+    login_manager.login_view =  'logic.login' ##'logic.login' 
     login_manager.init_app(app)
 
     @login_manager.user_loader

BIN
app/database.db


+ 66 - 1
app/logic.py

@@ -10,5 +10,70 @@ import string, secrets
 logic = Blueprint('logic', __name__)
 
 @logic.route('/', methods=['GET'])
+@login_required
 def profile():
-    return render_template('home.html', user=current_user)
+    return render_template('home.html', user=current_user)
+
+@logic.route('/login', methods=['GET', 'POST'])
+def login():
+    if request.method == 'POST':
+        email = request.form.get('email')
+        challenge_passwd = request.form.get('passwd_login')
+
+        user = User.query.filter_by(email=email).first()
+        if user:
+            if check_password_hash(user.password, challenge_passwd):
+                flash('Successful Login!', category='success')
+                login_user(user, remember=True)
+                return redirect(url_for('logic.profile'))
+            else:
+                flash('Unsucessful Login!', category='error')
+        else:
+            flash('Unsucessful Login!', category='error')
+    
+    return render_template("login.html", user=current_user)
+
+@logic.route('/logout')
+@login_required
+def logout():
+    logout_user()
+    return redirect(url_for('logic.login'))
+
+@logic.route('/register', methods=['GET', 'POST'])
+def register():
+    pass_list = list()
+    if request.method == 'POST':
+        email = request.form.get('email') 
+        username = request.form.get('username')
+        passwd_1 = request.form.get('passwd_1')
+        passwd_2 = request.form.get('passwd_2')
+
+        # Basic User Input Checks
+        email_check = User.query.filter_by(email=email).first()
+        if len(email) < 1:
+            flash('Your Email must be longer than 0 characters.', category='error')
+        elif email_check:
+            flash('This Email is already taken', category='error')
+        else:
+            pass_list.append('p')
+    
+        if len(username) < 1:
+            flash('Username must be something', category='error')
+        else:
+            pass_list.append('p')
+
+        if len(passwd_1) < 8 or len(passwd_2) < 8:
+            flash('Your Password must be longer than or equal to 8 characters.', category='error')
+        else:
+            if passwd_1 != passwd_2:
+                flash('Your Passwords must match!', category='error')
+            else:
+                if len(pass_list) == 2:
+                    new_user = User(email=email, username=username, password=generate_password_hash(passwd_2, method='sha256'))
+                    db.session.add(new_user)
+                    db.session.commit()
+                    flash('Account Registration Successful!', category='success')
+                    return redirect(url_for('logic.profile'))
+                else:
+                    flash('Registration Failed', category='error')
+    return render_template("register.html", user=current_user)

+ 8 - 0
app/models.py

@@ -8,3 +8,11 @@ class User(db.Model, UserMixin): # User Database
    email = db.Column(db.String(150), unique=True)
    password = db.Column(db.String(150))
    username = db.Column(db.String(150))
+
+class Bookmark(db.Model, UserMixin):
+   id = db.Column(db.Integer, primary_key=True)
+   owner = db.Column(db.Integer) # owner id
+   status = db.Column(db.String(8)) # public/private
+   name = db.Column(db.String(150))
+   group = db.Column(db.String(150))
+   link = db.Column(db.String(150))

+ 1 - 1
app/templates/base.html

@@ -31,7 +31,7 @@
                 <div class="navbar-nav">
                     {% if user.is_authenticated %} <!-- shows only if user is logged in -->
                     <a class="nav-item nav-link" id="profile" href="/">My Hometab</a>
-                    <a class="nav-item nav-link" id="matchbook" href="/matchbook">Shared Hometabs</a>
+                    <a class="nav-item nav-link" id="shared" href="/shared">Shared Hometabs</a>
                     <a class="nav-item nav-link" id="logout" href="/logout">Logout</a>
                     {% else %}
                     <a class="nav-item nav-link" id="login" href="/login">Login</a>

+ 28 - 0
app/templates/login.html

@@ -0,0 +1,28 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h1>Login Here!</h1>
+<form method="POST">
+<div class="form-group">
+    <label for="email"></label>
+    <input 
+        type="email" 
+        class="form-control" 
+        id="email"
+        name="email"
+        placeholder="Insert Email"
+    />
+    <label for="passwd_login"></label>
+    <input 
+        type="password" 
+        class="form-control" 
+        id="passwd_login"
+        name="passwd_login"
+        placeholder="Enter Password"
+    />
+    <br />
+    <button type="submit" class="btn btn-primary">Login</button>
+</div>
+
+</form>
+{% endblock %}

+ 43 - 0
app/templates/register.html

@@ -0,0 +1,43 @@
+{% extends "base.html" %}
+
+{% block content %}
+<h1> Register Here! </h1>
+<form method="POST">
+    <div class="form-group">
+        <label for="email"></label>
+        <input 
+            type="email" 
+            class="form-control" 
+            id="email"
+            name="email"
+            placeholder="Insert Email"
+        />
+        <label for="passwd_1"></label>
+        <input 
+            type="password" 
+            class="form-control" 
+            id="passwd_1"
+            name="passwd_1"
+            placeholder="Enter Password"
+        />
+        <label for="passwd_2"></label>
+        <input 
+            type="password" 
+            class="form-control" 
+            id="passwd_2"
+            name="passwd_2"
+            placeholder="Confirm Password"
+        />
+        <label for="username"></label>
+        <input 
+            type="text" 
+            class="form-control" 
+            id="username"
+            name="username"
+            placeholder="Insert User Name"
+        />
+    </div>
+    <br />
+    <button type="submit" class="btn btn-primary">Submit</button>
+</form>
+{% endblock %}