Ejemplo n.º 1
0
def password_reset(username, code):
    """password_reset(str, str) -> returns template

       The view function allows the user to reset their forgotten password

       :params
          `username`: The user's username
          `code`: The forgotten code sent to the user email account

       :returns
          returns a template
    """

    form, error = NewPasswordForm(), None
    user = User(username=username)

    if not user.Account.Password.is_forgotten_password_code_valid(code):
        abort(404)
    if form.validate_on_submit() and user.Account.Password.reset_password(
            form):
        user.Account.Password.email_user_about_password_change()
        return redirect(url_for('password_app.password_successful_changed'))

    return render_template('password/password_reset.html',
                           form=form,
                           error=error,
                           username=username,
                           code=code)
Ejemplo n.º 2
0
 def post(self):
     try:
         new_user = UserSchema(exclude=['role']).load(request.json).data
     except ValidationError as err:
         return err.messages, status.HTTP_400_BAD_REQUEST
     try:
         new_user = User(email=new_user['email'],
                         password=new_user['password'],
                         first_name=new_user['first_name'],
                         last_name=new_user['last_name'],
                         role_id=1)
     except KeyError:
         return {'error': "Missing required field"}
     db.session.add(new_user)
     try:
         db.session.commit()
     except IntegrityError as err:
         db.session.emarollback()
         response = {'error': 'Already exists.'}
         return response, status.HTTP_400_BAD_REQUEST
     session.permanent = True
     access_token = create_access_token(identity=new_user.user_id,
                                        expires_delta=False)
     session[AUTH_TOKEN_KEY] = access_token
     response_obj = jsonify({'message': 'Successfully registered.'})
     response_obj.set_cookie("admin", str(False))
     return make_response(response_obj, status.HTTP_200_OK)
Ejemplo n.º 3
0
    def register(params, login=True, commit=True):
        """
        Create / register a user.
        """

        if UserQueries.get_by_login(params.get("username", "")):
            raise UserServicesException(
                'User with given username exists already.')

        user = User()
        model_fields = get_fields(User)

        # apply all fields to object.
        set_fields_from_dict(user, params, model_fields)

        user.login = params.get("username")
        user.password = generate_password_hash(params.get("password"))

        if commit:
            db.session.add(user)
            db.session.commit()

        if login:
            login_user(user)

        return user
Ejemplo n.º 4
0
def forgot():
    """This view function allows the user to request for a password reset link"""

    form, msg = ForgottenPasswordForm(), ''

    if form.validate_on_submit():
        user = User(email=form.email.data)

        if user.Account.Password.generate_forgotten_password_code():
            user.Account.Password.email_user_forgotten_password_code_link()
            return redirect(url_for('password_app.reset_link_sent'))

    return render_template('password/forgot_password.html', form=form)
Ejemplo n.º 5
0
    def run(self):
        prod = input("Is this a production seed? [yes/no]" + "\n")

        if str(prod).lower() == "yes" and not self.check_safe():
            return

        bcrypt = Bcrypt(flask.current_app)
        db = SQLAlchemy(flask.current_app)

        # seed roles
        from users.models.role import Role

        admin_role = Role(
            name="administrator",
            display_name="Administrator",
            description="Can administrate site",
        )
        db.session.add(admin_role)

        writer_role = Role(name="writer",
                           display_name="Writer",
                           description="Can write posts for site")
        db.session.add(writer_role)

        user_role = Role(name="user",
                         display_name="User",
                         description="Basic user")
        db.session.add(user_role)

        # seed user
        admin_username = flask.current_app.config["ADMIN_INIT_USERNAME"]
        admin_password = flask.current_app.config["ADMIN_INIT_PASSWORD"]
        admin_password_hashed = bcrypt.generate_password_hash(
            admin_password).decode("utf-8")
        admin_email = flask.current_app.config["ADMIN_INIT_EMAIL"]

        from users.models.user import User

        admin_user = User(
            username=admin_username,
            password=admin_password_hashed,
            email=admin_email,
            active=True,
            email_confirmed_at=datetime.datetime.now(),
        )

        admin_user.roles.append(admin_role)
        admin_user.roles.append(writer_role)

        db.session.add(admin_user)
        db.session.commit()
