# -*- coding: utf-8 -*-## License: AGPLv3# This file is part of eduMFA. eduMFA is a fork of privacyIDEA which was forked from LinOTP.# Copyright (c) 2024 eduMFA Project-Team# Previous authors by privacyIDEA project:## 2015 Cornelius Kölbel <cornelius.koelbel@netknights.it>## (c) 2015. Cornelius Kölbel## This code is free software; you can redistribute it and/or# modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE# License as published by the Free Software Foundation; either# version 3 of the License, or any later version.## This code is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU AFFERO GENERAL PUBLIC LICENSE for more details.## You should have received a copy of the GNU Affero General Public# License along with this program. If not, see <http://www.gnu.org/licenses/>.#__doc__="""This module provides the PIN Handling base class.In case of enrolling a token, a PIN Handling class can be used tosend the PIN via Email, call an external program or print a letter.This module is not tested explicitly.It is tested in conjunction with the policy decorator init_random_pin intests/test_api_lib_policy.py"""importlogginglog=logging.getLogger(__name__)
[docs]classPinHandler:""" A PinHandler Class is responsible for handling the OTP PIN during enrollment. It receives the necessary data like * the PIN * the serial number of the token * the username * all other user data: * given name, surname * email address * telephone * mobile (if the module would deliver via SMS) * the administrator name (who enrolled the token) """def__init__(self,options=None):pass
[docs]defsend(self,pin,serial,user,tokentype=None,logged_in_user=None,userdata=None,options=None):""" :param pin: The PIN in cleartext :param user: the owner of the token :type user: user object :param tokentype: the type of the token :type tokentype: basestring :param logged_in_user: The logged in user, who enrolled the token :type logged_in_user: dict :param userdata: Handler-specific user data like email, mobile... :type userdata: dict :param options: Handler-specific additional options :type options: dict :return: True in case of success :rtype: bool """# The most simple way of handling a random PIN! ;-)log.info("handling pin {0!r} for token {1!s} of user {2!r}".format(pin,serial,user))log.info("The token was enrolled by {0!r}@{1!s}".format(logged_in_user.get("username"),logged_in_user.get("realm")))returnTrue