File: jupyter_server_config.py

package info (click to toggle)
jupyter-server 2.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,068 kB
  • sloc: python: 21,064; makefile: 186; sh: 25; javascript: 14
file content (34 lines) | stat: -rw-r--r-- 1,054 bytes parent folder | download
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