Ejemplo n.º 6
0
    def create_tables():
        print('Creating tables...')
        db.create_all()

        if db.session.query(User).count() == 0:
            # create super user.
            test_user = User()
            test_user.login="******"
            test_user.first_name = "Joe"
            test_user.last_name = "Lucas"
            test_user.password=generate_password_hash("test")
            test_user.is_super = True
            db.session.add(test_user)
            db.session.commit()

            test_user = User()
            test_user.login="******"
            test_user.first_name = "Bob"
            test_user.last_name = "Average"
            test_user.password=generate_password_hash("test")
            test_user.is_super = False
            db.session.add(test_user)
            db.session.commit()
Ejemplo n.º 7
0
def change_password():
    """The view function allows the user to change their current password"""

    form, error = ChangePasswordForm(), None
    user = User(email=Session.lookup('email'))

    if form.validate_on_submit():

        if user.Account.Password.change_old_password(form):

            user.Account.Password.email_user_about_password_change()
            Session.delete_login_credentials()
            return redirect(
                url_for('password_app.password_successful_changed'))

    return render_template('password/new_password.html', form=form)
Ejemplo n.º 8
0
    def __add_user(data, is_superuser=False):
        # Required values
        email = data["email"]
        password = data["password"]
        date_joined = data["date_joined"]

        if type(date_joined) is str:
            date_joined = dateutil.parser.parse(date_joined)
            date_joined = date_joined.astimezone(timezone('UTC'))

        # Optional
        data_first_name = data.get("first_name")
        data_last_name = data.get("last_name")
        data_is_active = data.get("is_active")
        data_is_staff = data.get("is_staff")

        # Check if the email is taken
        if User.objects(email=email).first() is not None:
            return validation_error(
                False, {"email": ["این ایمیل قبلا ثبت شده است."]}), 422

        try:
            new_user = User(
                first_name=data_first_name,
                last_name=data_last_name,
                date_joined=date_joined,
                email=email,
                is_active=data_is_active,
                is_staff=data_is_staff,
                is_superuser=is_superuser,
            )

            new_user.set_password_hash(password)

            new_user.save()

            # Load the new user's info
            user_info = user_schema.dump(new_user)

            resp = message(True, "کاربر با موفقیت ایجاد شد.")
            resp["user"] = user_info

            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
Ejemplo n.º 9
0
    def save_new_user(self, form):
        user_role = Role.query.filter_by(name="user").first()

        hashed_password = bcrypt.generate_password_hash(
            form.password.data).decode("utf-8")
        user = User(
            username=form.username.data,
            email=form.email.data,
            password=hashed_password,
            first_name=form.first_name.data,
            last_name=form.last_name.data,
        )

        user.roles.append(user_role)

        db.session.add(user)
        db.session.commit()
        return user
Ejemplo n.º 10
0
    def register_view(self):
        form = RegistrationForm(request.form)
        if helpers.validate_form_on_submit(form):
            user = User()

            form.populate_obj(user)
            # we hash the users password to avoid saving it as plaintext in the db,
            # remove to use plain text:
            user.password = generate_password_hash(form.password.data)

            db.session.add(user)
            db.session.commit()

            login.login_user(user)
            return redirect(url_for('.index'))
        link = '<p>Already have an account? <a href="' + url_for(
            '.login_view') + '">Click here to log in.</a></p>'
        self._template_args['form'] = form
        self._template_args['link'] = link
        return super(FAdminIndexView, self).index()
Ejemplo n.º 11
0
    def create(self, validated_data):

        # create and store the new user
        user = User(username=validated_data['username'],
                    first_name=validated_data['first_name'],
                    last_name=validated_data['last_name'],
                    email=validated_data['email'],
                    phone=validated_data['phone'],
                    address=validated_data['address'],
                    type_account=2)

        # set password hash
        user.set_password(validated_data['password'])
        user.save()

        # if the user admin add the of promo model then will be create
        if self.promo_data[0] in validated_data:
            Promo(user=user, **{k: validated_data[k]
                                for k in self.promo_data}).save()

        return user
Ejemplo n.º 12
0
def login():
    """Allows the user to login into the application"""

    form = _render_login_template()

    if request.method == 'POST' and form.validate_on_submit():

        user = User()
        account_status = user.Account.Retrieve.get_account_status(
            form.email.data)

        if account_status != 'ACCOUNT_CONFIRMED':
            return redirect(url_for(_get_status(account_status)))
        elif not user.Account.Login.is_login_valid(form.email.data,
                                                   form.password.data):
            return redirect(url_for('login_app.no_user'))

        user.Account.Login.set_login_sessions(form.email.data)
        user.Account.Login.login()
        return redirect(url_for('home_page_app.home_page'))

    return render_template('login/login.html', form=form)
Ejemplo n.º 13
0
from users.models.user import User

user = User()