Parcourir la source

Merge branch 'logging' of sindre/Beelance into master

pull/38/head
Sindre Stephansen il y a 5 ans
Parent
révision
4795a4fc90
11 fichiers modifiés avec 74 ajouts et 37 suppressions
  1. +1
    -0
      .gitignore
  2. +8
    -10
      docker-compose.yml
  3. +6
    -1
      src/app/main.py
  4. +23
    -16
      src/app/models/project.py
  5. +5
    -1
      src/app/models/register.py
  6. +6
    -3
      src/app/models/session.py
  7. +8
    -5
      src/app/models/user.py
  8. +2
    -1
      src/app/uwsgi.ini
  9. +7
    -0
      src/app/views/login.py
  10. +4
    -0
      src/app/views/register.py
  11. +4
    -0
      src/entrypoint.sh

+ 1
- 0
.gitignore Voir le fichier

@@ -1,2 +1,3 @@
__pycache__
src/app/sessions/
logs/

+ 8
- 10
docker-compose.yml Voir le fichier

@@ -1,6 +1,5 @@
version: "2"
services:

db:
build:
context: ./mysql
@@ -11,11 +10,12 @@ services:

app:
env_file:
- .env
build:
context: ./src
dockerfile: Dockerfile

- .env
build:
context: ./src
dockerfile: Dockerfile
volumes:
- ./logs/:/logs/:rw
ports:
- "80${groupid}:8080"
- "4${groupid}:443"
@@ -26,10 +26,8 @@ services:
ipv4_address: 10.${groupid}.0.6

networks:
backend:
driver: bridge
ipam:
config:
- subnet: 10.${groupid}.0.0/18
config:
- subnet: 10.${groupid}.0.0/18

+ 6
- 1
src/app/main.py Voir le fichier

@@ -1,6 +1,11 @@
from views.app import app
import logging

logging.basicConfig(
filename='/logs/beelance.log',
filemode='a',
level=logging.INFO,
)

if __name__ == "__main__":
app.run()


+ 23
- 16
src/app/models/project.py Voir le fichier

@@ -1,6 +1,10 @@
from models.database import db
import logging
import mysql.connector

logger = logging.getLogger(__name__)


