Example #1
0
 def ensure(self):
     user = (User.get_by_name(self.name) or User.get_by_email(self.email))
     if user is None:
         password = gen_salt(30)
         user = User.create_normal(self.name,
                                   password,
                                   self.email,
                                   is_active=True)
         deliver_email(EmailTemplate.SIGNUP, user.email, {
             'username': user.username,
             'password': password,
         })
     return user
Example #2
0
def request_to_reset_password(username):
    user = User.get_by_name(username)
    if not user or user.is_application:
        abort(404, u'user {0} not found'.format(username))
    if not user.email:
        abort(403, u'user {0} does not have email'.format(username))

    # Generate and record the token
    token = uuid.uuid4()
    _redis_client.set(
        raw_key=_PASSWORD_RESET_KEY.format(username=username),
        val=token.hex, expiration_time=_PASSWORD_RESET_DURATION)

    deliver_email(EmailTemplate.PASSWORD_RESET, user.email, {
        'username': user.username,
        'token': token,
        'expires_in': _PASSWORD_RESET_DURATION,
    })
    return user, token
Example #3
0
def test_deliver_email_with_client(mocker, app):
    class Client(AbstractMailClient):
        def __init__(self):
            self.s = {}

        def deliver_email(self, receiver, subject, message, cc):
            self.s.update(receiver=receiver,
                          subject=subject,
                          message=message,
                          cc=cc)

    t = EmailTemplate.DEBUG
    cc = ['*****@*****.**', '*****@*****.**']
    receiver = '*****@*****.**'
    c = Client()

    deliver_email(t, receiver, {'foo': 'bar'}, cc, client=c)
    assert c.s['receiver'] == receiver
    assert c.s['subject'] == t.value[1]
    assert c.s['cc'] == cc
Example #4
0
    def post(self):
        """Creates a new user with your site admin authority.

        We will send you an email of random password if don't specify password
        explicitly.

        :form username: The username of new user.
        :form password: The optional password of new user.
        :form email: The email of new user.
        :<header Authorization: Huskar Token (See :ref:`token`)
        :status 400: The username is used or the format is invalid.
        :status 200: The new user is created successfully.
        """
        g.auth.require_admin('only admin can add users')

        username = request.form['username'].strip()
        password = request.form.get('password', gen_salt(30))
        is_generated_password = '******' not in request.form
        email = request.form['email'].strip()
        validate_fields(user_schema, {'username': username, 'email': email})

        user = User.get_by_name(username)
        if user:
            abort(400, u'{0} is used username'.format(username))

        try:
            user = User.create_normal(username,
                                      password,
                                      email,
                                      is_active=True)
        except NameOccupiedError:
            abort(400, u'User %s has been archived' % username)
        audit_log.emit(audit_log.types.CREATE_USER, user=user)

        if is_generated_password:
            deliver_email(EmailTemplate.SIGNUP, user.email, {
                'username': user.username,
                'password': password,
            })

        return api_response()
Example #5
0
def deliver_email_safe(*args, **kwargs):
    try:
        deliver_email(*args, **kwargs)
    except EmailDeliveryError:
        logger.exception('Failed to deliver Email')
Example #6
0
def test_deliver_email_value_error():
    t = EmailTemplate.DEBUG

    with pytest.raises(ValueError):
        deliver_email(t, '*****@*****.**', {})