From d02f2ed714186247e8251e87a89779698d50ad4b Mon Sep 17 00:00:00 2001 From: Jagraj Aulakh Date: Sat, 18 Mar 2023 20:58:51 -0400 Subject: [PATCH] #16 made /register endpoint --- backend/app/models.py | 16 ++++++++++++++-- backend/app/routes.py | 27 +++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/backend/app/models.py b/backend/app/models.py index 290cdcb..03c0057 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -1,6 +1,7 @@ from app import db from flask_login import UserMixin from datetime import datetime +from werkzeug.security import generate_password_hash, check_password_hash class User(UserMixin, db.Model): @@ -8,14 +9,25 @@ class User(UserMixin, db.Model): username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) password_hash = db.Column(db.String(128)) - about_me = db.Column(db.String(140)) last_seen = db.Column(db.DateTime, default=datetime.utcnow) token = db.Column(db.String(32), index=True, unique=True) + def set_password(self, password): + self.password_hash = generate_password_hash(password) + + def check_password(self, password): + return check_password_hash(self.password_hash, password) + def to_dict(self): return { "id": self.id, "username": self.username, "email": self.email, - "about_me": self.about_me, } + + def from_dict(self, data, new_user=False): + for field in ['username', 'email']: + if field in data: + setattr(self, field, data[field]) + if new_user and 'password' in data: + self.set_password(data['password']) diff --git a/backend/app/routes.py b/backend/app/routes.py index 5940339..286f3ea 100644 --- a/backend/app/routes.py +++ b/backend/app/routes.py @@ -1,5 +1,5 @@ from app.bp import bp -from flask import Response, jsonify, request +from flask import jsonify, request from app.errors import error_response from app import db @@ -9,7 +9,6 @@ from app.models import User @bp.route("/login", methods=["POST"]) def login(): data = request.get_json() - print(data) if not data.get("user_id"): return error_response(400, "Must supply user_id") @@ -20,3 +19,27 @@ def login(): resp = jsonify(user.to_dict()) resp.status_code = 200 return resp + +@bp.route("/register", methods=["POST"]) +def register(): + data = request.get_json() + + required_fields = ['username', 'email', 'password', 'password2'] + for f in required_fields: + if f not in data: + return error_response(400, f"Must supply {f}") + + if User.query.filter_by(username=data['username']).first(): + return error_response(409, "User with that username already exists") + + if User.query.filter_by(email=data['email']).first(): + return error_response(409, "User with that email already exists") + + u = User() + u.from_dict(data, new_user=True) + db.session.add(u) + db.session.commit() + + resp = jsonify(u.to_dict()) + resp.status_code = 200 + return resp