1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00

Set minimum password length

This commit is contained in:
Mo 2022-05-29 19:03:54 +02:00
parent 06dd33fb55
commit 38e081df04
7 changed files with 21 additions and 17 deletions

View file

@ -20,14 +20,9 @@ load_dotenv(".env")
app = Flask(__name__) app = Flask(__name__)
app.config["SECURITY_EMAIL_VALIDATOR_ARGS"] = {
"check_deliverability": parse_bool(environ["CHECK_EMAIL_DELIVERABILITY"])
}
set_from_env(app, "SERVER_NAME") set_from_env(app, "SERVER_NAME")
set_from_env(app, "SECRET_KEY") set_from_env(app, "SECRET_KEY")
set_from_env(app, "SECURITY_PASSWORD_SALT")
app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///../{environ['RELATIVE_DB_DIR']}/advlab.db" app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///../{environ['RELATIVE_DB_DIR']}/advlab.db"
makedirs(environ["RELATIVE_DB_DIR"], exist_ok=True) makedirs(environ["RELATIVE_DB_DIR"], exist_ok=True)
@ -67,6 +62,12 @@ from . import models
user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role) user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role)
Security(app, user_datastore) Security(app, user_datastore)
app.config["SECURITY_EMAIL_VALIDATOR_ARGS"] = {
"check_deliverability": parse_bool(environ["CHECK_EMAIL_DELIVERABILITY"])
}
set_from_env(app, "SECURITY_PASSWORD_SALT")
app.config["SECURITY_PASSWORD_LENGTH_MIN"] = 15
try: try:
from . import routes, adminModelViews, assistantModelViews from . import routes, adminModelViews, assistantModelViews
except Exception as ex: except Exception as ex:

View file

@ -31,7 +31,7 @@ from wtforms.validators import URL, DataRequired, Email, NumberRange, Optional
from wtforms.widgets import NumberInput from wtforms.widgets import NumberInput
from . import adminSpace, app, assistantSpace, db, user_datastore from . import adminSpace, app, assistantSpace, db, user_datastore
from .advlabdb_independent_funs import flashRandomPassword, randomPassword from .advlabdb_independent_funs import flashRandomPassword
from .configUtils import getConfig from .configUtils import getConfig
from .customClasses import ( from .customClasses import (
CustomIdEndpointLinkRowAction, CustomIdEndpointLinkRowAction,
@ -46,6 +46,7 @@ from .model_dependent_funs import (
setUserActiveSemester, setUserActiveSemester,
sortedSemestersStartingWithNewest, sortedSemestersStartingWithNewest,
) )
from .model_independent_funs import randomPassword
from .models import ( from .models import (
MAX_MARK, MAX_MARK,
MAX_YEAR, MAX_YEAR,

View file

@ -1,15 +1,8 @@
# Functions not dependent on advlabdb # Functions not dependent on advlabdb
from random import choice
from string import ascii_letters, digits
from flask import flash from flask import flash
def randomPassword():
return "".join(choice(ascii_letters + digits) for i in range(15))
def flashRandomPassword(password): def flashRandomPassword(password):
flash(f"Random password: {password}", category="warning") flash(f"Random password: {password}", category="warning")

View file

@ -8,10 +8,11 @@ from wtforms.fields import DateField
from wtforms.validators import NumberRange, Optional from wtforms.validators import NumberRange, Optional
from . import assistantSpace, db from . import assistantSpace, db
from .advlabdb_independent_funs import flashRandomPassword, randomPassword from .advlabdb_independent_funs import flashRandomPassword
from .customClasses import SecureAssistantBaseView, SecureAssistantModelView from .customClasses import SecureAssistantBaseView, SecureAssistantModelView
from .exceptions import DataBaseException, ModelViewException from .exceptions import DataBaseException, ModelViewException
from .model_dependent_funs import initActiveSemesterMenuLinks from .model_dependent_funs import initActiveSemesterMenuLinks
from .model_independent_funs import randomPassword
from .models import ( from .models import (
MAX_MARK, MAX_MARK,
MIN_MARK, MIN_MARK,

View file

@ -1,8 +1,16 @@
# Functions not dependent on advlabdb.models # Functions not dependent on advlabdb.models
from random import choice
from string import ascii_letters, digits
from sqlalchemy import func, select from sqlalchemy import func, select
from . import db from . import app, db
def randomPassword():
password_length = app.config["SECURITY_PASSWORD_LENGTH_MIN"]
return "".join(choice(ascii_letters + digits) for i in range(password_length))
def reportBadAttempt(message): def reportBadAttempt(message):

View file

@ -2,7 +2,7 @@ from flask_security import admin_change_password
from sqlalchemy import select from sqlalchemy import select
from ... import app, db from ... import app, db
from ...advlabdb_independent_funs import randomPassword from ...model_independent_funs import randomPassword
from ...models import Admin, User from ...models import Admin, User
from ..terminal_utils import box, spaced_hl, validating_input from ..terminal_utils import box, spaced_hl, validating_input

View file

@ -2,7 +2,7 @@ from email_validator import validate_email
from flask_security import hash_password from flask_security import hash_password
from ... import app, db, user_datastore from ... import app, db, user_datastore
from ...advlabdb_independent_funs import randomPassword from ...model_independent_funs import randomPassword
from ...models import MAX_YEAR, MIN_YEAR, Admin, Semester from ...models import MAX_YEAR, MIN_YEAR, Admin, Semester
from ..terminal_utils import box, confirm, validating_input from ..terminal_utils import box, confirm, validating_input