Source code for snakeface.apps.users.utils

__author__ = "Vanessa Sochat"
__copyright__ = "Copyright 2020, Vanessa Sochat"
__license__ = "MPL 2.0"

import uuid
import os


[docs]def get_notebook_token(request, verbose=True): """If a notebook token isn't defined, generate it (and print to the console) The token is used to generate a user to log the user in. """ # If the user has already logged in, return current token token = request.session.get("notebook_token") # The user session has ended, but has authenticated before user = get_notebook_user() if request.user.is_authenticated: token = request.user.notebook_token # Second attempt, see if user has logged in before and retrieve token elif user: token = user.notebook_token if not token: token = str(uuid.uuid4()) user = get_or_create_notebook_user(token) request.session["notebook_token"] = token request.session.modified = True if verbose: print("Enter token: %s" % token) return token
[docs]def get_username(): """get the username based on the effective uid. This is for a notebook execution, and doesn't add any additional security, but rather is used for personalization and being able to create an associated django user. """ try: import pwd return pwd.getpwuid(os.getuid())[0] except: return "snakeface-user"
[docs]def get_notebook_user(): """Get the notebook user, if they have logged in before.""" from snakeface.apps.users.models import User from snakeface.settings import cfg try: return User.objects.get(username=cfg.USERNAME) except: return None
[docs]def get_or_create_notebook_user(token): """Get or create the notebook user. Imports are done in the function because Django startup (settings.py) uses these functions. """ from snakeface.apps.users.models import User from snakeface.settings import cfg try: user = User.objects.get(username=cfg.USERNAME) except: user = User.objects.create_user(cfg.USERNAME, None, token) user.notebook_token = token user.save() return user