Пример #1
0
async def register(
    # Create the UserInRegister Model from the body
    user: models.UserInRegister = Body(...),
    db: AsyncIOMotorClient = Depends(db_get),
):
    # Check that the username and email is not taken by an existing user
    await check_username_email_is_free(db, user.username, user.email)

    async with await db.start_session() as session:
        async with session.start_transaction():
            # Construct a UserInDB Model from the given UserInRegister Model
            db_user = models.UserInDB(**user.dict())
            db_user.salt = get_salt()
            # Set the user's password
            db_user.hashed_password = hash_password(db_user.salt + user.password)

            # Insert the new user into the database
            result = await db[DATABASE_NAME].users.insert_one(db_user.dict())

            if not result.acknowledged:
                raise HTTPException(
                    status_code=HTTP_500_INTERNAL_SERVER_ERROR,
                    detail="Failed to create user",
                )

            # TODO Send out a verification email
            send_verification_email(user.username, user.email, result.inserted_id)
Пример #2
0
def add():
    form = AddDomainForm()
    if form.validate_on_submit():
        domain = Domain(domain=form.domain.data.lower().strip(),
                        email=form.email.data.lower().strip())
        send_verification_email(domain.domain, domain.email)

        db.session.add(domain)
        db.session.commit()

        flash('Domain {} added'.format(
            form.domain.data))

        return redirect('/index')

    return render_template('add.html', form=form)
Пример #3
0
def edit_user():
    user = token_auth.current_user()
    data = request.get_json() or {}
    if 'username' not in data and 'email' not in data and 'password' not in data:
        return bad_request('Must include at least one of: username, email, password')

    if 'username' in data:
        if data['username'] == user.username or not valid_username(data['username']):
            return bad_request('Data must contain valid username')

    if 'email' in data:
        if data['email'] == user.email or not valid_email(data['email']):
            return bad_request('Data must contain valid email')
        data['verified'] = False

    user.from_dict(data, new_user=True)
    send_verification_email(user)
    db.session.commit()
    return user.to_dict()
Пример #4
0
def register():
    if current_user.is_authenticated:
        return redirect(url_for('main.drive'))

    form = RegistrationForm()
    if form.validate_on_submit():
        user_data = {
            'username': form.username.data,
            'email': form.email.data,
            'password': form.password.data
        }
        user = User()
        user.from_dict(user_data, new_user=True)
        db.session.add(user)
        db.session.commit()
        send_verification_email(user)
        flash('Registration successfull, please verify your email')
        return redirect(url_for('auth.login'))

    return render_template('auth/register.html', form=form)
Пример #5
0
def create_user():
    data = request.get_json() or {}
    if 'username' not in data or 'email' not in data or 'password' not in data:
        return bad_request('Must include username, email and password fields')

    if User.query.filter_by(username=data['username']).first() or \
            not valid_username(data['username']):
        return bad_request('Data must contain valid username')

    if User.query.filter_by(email=data['email']).first() or \
            not valid_email(data['email']):
        return bad_request('Data must contain valid email')

    user = User()
    user.from_dict(data, new_user=True)
    db.session.add(user)
    db.session.commit()
    send_verification_email(user)
    response = jsonify(user.to_dict())
    response.status_code = 201
    return response
Пример #6
0
def verify_email_request():
    if current_user.verified:
        return redirect(url_for('main.drive'))

    send_verification_email(current_user)
    return render_template('auth/verify_email_request.html')
Пример #7
0
def resend_verification_email():
    user = token_auth.current_user()
    if user.verified:
        return bad_request('User already verified')
    send_verification_email(user)
    return '', 204