def get_categories():
"""
Get all categories
@@ -14,7 +18,7 @@ def get_categories():
cursor.execute(query)
categories = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
categories = []
cursor.fetchall()
exit(1)
@@ -23,6 +27,7 @@ def get_categories():
db.close()
return categories


def set_project(categoryid, userid, project_title, project_description, project_status):
"""
Store a project in the database
@@ -48,7 +53,7 @@ def set_project(categoryid, userid, project_title, project_description, project_
users_projects = get_projects_by_owner(userid)
projectid = users_projects[-1][0]
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
projectid = None
cursor.fetchall()
exit(1)
@@ -57,6 +62,7 @@ def set_project(categoryid, userid, project_title, project_description, project_
db.close()
return projectid


def get_project_by_id(projectid):
"""
Retrieve a project by its id
@@ -72,7 +78,7 @@ def get_project_by_id(projectid):
cursor.execute(query, (projectid,))
project = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
project = []
cursor.fetchall()
exit(1)
@@ -81,6 +87,7 @@ def get_project_by_id(projectid):
db.close()
return project[0]


def update_project_status(projectid, status):
"""
Change the status of a selected project
@@ -96,13 +103,14 @@ def update_project_status(projectid, status):
cursor.execute(query, (status, projectid))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
cursor.close()
db.close()


def get_user_permissions(userid, projectid):
"""
Get permissions for a selected users in a specific project
@@ -120,7 +128,7 @@ def get_user_permissions(userid, projectid):
cursor.execute(query, (projectid, userid))
permissions = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -154,7 +162,7 @@ def get_projects_by_status_and_category(categoryid, project_status):
cursor.execute(query, (project_status, categoryid))
projects = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
projects = []
cursor.fetchall()
exit(1)
@@ -178,7 +186,7 @@ def get_projects_by_owner(userid):
cursor.execute(query, (userid,))
projects = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
projects = []
cursor.fetchall()
exit(1)
@@ -206,7 +214,7 @@ def get_projects_by_status_and_owner(userid, project_status):
cursor.execute(query, (project_status, userid))
projects = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
projects = []
cursor.fetchall()
exit(1)
@@ -230,12 +238,11 @@ def get_projects_by_participant_and_status(userid, project_status):
cursor = db.cursor()
query = ("SELECT * FROM projects, projects_users WHERE projects.project_status = %s AND " +
"projects_users.userid = %s AND projects_users.projectid = projects.projectid")
db.connect()
try:
cursor.execute(query, (project_status, userid))
projects = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
projects = []
cursor.fetchall()
exit(1)
@@ -266,7 +273,7 @@ def set_task(projectid, task_title, task_description, budget):
cursor.execute(query, (projectid, task_title, task_description, budget))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -282,7 +289,7 @@ def update_task_status(taskid, status):
cursor.execute(query, (status, taskid))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -305,7 +312,7 @@ def get_tasks_by_project_id(projectid):
cursor.execute(query, (projectid,))
tasks = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
tasks = []
cursor.fetchall()
exit(1)
@@ -331,7 +338,7 @@ def set_task_file(taskid, filename):
cursor.execute(query, (taskid, filename))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -353,7 +360,7 @@ def get_task_files(taskid):
cursor.execute(query, (str(taskid),))
filenames = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
filenames = []
cursor.fetchall()
exit(1)
@@ -384,7 +391,7 @@ def set_projects_user(projectid, userid, read_permission="TRUE",
cursor.execute(query, (projectid, userid, read_permission, write_permission, modify_permission))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:


+ 5
- 1
src/app/models/register.py Voir le fichier

@@ -1,6 +1,10 @@
from models.database import db
import logging
import mysql.connector

logger = logging.getLogger(__name__)


def set_user(username, password, full_name, company, email,
street_address, city, state, postal_code, country):
"""
@@ -34,7 +38,7 @@ def set_user(username, password, full_name, company, email,
city, state, postal_code, country))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:


+ 6
- 3
src/app/models/session.py Voir le fichier

@@ -1,6 +1,9 @@
from models.database import db
import logging
import mysql.connector

logger = logging.getLogger(__name__)


def set_cookie(userid, token, expiry):
"""
@@ -16,7 +19,7 @@ def set_cookie(userid, token, expiry):
cursor.execute(query, (userid, token, expiry))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -42,7 +45,7 @@ def get_cookie(token):
userid = users[0][0]
expiry = users[0][1]
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -65,7 +68,7 @@ def delete_cookie(token):
cursor.execute(query, (token,))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:


+ 8
- 5
src/app/models/user.py Voir le fichier

@@ -1,6 +1,9 @@
from models.database import db
import logging
import mysql.connector

logger = logging.getLogger(__name__)


def get_user(username):
"""
@@ -20,7 +23,7 @@ def get_user(username):
if len(users):
user = users[0]
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -41,7 +44,7 @@ def get_users():
cursor.execute(query)
users = cursor.fetchall()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
users = []
cursor.fetchall()
exit(1)
@@ -62,7 +65,7 @@ def set_login_attempts(userid, num, timestamp):
cursor.execute(query, (num, timestamp, userid))
db.commit()
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -87,7 +90,7 @@ def get_user_id_by_name(username):
if(len(users)):
userid = users[0][0]
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:
@@ -112,7 +115,7 @@ def get_user_name_by_id(userid):
if len(users):
username = users[0][0]
except mysql.connector.Error as err:
print("Failed executing query: {}".format(err))
logger.error("Failed executing query: %s", err)
cursor.fetchall()
exit(1)
finally:


+ 2
- 1
src/app/uwsgi.ini Voir le fichier

@@ -1,3 +1,4 @@
[uwsgi]
module = main
callable = app
callable = app
logto = /logs/uwsgi.log

+ 7
- 0
src/app/views/login.py Voir le fichier

@@ -3,11 +3,14 @@ from views.forms import login_form
from views.utils import get_nav_bar, csrf_protected
import models.session
import models.user
import logging
import random
import string
import bcrypt
import time

logger = logging.getLogger(__name__)

# Get html templates
render = web.template.render('templates/')

@@ -60,10 +63,14 @@ class Login():
return render.login(nav, login_form, "- There have been too many incorrect login attempts for your account. You have to wait a minute before you can log in.")

if bcrypt.checkpw(data.password.encode('UTF-8'), password_hash.encode('UTF-8')):
if login_attempts > login_attempts_threshold:
logger.info("User %s logged in succesfully after %s attempts", username, login_attempts)

models.user.set_login_attempts(userid, 0, time.time())
self.login(username, userid, data.remember)
raise web.seeother("/")
else:
logger.warning("Incorrect login attempt on user %s by IP %s", username, web.ctx.ip)
models.user.set_login_attempts(userid, login_attempts+1, time.time())
if login_attempts == login_attempts_threshold:
return render.login(nav, login_form, "- Too many incorrect login attempts. You have to wait a minute before trying again.")


+ 4
- 0
src/app/views/register.py Voir le fichier

@@ -3,9 +3,12 @@ from views.forms import register_form
from views.utils import get_nav_bar, csrf_protected, password_weakness
import models.register
import models.user
import logging
import bcrypt
import re

logger = logging.getLogger(__name__)

# Get html templates
render = web.template.render('templates/')

@@ -52,4 +55,5 @@ class Register:
data.email, data.street_address, data.city, data.state,
data.postal_code, data.country)

logger.info("User %s registered", data.username)
return render.register(nav, register_form, "User registered!")

+ 4
- 0
src/entrypoint.sh Voir le fichier

@@ -24,6 +24,8 @@ content_server=$content_server' }\n'
content_server=$content_server" location $USE_STATIC_URL {\n"
content_server=$content_server" alias $USE_STATIC_PATH;\n"
content_server=$content_server' }\n'
content_server=$content_server" error_log /logs/error_log_http.log warn;\n"
content_server=$content_server" access_log /logs/access_log_http.log;\n"
content_server=$content_server'}\n'


@@ -44,6 +46,8 @@ content_server=$content_server' }\n'
content_server=$content_server" location $USE_STATIC_URL {\n"
content_server=$content_server" alias $USE_STATIC_PATH;\n"
content_server=$content_server' }\n'
content_server=$content_server" error_log /logs/error_log_https.log warn;\n"
content_server=$content_server" access_log /logs/access_log_https.log;\n"
content_server=$content_server'}\n'




Chargement…
Annuler
Enregistrer