"""The endpoints for login_link objects.
SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
"""
import os
import typing as t
import cg_request_args as rqa
from cg_maybe import Maybe, Nothing
from .. import parsers, utils
if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
from .. import client
from ..models.assignment_login_link import AssignmentLoginLink
from ..models.user_login_response import UserLoginResponse
_ClientT = t.TypeVar("_ClientT", bound="client._BaseClient")
[docs]class LoginLinkService(t.Generic[_ClientT]):
__slots__ = ("__client",)
def __init__(self, client: _ClientT) -> None:
self.__client = client
[docs] def get(
self,
*,
login_link_id: "str",
extra_parameters: t.Optional[
t.Mapping[str, t.Union[str, bool, int, float]]
] = None,
) -> "AssignmentLoginLink":
"""Get a login link and the connected assignment.
:param login_link_id: The id of the login link you want to get.
:param extra_parameters: The extra query parameters you might want to
add. By default no extra query parameters are added.
:returns: The requested login link, which will also contain information
about the connected assignment.
"""
url = "/api/v1/login_links/{loginLinkId}".format(
loginLinkId=login_link_id
)
params = extra_parameters or {}
with self.__client as client:
resp = client.http.get(url=url, params=params)
utils.log_warnings(resp)
if utils.response_code_matches(resp.status_code, 200):
from ..models.assignment_login_link import AssignmentLoginLink
return parsers.JsonResponseParser(
parsers.ParserFor.make(AssignmentLoginLink)
).try_parse(resp)
from ..models.any_error import AnyError
raise utils.get_error(
resp,
(
(
(400, 409, 401, 403, 404, 429, 500),
utils.unpack_union(AnyError),
),
),
)
[docs] def login(
self,
*,
login_link_id: "str",
extra_parameters: t.Optional[
t.Mapping[str, t.Union[str, bool, int, float]]
] = None,
) -> "UserLoginResponse":
"""Login with the given login link.
This will only work when the assignment connected to this link is
available, and the lock date has not expired. The received JWT token
will only be valid until the 30 minutes after the lock date, and only
in the course connected to this link.
The scope of the returned token will change in the future, this will
not be considered a breaking change.
:param login_link_id: The id of the login link you want to use to
login.
:param extra_parameters: The extra query parameters you might want to
add. By default no extra query parameters are added.
:returns: The logged in user and an access token.
"""
url = "/api/v1/login_links/{loginLinkId}/login".format(
loginLinkId=login_link_id
)
params = extra_parameters or {}
with self.__client as client:
resp = client.http.post(url=url, params=params)
utils.log_warnings(resp)
if utils.response_code_matches(resp.status_code, 200):
from ..models.user_login_response import UserLoginResponse
return parsers.JsonResponseParser(
parsers.ParserFor.make(UserLoginResponse)
).try_parse(resp)
from ..models.any_error import AnyError
raise utils.get_error(
resp,
(
(
(400, 409, 401, 403, 404, 429, 500),
utils.unpack_union(AnyError),
),
),
)