Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
        }))
Example #5
0
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