Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions ayat/account_activation_routes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
from flask import Flask, request, jsonify, url_for
from werkzeug.security import generate_password_hash, check_password_hash
import jwt
from flask_cors import cross_origin

from functools import wraps
from ayat.models.users import *
from ayat import app, db

from ayat.helpers import send_message
from itsdangerous import URLSafeTimedSerializer, SignatureExpired, BadTimeSignature

import os
import logging

from ayat import mail
from flask_mail import Message





serializer = URLSafeTimedSerializer("thisissecret")

@app.route("/v1/users/<public_id>/confirm",methods=['GET']) #'POST',
@cross_origin()
def confirm_email(public_id):

data = request.get_json(force=True)

current_user = User.query.filter_by(public_id=public_id ).first()
if not current_user:
return jsonify({'status': 'user not found'})
# if request.method == "POST":
# current_user_email = data["email"]
# user_email_check = User.query.filter_by(email= current_user_email ).first()
# if user_email_check is not None and str(current_user.email) != str(user_email_check.email):
# return jsonify({"status":"email exists"})

user_email = current_user.email
token_email = serializer.dumps(user_email, salt= "email_confirm")
confirmation_link = url_for('confirm_email_token', token = token_email, public_id = public_id, _external = True)
content = f"Welcome to ayat. \n This is the link to confirm your email which will expire in two hours. \n link : \n {confirmation_link}"
msg = Message("Ayat Email Confirmation",sender="ayatquraancenter@gmail.com",recipients=user_email.split())
msg.body = content
mail.send(msg)
# send_message(subject="Ayat Email Confirmation",recipients= user_email,content= content,html_content= "<h1>hello</h1>", resource="hello.jpg",resource_type= "jpg")


return jsonify({"status":"message was sent"})







@app.route("/v1/users/<public_id>/confirm/<token>",methods=['GET']) #'POST',
@cross_origin()
def confirm_email_token(token, public_id):

twoHours = 60*60*2

try:
email = serializer.loads(token, salt= "email_confirm", max_age= twoHours)
user_to_activate = User.query.filter_by(public_id = public_id).first()
user_to_activate.is_activated = True
db.session.commit()

except SignatureExpired:
return jsonify({"status":"token has expired"})

except BadTimeSignature:
return jsonify({"status":"token is damaged"})

return jsonify({"status":"confirmed"}),200
55 changes: 44 additions & 11 deletions ayat/authentication_routes.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from flask import Flask, request, jsonify, make_response
from flask import Flask, request, jsonify, url_for
from werkzeug.security import generate_password_hash, check_password_hash
import jwt
from flask_cors import cross_origin
Expand All @@ -9,6 +9,13 @@
import os
import logging

from ayat import mail
from flask_mail import Message
from itsdangerous import URLSafeTimedSerializer


serializer = URLSafeTimedSerializer("thisissecret")

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s : %(name)s : %(levelname)s : %(message)s')
Expand Down Expand Up @@ -196,15 +203,9 @@ def delete_user(current_user, public_id):
@cross_origin()
def login_or_create():
data = request.get_json(force=True)
print(data)
# login checking
print('this is request')
print(request)
print('this is data')
print(data)
# if not data['action'] :
# return jsonify({"error": "user is unauthorized"}), 403


if data['action'] == 'login':

user_email = data['email']
Expand Down Expand Up @@ -280,8 +281,25 @@ def login_or_create():
new_user.guardians.append(new_guardian)
db.session.add(new_user)
db.session.commit()

###############

user_email = new_user.email
token_email = serializer.dumps(user_email, salt= "email_confirm")
confirmation_link = url_for('confirm_email_token', token = token_email, public_id = new_user.public_id, _external = True)
content = f"Welcome to ayat. \n This is the link to confirm your email which will expire in two hours. \n link : \n {confirmation_link}"
msg = Message("Ayat Email Confirmation",sender="ayatquraancenter@gmail.com",recipients=user_email.split())
msg.body = content
mail.send(msg)


logger.info('user succeeded to register')
return jsonify({'status': 'created'}), 200
return jsonify({'status': 'created',
<<<<<<< HEAD
'public_id': new_user.public_id,}), 200
=======
"public_id" : new_user.public_id}), 200
>>>>>>> programRoutes

if data['action'] == 'register_staff':

Expand Down Expand Up @@ -319,5 +337,20 @@ def login_or_create():
new_user.permissions.append(new_permission)
db.session.add(new_user)
db.session.commit()

user_email = new_user.email
token_email = serializer.dumps(user_email, salt= "email_confirm")
confirmation_link = url_for('confirm_email_token', token = token_email, public_id =new_user.public_id, _external = True)
content = f"Welcome to ayat. \n This is the link to confirm your email which will expire in two hours. \n link : \n {confirmation_link}"
msg = Message("Ayat Email Confirmation",sender="ayatquraancenter@gmail.com",recipients=user_email.split())
msg.body = content
mail.send(msg)


logger.info('user succeeded to register')
return jsonify({'status': 'created'}), 200
return jsonify({'status': 'created',
<<<<<<< HEAD
'public_id': new_user.public_id,}), 200
=======
"public_id" : new_user.public_id}), 200
>>>>>>> programRoutes
6 changes: 3 additions & 3 deletions ayat/models/programs.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class Program(db.Model):
available = db.Column(db.Boolean, nullable=False)
start_date = db.Column(db.Date, nullable=False)
end_date = db.Column(db.Date, nullable=False)
requirement_id = db.Column(db.SMALLINT, db.ForeignKey("requirement.requirement_id"), nullable=False)
requirement_id = db.Column(db.SMALLINT, db.ForeignKey("requirement.requirement_id"))
skills = db.relationship('Skill', secondary=program_skill, backref=db.backref('program', lazy='dynamic'))
faqs = db.relationship('Faq', secondary=program_faqs, backref=db.backref('program', lazy='dynamic'))
category = db.relationship('Category', secondary=program_category, backref=db.backref('program', lazy='dynamic'))
Expand Down Expand Up @@ -149,7 +149,7 @@ class Requirement(db.Model):
requirement_id = db.Column(db.SMALLINT, primary_key=True)
min_age = db.Column(db.SMALLINT, nullable=False)
max_age = db.Column(db.SMALLINT, nullable=False)
gender = db.Column(db.VARCHAR(60), nullable=False)
gender = db.Column(db.Boolean, nullable=False)

def __repr__(self):
info_text = (f'requirement id: {self.requirement_id}.\t'
Expand All @@ -158,7 +158,7 @@ def __repr__(self):
f'gender: {self.gender}.\n')
return info_text


class Category(db.Model):
__tablename__ = "category"
category_id = db.Column(db.SMALLINT, primary_key=True)
Expand Down
Loading