def send_recovery_link(username): """ Invia una mail per il recupero password :param username: cf/username dell'operatore :return: StatusCode """ try: operator = get_operator_by_username(username) if operator: if operator.status: params = { 'username': operator.fiscalNumber, 'name': operator.name, 'familyName': operator.surname, 'email': operator.email, } rao = get_attributes_RAO() t = signing.dumps(params) mail_elements = { 'base_url': BASE_URL, 'nameUser': operator.name, 'familyNameUser': operator.surname, 'rao_name': rao.name } create_verify_mail_token(operator.email, t) send_email( [operator.email], "Recupero password R.A.O.", settings.TEMPLATE_URL_MAIL + 'mail_recovery_password.html', { 'activation_link': settings.BASE_URL + str(reverse('agency:redirect', kwargs={'t': t}))[1:], 'mail_elements': mail_elements }) return StatusCode.OK.value else: return StatusCode.ERROR.value return StatusCode.NOT_FOUND.value except Exception as e: LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip()) return StatusCode.EXC.value
def send_recovery_link(username, page): """ Invia una mail per il recupero password :param page: :param username: cf/username dell'operatore :return: StatusCode """ try: operator = get_operator_by_username(username) if operator: params = { 'username': operator.fiscalNumber, 'name': operator.name, 'familyName': operator.surname, 'email': operator.email, } rao = get_attributes_RAO() mail_elements = { 'base_url': BASE_URL, 'nameUser': operator.name, 'familyNameUser': operator.surname, 'rao_name': rao.name, 'to_change': 'password' } mail_title = "Recupero password R.A.O." if page == PageRedirect.CHANGE_PIN.value: params['change_pin'] = True mail_elements['to_change'] = 'PIN' mail_title = "Recupero PIN R.A.O." else: params['recovery'] = True t = signing.dumps(params) create_verify_mail_token(operator.email, t) email_status_code = send_email( [operator.email], mail_title, settings.TEMPLATE_URL_MAIL + 'mail_recovery_password.html', { 'activation_link': settings.BASE_URL + str(reverse('agency:redirect', kwargs={'t': t}))[1:], 'mail_elements': mail_elements }) return email_status_code return StatusCode.NOT_FOUND.value except Exception as e: LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip()) return StatusCode.EXC.value
def update_emailrao(op, rao_name, rao_email, rao_host, rao_pwd, email_crypto_type, email_port, smtp_mail_from=""): """ Aggiorna la tabella impostazioni del RAO :param op: operatore (admin) che effettua l'operazione di aggiornamento :param rao_name: nome del Rao :param rao_email: nome di chi invia l'email :param rao_host: host dell'email :param rao_pwd: password dell'email :param email_crypto_type: tipo di Crittografia (Nessuna/TLS/SSL) :param email_port: porta in uscita :param smtp_mail_from: server mail SMTP :return: True/False """ try: entry_rao = get_attributes_RAO() if not entry_rao: return False else: password = agency.utils.utils.encrypt_data(rao_pwd, settings.SECRET_KEY_ENC) tmp_settings = TempMailSettings(smtp_mail_from, rao_email, rao_host, password=password, email_port=email_port, email_crypto_type=email_crypto_type) mail_elements = { 'base_url': BASE_URL, 'nameUser': op.name, 'familyNameUser': op.surname, 'rao_name': rao_name } mail_sent = send_email([op.email], "Email di prova", settings.TEMPLATE_URL_MAIL + 'verify_mail_address.html', {'mail_elements': mail_elements}, conn_settings=tmp_settings) if mail_sent == StatusCode.OK.value: entry_rao.email = smtp_mail_from entry_rao.username = rao_email entry_rao.host = rao_host entry_rao.password = password entry_rao.port = email_port entry_rao.crypto = email_crypto_type entry_rao.save() return True else: LOG.error("Errore nell'invio della mail", extra=agency.utils.utils.set_client_ip()) return False except Exception as e: ype, value, tb = sys.exc_info() LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip()) LOG.error('exception_value = %s, value = %s' % (value, type,), extra=agency.utils.utils.set_client_ip()) LOG.error('tb = %s' % traceback.format_exception(type, value, tb), extra=agency.utils.utils.set_client_ip()) return False
def resend_mail_activation(request, page, t): """ Invia nuovamente la mail di attivazione :param request: :param page: pagina della lista degli operatori da mostrare :param t: token :return: """ try: operator = get_operator_by_username(request.POST.get('username_op')) if operator and operator.idRole.role is not RoleTag.ADMIN.value: pin = request.POST.get('pinField') status_code_reset, tmp_pin = reset_pin_api( pin, request.session.get('username'), request.POST.get('username_op')) if status_code_reset == StatusCode.OK.value: status_code_disable = disable_operator_api( pin, request.session.get('username'), request.POST.get('username_op')) if status_code_disable == StatusCode.OK.value: request.session['pin'] = tmp_pin operator.signStatus = False operator.save() params_t = signing.loads(t) params_t['operator'] = request.POST.get('username_op') t = signing.dumps(params_t) params = { 'username': operator.fiscalNumber, 'name': operator.name, 'familyName': operator.surname, 'email': operator.email, 'pin': tmp_pin, } t_mail = signing.dumps(params) rao = get_attributes_RAO() mail_elements = { 'base_url': BASE_URL, 'nameUser': operator.name, 'familyNameUser': operator.surname, 'rao_name': rao.name, 'pin': tmp_pin, 'is_admin': False } create_verify_mail_token(operator.email, t_mail) status_email = send_email( [operator.email], "Attivazione account R.A.O.", settings.TEMPLATE_URL_MAIL + 'mail_activation.html', { 'activation_link': settings.BASE_URL + str( reverse('agency:redirect', kwargs={'t': t_mail}))[1:], 'mail_elements': mail_elements }) if status_email == StatusCode.OK.value: LOG.info( "{}, {} - Mail di attivazione reinviata".format( request.session.get('username'), request.POST.get('username_op')), extra=agency.utils.utils.set_client_ip(request)) else: LOG.warning( "{}, {} - Errore durante l'invio mail di attivazione" .format(request.session.get('username'), request.POST.get('username_op')), extra=agency.utils.utils.set_client_ip(request)) except Exception as e: LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip(request)) return HttpResponseRedirect( reverse('agency:list_operator', kwargs={ 'page': page, 't': t }))
def create_operator(admin_username, operator): """ Creazione di un operatore con ruolo Operator :param admin_username: username dell'admin :param operator: request.POST contenente i dati del nuovo operatore :return: StatusCode, pin nuovo operatore (in caso di StatusCode = 200) """ name = agency.utils.utils.fix_name_surname(operator.get('name')) surname = agency.utils.utils.fix_name_surname(operator.get('familyName')) try: password = hashlib.sha256('password'.encode()).hexdigest() hash_pass_insert = jwt.encode( { 'username': operator.get('fiscalNumber').upper(), 'exp': datetime.datetime.utcnow() }, password, algorithm='HS256') new_operator = Operator.objects.create( name=name, surname=surname, fiscalNumber=operator.get('fiscalNumber').upper(), email=operator.get('email'), idRole=Role.objects.get(role=RoleTag.OPERATOR.value), password=hash_pass_insert.decode("UTF-8"), status=False) except Exception as e: LOG.warning( "admin: {}, operator: {} - Codice fiscale/email operatore gà presente" .format(admin_username, operator.get('fiscalNumber').upper()), extra=agency.utils.utils.set_client_ip()) return StatusCode.ERROR.value, None try: status_code, op_temporary_pin = create_api( operator.get('pinField'), admin_username, operator.get('fiscalNumber').upper()) if status_code != StatusCode.OK.value: new_operator.delete() return StatusCode.EXC.value, None params = { 'username': new_operator.fiscalNumber, 'name': new_operator.name, 'familyName': new_operator.surname, 'email': new_operator.email, 'pin': op_temporary_pin, } t = signing.dumps(params) rao = get_attributes_RAO() mail_elements = { 'base_url': BASE_URL, 'nameUser': new_operator.name, 'familyNameUser': new_operator.surname, 'rao_name': rao.name, 'pin': op_temporary_pin, 'is_admin': False } create_verify_mail_token(new_operator.email, t) mail_sended = send_email( [new_operator.email], "Attivazione account R.A.O.", settings.TEMPLATE_URL_MAIL + 'mail_activation.html', { 'activation_link': settings.BASE_URL + str(reverse('agency:redirect', kwargs={'t': t}))[1:], 'mail_elements': mail_elements }) if not mail_sended: return StatusCode.BAD_REQUEST.value, None except Exception as e: LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip()) return StatusCode.EXC.value, None return StatusCode.OK.value, op_temporary_pin
def test_emailrao(op, rao_name, rao_email, rao_host, rao_pwd, email_crypto_type, email_port, smtp_mail_from=""): """ Invia un'email di prova all'indirizzo di posta del Security Officer :param op: operatore (admin) che effettua l'operazione di aggiornamento :param rao_name: nome del Rao :param rao_email: nome di chi invia l'email :param rao_host: host dell'email :param rao_pwd: password dell'email :param email_crypto_type: tipo di Crittografia (Nessuna/TLS/SSL) :param email_port: porta in uscita :param smtp_mail_from: server mail SMTP :return: True/False """ try: password = agency.utils.utils.encrypt_data(rao_pwd, settings.SECRET_KEY_ENC) tmp_settings = TempMailSettings(smtp_mail_from, rao_email, rao_host, password=password, email_port=email_port, email_crypto_type=email_crypto_type) mail_elements = { 'base_url': BASE_URL, 'nameUser': op.name, 'familyNameUser': op.surname, 'rao_name': rao_name, 'message': "la configurazione dell'email SMTP scelta è corretta." } mail_sent = send_email([op.email], "Email di prova", settings.TEMPLATE_URL_MAIL + 'verify_mail_address.html', {'mail_elements': mail_elements}, conn_settings=tmp_settings) if mail_sent == StatusCode.OK.value: return True else: LOG.error("Errore nell'invio della mail", extra=agency.utils.utils.set_client_ip()) return False except Exception as e: ype, value, tb = sys.exc_info() LOG.error("Exception: {}".format(str(e)), extra=agency.utils.utils.set_client_ip()) LOG.error('exception_value = %s, value = %s' % ( value, type, ), extra=agency.utils.utils.set_client_ip()) LOG.error('tb = %s' % traceback.format_exception(type, value, tb), extra=agency.utils.utils.set_client_ip()) return False