Skip to content
Merged
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
18 changes: 18 additions & 0 deletions api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,21 @@ def create_app():
os.environ["ADMIN_PASSWORD_FILE"] = bar_app.config.get(
"TEST_ADMIN_PASSWORD_FILE"
)
if bar_app.config.get("ADMIN_EMAIL"):
os.environ["ADMIN_EMAIL"] = bar_app.config.get("ADMIN_EMAIL")
if bar_app.config.get("EMAIL_PASS_KEY"):
os.environ["EMAIL_PASS_KEY"] = bar_app.config.get("EMAIL_PASS_KEY")
if bar_app.config.get("EMAIL_PASS_FILE"):
os.environ["EMAIL_PASS_FILE"] = bar_app.config.get("EMAIL_PASS_FILE")
elif os.environ.get("BAR"):
# The BAR
bar_app.config.from_pyfile(os.environ.get("BAR_API_PATH"), silent=True)
if bar_app.config.get("ADMIN_EMAIL"):
os.environ["ADMIN_EMAIL"] = bar_app.config.get("ADMIN_EMAIL")
if bar_app.config.get("EMAIL_PASS_KEY"):
os.environ["EMAIL_PASS_KEY"] = bar_app.config.get("EMAIL_PASS_KEY")
if bar_app.config.get("EMAIL_PASS_FILE"):
os.environ["EMAIL_PASS_FILE"] = bar_app.config.get("EMAIL_PASS_FILE")
if bar_app.config.get("ADMIN_ENCRYPT_KEY"):
os.environ["ADMIN_ENCRYPT_KEY"] = bar_app.config.get("ADMIN_ENCRYPT_KEY")
if bar_app.config.get("ADMIN_PASSWORD_FILE"):
Expand All @@ -53,6 +65,12 @@ def create_app():
os.environ["ADMIN_PASSWORD_FILE"] = bar_app.config.get(
"ADMIN_PASSWORD_FILE"
)
if bar_app.config.get("ADMIN_EMAIL"):
os.environ["ADMIN_EMAIL"] = bar_app.config.get("ADMIN_EMAIL")
if bar_app.config.get("EMAIL_PASS_KEY"):
os.environ["EMAIL_PASS_KEY"] = bar_app.config.get("EMAIL_PASS_KEY")
if bar_app.config.get("EMAIL_PASS_FILE"):
os.environ["EMAIL_PASS_FILE"] = bar_app.config.get("EMAIL_PASS_FILE")
if bar_app.config.get("DRIVE_LIST_KEY"):
os.environ["DRIVE_LIST_KEY"] = bar_app.config.get("DRIVE_LIST_KEY")
if bar_app.config.get("DRIVE_LIST_FILE"):
Expand Down
37 changes: 37 additions & 0 deletions api/resources/api_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
import requests
import pandas
from cryptography.fernet import Fernet
from smtplib import SMTP_SSL
from ssl import create_default_context
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

CAPTCHA_KEY_FILE = "/home/bpereira/data/bar.summarization/key"

Expand All @@ -33,6 +37,38 @@ def check_admin_pass(password):
else:
return False

@staticmethod
def send_email_notification():
if os.environ.get("BAR"):
with open(os.environ.get("ADMIN_EMAIL"), "r") as f:
for line in f:
recipient = line
port = 465
key = os.environ.get('EMAIL_PASS_KEY')
cipher_suite = Fernet(key)
with open(os.environ.get('EMAIL_PASS_FILE'), "rb") as f:
for line in f:
encrypted_key = line
uncipher_text = cipher_suite.decrypt(encrypted_key)
password = bytes(uncipher_text).decode("utf-8")
context = create_default_context()
smtp_server = 'smtp.gmail.com'
sender_email = 'bar.summarization@gmail.com'
subject = "[Bio-Analytic Resource] New API key request"
text = """\
There is a new API key request.
You can approve or reject it at http://bar.utoronto.ca/~bpereira/webservices/bar-request-manager/build/index.html
"""
m_text = MIMEText(text, _subtype='plain', _charset='UTF-8')
msg = MIMEMultipart()
msg["From"] = sender_email
msg["To"] = recipient
msg["Subject"] = subject
msg.attach(m_text)
with SMTP_SSL(smtp_server, port, context=context) as server:
server.login("bar.summarization@gmail.com", password)
server.sendmail(sender_email, recipient, msg.as_string())


@api_manager.route("/validate_admin_password", methods=["POST"], doc=False)
class ApiManagerValidate(Resource):
Expand Down Expand Up @@ -84,6 +120,7 @@ def post(self):

if row_req is None and row_users is None:
df.to_sql("requests", con, if_exists="append", index=False)
ApiManagerUtils.send_email_notification()
return BARUtils.success_exit("Data added")
else:
return BARUtils.error_exit("E-mail already in use"), 409
Expand Down
4 changes: 4 additions & 0 deletions config/BAR_API.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,13 @@ SQLALCHEMY_BINDS = {
}

## API Manager variables
ADMIN_EMAIL = '/home/bpereira/data/adminemail'
ADMIN_PASSWORD_FILE = '/home/bpereira/dev/pw-script/managerkey.bin'
ADMIN_ENCRYPT_KEY = 'fabUGnTJ3UQ4qeDJbnSMrb-tDdmt9kxLkuq3GHKdGTo='

EMAIL_PASS_KEY = '1_2SkFWmTeFnLWtO2oUIRi8pmSd2bMDAtlWq9khpzNc='
EMAIL_PASS_FILE = '/home/bpereira/dev/pw-script/emailkey.bin'

TEST_ADMIN_PASSWORD_FILE = './tests/data/test_key.bin'
TEST_ADMIN_ENCRYPT_KEY = 'fZ2zIiSoV3MOlwiyhjxPWomIArj6YwuDsDNP0J68ZT8='

Expand Down