Update: Docker Compose (without Frontend now)
This commit is contained in:
parent
f1ae473b40
commit
bce2237303
12 changed files with 54 additions and 281 deletions
7
backend/Dockerfile
Normal file
7
backend/Dockerfile
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
FROM python:latest
|
||||||
|
WORKDIR /data/backend
|
||||||
|
COPY requirements.txt requirements.txt
|
||||||
|
RUN pip install --upgrade pip
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
COPY . .
|
||||||
|
CMD [ "python", "-m" , "flask", "run", "--host=0.0.0.0"]
|
||||||
|
|
@ -5,4 +5,5 @@ app = create_app()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
PORT = os.environ.get('PORT', 33507)
|
PORT = os.environ.get('PORT', 33507)
|
||||||
|
print('app.run')
|
||||||
app.run(host='0.0.0.0', port=PORT, DEBUG=True)
|
app.run(host='0.0.0.0', port=PORT, DEBUG=True)
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,17 @@ def create_app():
|
||||||
app.config.from_object("config.Config")
|
app.config.from_object("config.Config")
|
||||||
|
|
||||||
if app.config['SQLALCHEMY_DATABASE_URI_1'] is None or app.config['SQLALCHEMY_DATABASE_URI_2'] is None:
|
if app.config['SQLALCHEMY_DATABASE_URI_1'] is None or app.config['SQLALCHEMY_DATABASE_URI_2'] is None:
|
||||||
print('No ENV Variable for DATABASE_URL_1 or DATABASE_URL_2')
|
print('No ENV Variable for DATABASE_URL_USERS or DATABASE_URL_LOGS')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print('ENV Variables passed : ', app.config['SQLALCHEMY_BINDS'])
|
print('ENV Variables passed : ', app.config['SQLALCHEMY_BINDS'])
|
||||||
|
|
||||||
|
print('init_app')
|
||||||
db.init_app(app)
|
db.init_app(app)
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
|
print('import routes')
|
||||||
from . import routes
|
from . import routes
|
||||||
|
print('db.create_all')
|
||||||
db.create_all()
|
db.create_all()
|
||||||
|
print('db created')
|
||||||
return app
|
return app
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,9 @@
|
||||||
print('hashlib')
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
print('flask_sqlalchemy')
|
|
||||||
from flask_sqlalchemy import inspect
|
from flask_sqlalchemy import inspect
|
||||||
|
|
||||||
print('sqlalchemy')
|
|
||||||
from sqlalchemy import asc, desc, or_
|
from sqlalchemy import asc, desc, or_
|
||||||
|
|
||||||
print('users_model')
|
|
||||||
from .users_model import Users, db
|
from .users_model import Users, db
|
||||||
|
|
||||||
print('logs_model')
|
|
||||||
from .logs_model import Logs
|
from .logs_model import Logs
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from flask import request
|
||||||
from .responses import send_message, send_error
|
from .responses import send_message, send_error
|
||||||
from .api_functions import db_login, db_register, db_user_update, db_create_log, db_user_delete, db_admin_update_user, db_users
|
from .api_functions import db_login, db_register, db_user_update, db_create_log, db_user_delete, db_admin_update_user, db_users
|
||||||
from .sessionJWT import create_auth_token, check_auth_token
|
from .sessionJWT import create_auth_token, check_auth_token
|
||||||
print('route imported')
|
|
||||||
|
|
||||||
# Login
|
# Login
|
||||||
@app.route('/api/login', methods=['POST'])
|
@app.route('/api/login', methods=['POST'])
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,11 @@
|
||||||
Flask_Migrate
|
alembic==1.7.5
|
||||||
Flask_SQLAlchemy
|
Flask==2.0.2
|
||||||
Flask_Script
|
Flask-Migrate==3.1.0
|
||||||
Flask
|
Flask-Script==2.0.6
|
||||||
sqlalchemy
|
Flask-SQLAlchemy==2.5.1
|
||||||
hashlib
|
Flask-WTF==0.15.1
|
||||||
jwt
|
pipreqs==0.4.10
|
||||||
|
PyJWT==2.3.0
|
||||||
|
pytest==6.2.5
|
||||||
|
SQLAlchemy==1.4.27
|
||||||
|
psycopg2==2.9.2
|
||||||
|
|
@ -1,59 +0,0 @@
|
||||||
from logs_model import Logs
|
|
||||||
from datetime import date
|
|
||||||
|
|
||||||
|
|
||||||
TAB_LOG = [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"date": date.fromisoformat('2021-12-04'),
|
|
||||||
"user": "riri",
|
|
||||||
"ip": "0.0.0.0",
|
|
||||||
"table": "Users",
|
|
||||||
"action": "connexion",
|
|
||||||
"status": "succes",
|
|
||||||
"status_code": 200
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"date": date.fromisoformat('2021-12-04'),
|
|
||||||
"user": "fifi",
|
|
||||||
"ip": "0.0.0.0",
|
|
||||||
"table": "Users",
|
|
||||||
"action": "connexion",
|
|
||||||
"status": "succes",
|
|
||||||
"status_code": 200
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"date": date.fromisoformat('2021-12-04'),
|
|
||||||
"user": "loulou",
|
|
||||||
"ip": "0.0.0.0",
|
|
||||||
"table": "Users",
|
|
||||||
"action": "connexion",
|
|
||||||
"status": "succes",
|
|
||||||
"status_code": 200
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_log_object(i: int):
|
|
||||||
return Logs(
|
|
||||||
id=TAB_LOG[i]["id"],
|
|
||||||
date=TAB_LOG[i]["date"],
|
|
||||||
user=TAB_LOG[i]["user"],
|
|
||||||
ip=TAB_LOG[i]["ip"],
|
|
||||||
table=TAB_LOG[i]["table"],
|
|
||||||
action=TAB_LOG[i]["action"],
|
|
||||||
status=TAB_LOG[i]["status"],
|
|
||||||
status_code=TAB_LOG[i]["status_code"]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def get_log_json(i: int):
|
|
||||||
return TAB_LOG[i]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
||||||
import sys
|
|
||||||
sys.path.append( "../application" )
|
|
||||||
import users_model
|
|
||||||
import logs_model
|
|
||||||
|
|
||||||
from users_model import Users
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TAB_USER = [
|
|
||||||
{
|
|
||||||
"email": "riri@gmail.com",
|
|
||||||
"hash_pass": "ririPass",
|
|
||||||
"salt": "b'\x98\x95]\xa2B\xe5\x84gN\n1\x11\x1c%\xf7S\x8b\x88\xf7\xaa\x83\xf8$\xa8\xd5A\xd1\xa0\xf7:j\x10'",
|
|
||||||
"is_admin": False
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"email": "fifi@gmail.com",
|
|
||||||
"hash_pass": "fifiPass",
|
|
||||||
"salt": "b'\xa9X9{\xc3\x8c\xe0\xeb\x0b\x01\xd0.o\t\xc0bv\xac\xe2n\x878\xf7\xba\x16\xd6\xee\x94\xc8U\xf0\x15'",
|
|
||||||
"is_admin": False
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"email": "donald@gmail.com",
|
|
||||||
"hash_pass": "donaldPass",
|
|
||||||
"salt": "b'\xefM\xe5q\r\xb2\xc5\xff3\x88\x0c\x87\xa3\xe9F\xd7:\xc1\xc2J\xabvVR&\xe1-|D\xf5L '"
|
|
||||||
"is_admin": False
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"email": "daisy@gmail.com",
|
|
||||||
"hash_pass": "daisyPass",
|
|
||||||
"salt": "b'\x01\xefCC\x05\x1f\x85\xd8\xf0\x02\xd1\x1c\xcb\xab\xec\x87M\x03\xe5T\x05]\x11\xc45<}\xd3\xfbFA\xbb'"
|
|
||||||
"is_admin": True
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_user_object(i: int):
|
|
||||||
return Users(
|
|
||||||
id=TAB_USER[i]["id"],
|
|
||||||
email=TAB_USER[i]["email"],
|
|
||||||
login=TAB_USER[i]["login"],
|
|
||||||
hashPass=TAB_USER[i]["hashPass"],
|
|
||||||
isAdmin=TAB_USER[i]["isAdmin"]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def get_user_json(i: int):
|
|
||||||
return TAB_USER[i]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
def initialisation():
|
|
||||||
|
|
||||||
# supprimer: Riri, Fifi, Donald, Daisy
|
|
||||||
#
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
print("debut")
|
|
||||||
|
|
||||||
import sys
|
|
||||||
#sys.path.append( "../application" )
|
|
||||||
|
|
||||||
|
|
||||||
import os
|
|
||||||
os.chdir("../application")
|
|
||||||
print(os.getcwd())
|
|
||||||
from .api_functions import db_register
|
|
||||||
|
|
||||||
|
|
||||||
print("fin")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#def test_db_register():
|
|
||||||
#
|
|
||||||
# # success
|
|
||||||
# ip = "1.2.3.4.5"
|
|
||||||
# email = "homer@gmail.com"
|
|
||||||
# password = "homerPass"
|
|
||||||
# is_admin = False
|
|
||||||
# result1 = db_register(ip, email, password, is_admin)
|
|
||||||
# assert(result1["status"] == 0)
|
|
||||||
#
|
|
||||||
# # fail: user already exists
|
|
||||||
# result2 = db_register(ip, email, password, is_admin)
|
|
||||||
# assert(result2["status"] == 1)
|
|
||||||
#
|
|
||||||
# # delete the new user
|
|
||||||
# if result1["status"] == 0:
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#def test_db_login():
|
|
||||||
#
|
|
||||||
# # success
|
|
||||||
# result = db_login(ip, email, password)
|
|
||||||
# assert(result["status"] == 0)
|
|
||||||
#
|
|
||||||
# # fail: email doesn't exist
|
|
||||||
# result = db_login(ip, email, password)
|
|
||||||
# assert(result["status"] == 1)
|
|
||||||
#
|
|
||||||
# # fail: hashPass not correct
|
|
||||||
# assert(result["status"] == 1)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
# Third party modules
|
|
||||||
import pytest
|
|
||||||
from datetime import date
|
|
||||||
|
|
||||||
from __init__ import create_app, db
|
|
||||||
from users_model import Users
|
|
||||||
from logs_model import Logs
|
|
||||||
|
|
||||||
import fictive_users
|
|
||||||
import ficitve_logs
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def client():
|
|
||||||
app = create_app()
|
|
||||||
|
|
||||||
app.config["TESTING"] = True
|
|
||||||
app.testing = True
|
|
||||||
|
|
||||||
|
|
||||||
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
|
|
||||||
|
|
||||||
client = app.test_client()
|
|
||||||
with app.app_context():
|
|
||||||
db.create_all()
|
|
||||||
|
|
||||||
for i in range(1,6):
|
|
||||||
db.session.add(fictive_users.get_user_object(i))
|
|
||||||
|
|
||||||
for i in range(1,3):
|
|
||||||
db.session.add(ficitve_logs.get_log_object(i))
|
|
||||||
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
yield client
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_user(client):
|
|
||||||
index = 1
|
|
||||||
predict_results = client.get("/api/users/{}}".format(index))
|
|
||||||
true_results = fictive_users.get_user_json(index)
|
|
||||||
assert predict_results.json == true_results
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -9,9 +9,11 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- ./backend/init-db1.sql:/docker-entrypoint-initdb.d/init-db1.sql
|
- ./backend/init-db1.sql:/docker-entrypoint-initdb.d/init-db1.sql
|
||||||
environment:
|
environment:
|
||||||
|
- POSTGRES_HOST=flaskaled-srv1
|
||||||
|
- POSTGRES_PORT=5432
|
||||||
|
- POSTGRES_DB=flaskaledDb1
|
||||||
- POSTGRES_USER=flaskaled1
|
- POSTGRES_USER=flaskaled1
|
||||||
- POSTGRES_PASSWORD=aled1
|
- POSTGRES_PASSWORD=aled1
|
||||||
- POSTGRES_DB=flaskaledDb1
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
flaskaled-srv2:
|
flaskaled-srv2:
|
||||||
|
|
@ -22,32 +24,35 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- ./backend/init-db2.sql:/docker-entrypoint-initdb.d/init-db2.sql
|
- ./backend/init-db2.sql:/docker-entrypoint-initdb.d/init-db2.sql
|
||||||
environment:
|
environment:
|
||||||
|
- POSTGRES_HOST=flaskaled-srv2
|
||||||
|
- POSTGRES_PORT=5432
|
||||||
|
- POSTGRES_DB=flaskaledDb2
|
||||||
- POSTGRES_USER=flaskaled2
|
- POSTGRES_USER=flaskaled2
|
||||||
- POSTGRES_PASSWORD=aled2
|
- POSTGRES_PASSWORD=aled2
|
||||||
- POSTGRES_DB=flaskaledDb2
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
#
|
|
||||||
# backend:
|
backend:
|
||||||
# container_name: backend
|
container_name: backend
|
||||||
# build: ./backend
|
build: ./backend
|
||||||
# command: node server.js
|
ports:
|
||||||
# volumes:
|
- "5000:5000"
|
||||||
# - ./backend:/data/backend
|
volumes:
|
||||||
# ports:
|
- ./backend:/data/backend
|
||||||
# - "5000:5000"
|
depends_on:
|
||||||
# depends_on:
|
- flaskaled-srv1
|
||||||
# - flaskaled-srv1
|
- flaskaled-srv2
|
||||||
# - flaskaled-srv2
|
links:
|
||||||
# links:
|
- flaskaled-srv1
|
||||||
# - flaskaled-srv1
|
- flaskaled-srv2
|
||||||
# - flaskaled-srv2
|
environment:
|
||||||
# environment:
|
FLASK_APP: app.py
|
||||||
# FLASK_ENV: development
|
FLASK_ENV: development
|
||||||
# FLASK_DEBUG: 1
|
FLASK_DEBUG: 1
|
||||||
# #DATABASE_URL_USERS:
|
PYTHONUNBUFFERED: 1
|
||||||
# #DATABASE_URL_LOGS:
|
DATABASE_URL_USERS: postgresql://flaskaled1:aled1@flaskaled-srv1/flaskaledDb1
|
||||||
# #SECRET_KEY:
|
DATABASE_URL_LOGS: postgresql://flaskaled2:aled2@flaskaled-srv2/flaskaledDb2
|
||||||
# #ALLOW_ORIGIN:
|
#SECRET_KEY: default_secret_key
|
||||||
|
#ALLOW_ORIGIN: *
|
||||||
#
|
#
|
||||||
# frontend:
|
# frontend:
|
||||||
# container_name: frontend
|
# container_name: frontend
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue