1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
"""Jupyter server system password identity provider example."""
import pwd
from getpass import getuser
from pamela import PAMError, authenticate
from jupyter_server.auth.identity import IdentityProvider, User
class SystemPasswordIdentityProvider(IdentityProvider):
"""A system password identity provider."""
# no need to generate a default token (token can still be used, but it's opt-in)
need_token = False
def process_login_form(self, handler):
"""Process a login form."""
username = getuser()
password = handler.get_argument("password", "")
try:
authenticate(username, password)
except PAMError as e:
self.log.error(f"Failed login for {username}: {e}")
return None
user_info = pwd.getpwnam(username)
# get human name from pwd, if not empty
return User(username=username, name=user_info.pw_gecos or username)
c = get_config() # type: ignore[name-defined]
c.ServerApp.identity_provider_class = SystemPasswordIdentityProvider
|