Files
py_scicat/scicat/authmixin.py
NichtJens 7075338e67 first
2022-02-04 09:33:34 +01:00

53 lines
1.2 KiB
Python

import getpass
from abc import ABC, abstractmethod
from .config import Config
from .utils import typename
HEADER_JSON = {
"Content-type": "application/json",
"Accept": "application/json"
}
class AuthMixin(ABC):
def __init__(self, address):
self.address = address.rstrip("/")
self._token = None
tn = typename(self).lower()
self.config = Config(f".{tn}-tokens")
def __repr__(self):
tn = typename(self)
return f"{tn} @ {self.address}"
@abstractmethod
def authenticate(self, username, password):
raise NotImplementedError
@property
def token(self):
return self._retrieve_token()
def _retrieve_token(self):
username = input("Username: ")
token = self._token
if token is None:
try:
token = self.config[username]
except KeyError:
tn = typename(self)
password = getpass.getpass(prompt=f"{tn} password for {username}: ")
token = self.authenticate(username, password)
self.config[username] = self._token = token
return token
class AuthError(Exception):
pass