Implement Admin approval (#29)

This PR fixes #7

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#29
This commit is contained in:
2025-07-19 06:42:50 +12:00
parent 9323a9f7d7
commit 4fff78541b
4 changed files with 21 additions and 9 deletions

View File

@ -140,6 +140,7 @@ EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']
EMAIL_PORT = 587
AUTH_USER_MODEL = "epdb.User"
ADMIN_APPROVAL_REQUIRED = os.environ.get('ADMIN_APPROVAL_REQUIRED', 'False') == 'True'
# # SESAME
# SESAME_MAX_AGE = 300
@ -236,8 +237,9 @@ LOGGING = {
ENVIFORMER_PRESENT = os.environ.get('ENVIFORMER_PRESENT', 'False') == 'True'
if ENVIFORMER_PRESENT:
print("Loading enviFormer")
device = os.environ.get('ENVIFORMER_DEVICE', 'cpu')
from enviformer import load
ENVIFORMER_INSTANCE = load()
ENVIFORMER_INSTANCE = load(device=device)
print("loaded")

View File

@ -4,6 +4,7 @@ from typing import Union, List, Optional, Set, Dict
from django.contrib.auth import get_user_model
from django.db import transaction
from django.conf import settings as s
from epdb.models import User, Package, UserPackagePermission, GroupPackagePermission, Permission, Group, Setting, \
EPModel, UserSettingPermission, Rule, Pathway, Node, Edge
@ -12,11 +13,15 @@ logger = logging.getLogger(__name__)
class UserManager(object):
@staticmethod
def create_user(username, email, password):
def create_user(username, email, password, *args, **kwargs):
# avoid circular import :S
from .tasks import send_registration_mail
# TODO flip to False
u = get_user_model().objects.create_user(username, email, password, is_active=True)
is_active = not s.ADMIN_APPROVAL_REQUIRED
if 'is_active' in kwargs:
is_active = kwargs['is_active']
u = get_user_model().objects.create_user(username, email, password, is_active=is_active)
# Create package
package_name = f"{u.username}{'' if u.username[-1] in 'sxzß' else 's'} Package"

View File

@ -13,12 +13,12 @@ class Command(BaseCommand):
def create_users(self):
if not User.objects.filter(email='anon@lorsba.ch').exists():
anon = UserManager.create_user("anonymous", "anon@lorsba.ch", "SuperSafe")
anon = UserManager.create_user("anonymous", "anon@lorsba.ch", "SuperSafe", is_active=True)
else:
anon = User.objects.get(email='anon@lorsba.ch')
if not User.objects.filter(email='admin@lorsba.ch').exists():
admin = UserManager.create_user("admin", "admin@lorsba.ch", "SuperSafe",)
admin = UserManager.create_user("admin", "admin@lorsba.ch", "SuperSafe", is_active=True)
admin.is_staff = True
admin.is_superuser = True
admin.save()
@ -36,7 +36,7 @@ class Command(BaseCommand):
admin.save()
if not User.objects.filter(email='jebus@lorsba.ch').exists():
jebus = UserManager.create_user("jebus", "jebus@lorsba.ch", "SuperSafe",)
jebus = UserManager.create_user("jebus", "jebus@lorsba.ch", "SuperSafe", is_active=True)
jebus.is_staff = True
jebus.is_superuser = True
jebus.save()

View File

@ -1176,9 +1176,14 @@ def users(request):
username = request.POST.get('username')
password = request.POST.get('password')
# Get email for username
# Get email for username and check if account is active
try:
email = get_user_model().objects.get(username=username).email
temp_user = get_user_model().objects.get(username=username)
if not temp_user.is_active:
return render(request, 'errors/user_account_inactive.html', status=403)
email = temp_user.email
except get_user_model().DoesNotExists:
return HttpResponseBadRequest()