Source code for ulaval_notify.api.login

"""This module handles the login to monPortail API.

:copyright: (c) 2018 by Antoine Gagné.
:license: MIT, see LICENSE for more details.
"""

import re
import json

from collections import namedtuple

from .constants import (AUTHENTICATION_PAGE_URL,
                        COOKIE_REGEX,
                        LOCATION_URL)
from .session import SessionManager


#: Immutable type to hold the user's *IDUL* and the *password*
User = namedtuple('User', ['username', 'password'])


[docs]def login(session, user): """Login to monPortail API as the specified user. :param session: The HTTP session to use for the requests :param user: The user's credentials (IDUL and password) :returns: A session manager that handles refreshing the token and can make authenticated requests to the API """ session.get(LOCATION_URL) url = '{0}/my.policy'.format(AUTHENTICATION_PAGE_URL) parameters = user._asdict() parameters.update({'vhost': 'standard', 'rememberMe': '0'}) response = session.post(url, params=parameters) match = re.search(COOKIE_REGEX, response.text) cookie_content = json.loads(json.loads(match.group('cookie_content'))) return SessionManager(session, match.group('cookie_name'), cookie_content)