Beispiel #1
0
def user_create():
    form = UserCreateForm(request.form)

    if not form.validate():
        return render_template("user_create.html", form=form)

    if form.username.data == "deleted":
        return render_template("user_create.html",
                               form=form,
                               error="Username cannot be deleted")

    user = User.query.filter_by(username=form.username.data,
                                deleted=False).first()
    if user:
        return render_template("user_create.html",
                               form=form,
                               error="Username already exists")

    password = form.password.data.encode()  # utf-8 for bcrypt
    hashed = bcrypt.hashpw(password, bcrypt.gensalt()).decode()

    user = User(form.username.data, hashed)

    if User.user_count() == 0:
        user.admin = True

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

    login_user(user)

    return redirect(url_for("index"))
Beispiel #2
0
def login():
    if current_user.is_authenticated:
        flash('You are already logged in.')
        return redirect(url_for('auth.home'))

    form = LoginForm(request.form)

    if request.method == 'POST' and form.validate():
        username = request.form.get('username')
        password = request.form.get('password')

        try:
            User.try_login(username, password)
        except ldap.INVALID_CREDENTIALS:
            flash(
                'Invalid username or password. Please try again.',
                'danger')
            return render_template('login.html', form=form)

        user = User.query.filter_by(username=username).first()

        if not user:
            user = User(username, password)
            db.session.add(user)
            db.session.commit()
        login_user(user)
        flash('You have successfully logged in.', 'success')
        return redirect(url_for('auth.home'))

    if form.errors:
        flash(form.errors, 'danger')

    return render_template('login.html', form=form)
    def setUp(self):
        db.create_all()
        self.search_api = app.config['AUTHENTICATED_SEARCH_API']
        self.app = app
        self.client = app.test_client()

        self.user = User(email='*****@*****.**',
                         password='******',
                         name='noname',
                         gender='M',
                         date_of_birth=datetime.datetime.now(),
                         current_address='nowhere',
                         previous_address='nowhere',
                         blocked=False,
                         view_count=0)

        self.blocked_user = User(email='*****@*****.**',
                                 password='******',
                                 name='noname',
                                 gender='M',
                                 date_of_birth=datetime.datetime.now(),
                                 current_address='nowhere',
                                 previous_address='nowhere',
                                 blocked=True,
                                 view_count=0)

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

        self.lrid = uuid.uuid4()
        self.roles = ['CITIZEN']
Beispiel #4
0
def users_create():
    form = NewUserForm(request.form)

    if not form.validate():
        return render_template("auth/new.html", form=form)

    username = form.username.data
    if User.query.filter_by(username=username).first() is None:
        user = User(username, form.password.data)
    else:
        return render_template("auth/new.html",
                               form=NewUserForm(),
                               message="This username is already taken")

    users_in_database = User.query.order_by(User.username).all()

    if users_in_database:
        user.role = "DEFAULT"
    else:
        user.role = "ADMIN"

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

    return redirect(url_for("auth_login"))
Beispiel #5
0
def auth_register():
    username_already_taken = ""

    if request.method == "GET":
        return render_template("auth/registerform.html",
                               form=RegisterForm(),
                               username_already_taken=username_already_taken)

    form = RegisterForm(request.form)

    if not form.validate():
        return render_template("auth/registerform.html",
                               form=form,
                               username_already_taken=username_already_taken)

    #rekisteröinnissä pitää estää saman usernamen valinta
    suggested_account_name = form.username.data
    checked_account = User.query.filter(
        User.username == suggested_account_name).first()

    if checked_account != None:
        username_already_taken = "Username is already taken. Please pick another one."
        return render_template("auth/registerform.html",
                               form=form,
                               username_already_taken=username_already_taken)

    account = User(form.name.data, form.username.data, form.password.data)

    if db.session.query(User).count() == 0:
        account.set_as_admin()

    db.session().add(account)
    db.session().commit()

    return redirect(url_for("auth_login"))
def auth_registerOrUpdate():
    if ('create' in request.form):
        form = RegisterForm(request.form)

        if not form.validate():
            return render_template("auth/new.html", form=form)
        username = form.username.data
        password = form.password.data
        user = User(username, password, False)
        db.session().add(user)
        db.session().commit()

        login_user(user)

    elif ('edit' in request.form):
        form = UserEditForm(request.form)

        if not form.validate():
            return render_template("auth/edit.html", form=form)

        oldUsername = form.oldUsername.data
        user = User.query.filter_by(username=oldUsername).first()

        user.username = form.username.data
        user.password = form.password.data

        db.session().commit()

    return redirect(url_for("games_index"))
Beispiel #7
0
 def create_user(self, user_payload, role):
     with self.app.app_context():
         user = User(**user_payload)
         user.password = PasswordUtilities.generate_password(user.password)
         user.role = role.pk
         self.db.session.add(user)
         self.db.session.commit()
Beispiel #8
0
def auth_create():
    form = CreateUserForm(request.form)

    if request.method == "GET":
        return render_template("auth/newuser.html", form=form)

    if not form.validate_on_submit():
        return render_template("auth/newuser.html", form=form)

    pw_hash = bcrypt.generate_password_hash(form.password.data).decode('utf-8')

    user = User(form.name.data, form.username.data, pw_hash)
    user.role_id = 3

    try:
        db.session().add(user)
        db.session().commit()
        login_user(user)
    except IntegrityError:
        db.session.rollback()
        flash("Create account failed.", "danger")
        return render_template(
            "auth/newuser.html",
            form=form,
            error="User already exists. Consider changing username.")

    return redirect(url_for("index"))
Beispiel #9
0
def newuser():
    try:
        if request.method == "GET":
            return render_template("auth/newuser.html", form=LoginForm())

        form = LoginForm(request.form)

        if not form.validate():
            return render_template(
                "auth/newuser.html",
                form=form,
                error=
                "Invalid input. The username and password must have 3-20 characters, and mustn't contain illegal characters."
            )

        user = db.session.query(
            User).filter((User.name == form.username.data)
                         | (User.username == form.username.data)).first()
        if user:
            return render_template("auth/newuser.html",
                                   form=form,
                                   error="Username already in use")

        user = User(form.username.data, form.username.data, form.password.data)
        user.acc_type = "USER"
        db.session().add(user)
        db.session().commit()

        login_user(user)
        return redirect(url_for("main"))
    except:
        print("Something went wrong.")
        db.session().rollback()
    return redirect(url_for("page_404"))
Beispiel #10
0
def init_categories():

    stmt = text('SELECT * FROM Category;')

    res = db.engine.execute(stmt)

    if (res.fetchone() != None):
        return

    category1 = Category('Sports')
    category2 = Category('Gaming')
    category3 = Category('Programming')

    userrole = Role('USER')
    adminrole = Role('ADMIN')

    db.session().add(userrole)
    db.session().add(adminrole)

    db.session().add(category1)
    db.session().add(category2)
    db.session().add(category3)
    db.session().commit()

    normaluser = User(' ', 'user', 'user')
    adminuser = User(' ', 'admin', 'admin')

    db.session().add(normaluser)
    db.session().add(adminuser)
    db.session().commit()

    db.session().add(User_Role(normaluser.id, 1))
    db.session().add(User_Role(adminrole.id, 2))
    db.session().commit()
Beispiel #11
0
def oauth_callback(provider):
    try:
        oauth = OAuthSignIn.get_provider(provider)
    except KeyError:
        current_app.logger.error(
            "Failed authentication with <{0}>, not listed as a provider".
            format(provider))
        raise InvalidAPIRequest(
            "Could not authenticate with the given provider",
            status_code=BAD_REQUEST_CODE)
    social_id, email = oauth.callback()
    current_app.logger.debug("Data: | {0} | {1}".format(social_id, email))
    if not social_id:
        current_app.logger.error(
            "OAuth did not return valid data. <{0}>".format(provider))
        raise InvalidAPIRequest('OAuth authentication error',
                                status_code=UNAUTHORIZED_CODE)
    user = User.query.filter_by(social_id=social_id).first()
    if not user:
        try:
            user = User(social_id=social_id, username=email)
            user.role = UserUtilities.regular_user_pk()
            db.session.add(user)
            db.session.commit()
        except Exception as e:
            current_app.logger.error(
                "Could not create a user in the database. Error: {0}".format(
                    str(e)))
    return redirect(
        url_for('home.index',
                access_token=JWTUtilities.create_access_token(user)))
    def test_password_salts_are_random(self):
        """ salt should be added to password hash
        """
        user_one = User(password='******')
        user_another = User(password='******')

        self.assertTrue(user_one.password_hash != user_another.password_hash)
Beispiel #13
0
def auth_register_user():
    if request.method == "GET":
        return render_template('register.html')
    payload = MultiDict(request.get_json())
    registration_form = StandardRegistrationForm(payload)
    try:
        if registration_form.validate():
            if User.query.filter(
                    User.username == registration_form.username.data).first():
                raise InvalidAPIRequest(
                    "Duplicate username, please choose a unique username",
                    status_code=403)
            try:
                password = PasswordUtilities.generate_password(
                    registration_form.password.data,
                    registration_form.confirm.data)
                user_data = registration_form.to_dict
                user_data["password"] = password
                new_user = User(**user_data)
                new_user.role = UserUtilities.regular_user_pk()
                db.session.add(new_user)
                db.session.commit()
                return JWTUtilities.create_access_token_resp(new_user)
            except ImproperPasswordError:
                raise InvalidAPIRequest("Password format error",
                                        status_code=BAD_REQUEST_CODE)
            except PasswordMismatchError:
                raise InvalidAPIRequest(
                    "Password mismatch error, ensure they are the same",
                    status_code=BAD_REQUEST_CODE)
        else:
            raise InvalidAPIRequest("Bad request, please try again",
                                    status_code=BAD_REQUEST_CODE)
    except DuplicateUserEmailUsernameException:
        raise InvalidAPIRequest("Username taken")
Beispiel #14
0
def auth_create_user():
    form = RegistrationForm(request.form)
    if not form.validate():
        return render_template("auth/registration.html",
                               form=form,
                               kayttajat=User.query.all(),
                               error="Tarkista syötteet!")
    user = User(form.name.data, form.username.data, form.password.data)
    if form.isadmin.data:
        user.role = "ADMIN"
    else:
        user.role = "USER"
    db.session().add(user)

    try:
        db.session().commit()
        #jos lisäys onnistuu, liitetään käyttäjä valittuun projektii
        userproject = Userproject(False)
        userproject.account_id = user.id
        userproject.project_id = form.paaprojekti.data
        userproject.paaprojekti = True
        db.session().add(userproject)
        db.session().commit()
    except IntegrityError:
        db.session().rollback()
        return render_template(
            "auth/registration.html",
            form=form,
            error="Käyttäjätunnus varattu, valitse toinen käyttäjätunnus",
            kayttajat=User.query.all())
    return redirect(url_for("auth_register"))
Beispiel #15
0
def auth_new_friseur():
    if request.method == "GET":
        return render_template("auth/new_friseur.html", form=UserForm())

    form = UserForm(request.form)

    if not form.validate():
        return render_template("auth/new_friseur.html", form=form)

    user = User.query.filter_by(username=form.username.data).first()
    if user:
        flash("Username exists, pick another one", "alert-warning")
        return render_template("auth/new_friseur.html", form=form)

    # Encrypt password and assign friseur role
    password_hash = bcrypt.generate_password_hash(form.password.data)
    user = User(form.name.data, form.username.data, password_hash)
    user.role = Role.query.get(2)

    db.session().add(user)
    db.session().flush()

    # Add all upcoming work days to friseur
    upcoming_work_days = Work_day.upcoming_work_days()
    for day in upcoming_work_days:
        friseur_work_day = Friseur_work_day(user.id, day.get("id"), 10, 17)
        db.session().add(friseur_work_day)
        db.session().flush()

    db.session().commit()

    flash("New friseur with username %s created." % user.username,
          "alert-warning")
    return redirect(url_for("friseur_index"))
Beispiel #16
0
def auth_signup():
    if request.method == "GET":
        return render_template("auth/signupform.html", form=SignUpForm())

    form = SignUpForm(request.form)

    if not form.validate():
        return render_template("auth/signupform.html",
                               form=SignUpForm(),
                               error="Invalid information")

    user = User.query.filter_by(username=form.username.data).first()

    if user:
        return render_template("auth/signupform.html",
                               form=SignUpForm(),
                               error=user.username + " already taken")

    user = User(form.firstName.data + ' ' + form.lastName.data)

    user_role = Role.query.filter_by(name='User').first()

    user.username = form.username.data
    password = form.password.data
    pw_hash = generate_password_hash(password).decode('utf-8')
    user.password = pw_hash
    user.roles.append(user_role)
    db.session().add(user)
    db.session().commit()
    return redirect(url_for("auth_login"))
Beispiel #17
0
def users_show(account_id):

    if request.method == 'GET':
        account = User.query.get_or_404(account_id)
        photos = User.find_user_pictures(account_id)

        form = MessageForm()

        return render_template("users/show.html",
                               account=account,
                               form=form,
                               photos=photos)

    else:
        form = MessageForm(request.form)

        account_from = User.query.get(current_user.get_id())
        account_to = User.query.get(account_id)

        photos = User.find_user_pictures(account_id)

        if not form.validate():
            return render_template("users/show.html",
                                   account=account_to,
                                   form=form,
                                   photos=photos)

        m = Message(form.message.data)

        account_from.conversations.append(m)
        account_to.conversations.append(m)

        db.session().commit()

        return redirect(url_for("users_index"))
Beispiel #18
0
def admin_delete_user(user_id):
    if current_user.role != "ADMIN":
        return render_template("index.html", msg=msg_admin_feature)
    Item.delete_items_by_userid(user_id)
    List.delete_lists_by_userid(user_id)
    User.delete_user_by_userid(user_id)
    return redirect(url_for("list_users_with_item_amounts"))
Beispiel #19
0
def sample_db():
    admin = User("admin",
                 bcrypt.generate_password_hash("admin").decode('utf-8'))
    db.session().add(admin)
    monkey = User("SunWukong",
                  bcrypt.generate_password_hash("xiyouji").decode('utf-8'))
    db.session().add(monkey)
    generic_user = User("generic_user",
                        bcrypt.generate_password_hash("salis").decode('utf-8'))
    db.session().add(generic_user)
    db.session().commit()

    role1 = Role("admin")
    db.session().add(role1)
    role2 = Role("user")
    db.session().add(role2)
    db.session().commit()

    urole1 = UserRole(1, 1)
    db.session().add(urole1)
    urole2 = UserRole(2, 2)
    db.session().add(urole2)
    urole3 = UserRole(3, 2)
    db.session().add(urole3)
    db.session().commit()

    alueet = ["Yleinen", "Bysanttilainen dädä", "Sekalainen"]

    for i in range(len(alueet)):
        alue = Category(alueet[i])
        db.session().add(alue)

    db.session().commit()
    return
Beispiel #20
0
def create_user():
    if request.method == "GET":
        return render_template("/auth/newuser.html", form=CreateUserForm())

    form = CreateUserForm(request.form)
    user = User.query.filter_by(username=form.username.data).first()

    if not user:
        username = form.username.data
        passwordHash = bcrypt.generate_password_hash(
            form.password.data).decode("utf-8")  ## CHANGE TO BE BCRYPTED
        name = form.displayname.data

        # New user
        u = User(name, username, passwordHash)
        # THIS IS A HACK
        if u.name == "admin":
            u.role = "ADMIN"
        else:
            u.role = "USER"

        db.session().add(u)
        db.session().commit()

        Category.create_default_categories(u.id)

        return redirect(url_for("auth_login"))

    return render_template(
        "/auth/newuser.html",
        form=form,
        error="Username already in use! Choose another one.")
Beispiel #21
0
def student_create():
    form = StudentForm(request.form)

    if not form.validate():
        return render_template("auth/new.html", form=form)

    if User.query.filter(User.name == form.user.data).count() == 0:
        return render_template("/kurssilaistaulu/kurssilaistauluform.html",
                               form=StudentForm(),
                               course_students=User.studentto_course(),
                               courses=Course.query.all(),
                               error="Tämän nimistä kurssilaista ei löytynyt")

    if Course.query.filter(Course.name == form.course.data).count() == 0:
        return render_template("/kurssilaistaulu/kurssilaistauluform.html",
                               form=StudentForm(),
                               course_students=User.studentto_course(),
                               courses=Course.query.all(),
                               error="Tämän nimistä kurssia ei löytynyt")

    opiskelija = User.query.filter(User.name == form.user.data).first()

    kurssi = Course.query.filter(Course.name == form.course.data).first()

    if not (opiskelija.name in kurssi.kurssilaiset):

        opiskelija.courseusers.append(kurssi)
        db.session.commit()

    return redirect(url_for("kurssilaistaulu_index"))
Beispiel #22
0
def auth_create():

    if request.method == 'GET':
        return render_template("auth/registerform.html", form=LoginForm())

    # If method is POST, validate form data
    form = LoginForm(request.form)

    if form.validate():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            # Enforce unique emails
            return render_template("auth/loginform.html",
                                   form=form,
                                   error="This email is already in use.")

        # If valid email, create user and hash password, then login and redirect
        pw_hash = bcrypt.generate_password_hash(
            form.password.data).decode('utf-8')
        u = User(email=form.email.data, password=pw_hash)
        if form.admin.data is True:
            u.admin = True
        db.session.add(u)
        db.session.commit()
        login_user(u)
        print(u)
        return redirect(url_for('events_index'))

    # If anything in POST goes wrong, serve login form with errors
    return render_template("auth/registerform.html",
                           form=form,
                           error="Invalid information")
Beispiel #23
0
def auth_signup_new():
    form = SignupForm(request.form)

    user = User.query.filter_by(username=form.username.data).first()
    if user:
        return render_template("auth/signupform.html", form = form,
                    error = "User with that username already exists")

   
    if not form.validate() or form.username.data.isspace():
        # username can't be only space
        if form.username.data.isspace():
            form.username.errors.append("Username can't be only whitespace")
        return render_template("auth/signupform.html", form = form)

    

    u = User(form.username.data)
    u.name = form.name.data
    u.password = form.password.data

    db.session().add(u)
    db.session().commit()

    flash("Account successfully created")
    return redirect(url_for("auth_login"))
Beispiel #24
0
def auth_add_user():
    if request.method == "GET":
        return render_template("auth/add_user.html", form=AddUserForm())
    else:
        form = AddUserForm(request.form)
        errors = []
        if form.validate_on_submit():
            user = User.query.filter_by(username=form.username.data).first()
            if not user:
                user = User(
                    form.name.data, form.username.data,
                    bcrypt.generate_password_hash(
                        form.password.data).decode("utf-8"))
                user.role = Role.query.filter_by(name="user").first().id
                db.session.add(user)
                db.session.commit()
                print("Käyttäjä %s luotu" % user.name)
                login_user(user)
            else:
                errors.append("Käyttäjänimi on jo käytössä.")
        else:
            errors.append("Tarkista lomakkeen tiedot.")
        if len(errors) > 0:
            return render_template("auth/add_user.html",
                                   form=form,
                                   errors=errors)
        return redirect(url_for("index"))
Beispiel #25
0
def user_update(user_id):
    user = User.query.get(user_id)

    if request.method == "GET":
        form = UpdateUserForm(obj=user)
        password_form = UpdatePasswordForm()

        return render_template("auth/update.html", form=form, password_form=password_form, user=user)

    form = UpdateUserForm(request.form)

    if not form.validate():
        return render_template("auth/update.html", form=form, password_form=UpdatePasswordForm(), user=user)

    user.name = form.name.data
    user.phone = form.phone.data
    user.email = form.email.data

    if user.role_ok("admin") and form.admin.data == True:
        User.switch_roles("admin", "user", user_id)
        flash('Tietojen päivittäminen onnistui')
        return redirect(url_for("user_update", user_id=user_id))
    elif user.role_ok("user") and form.admin.data == True:
        User.switch_roles("user", "admin", user_id)
        flash('Tietojen päivittäminen onnistui')
        return redirect(url_for("user_update", user_id=user_id))
    else:
        db.session().commit()
        flash('Tietojen päivittäminen onnistui')
        return redirect(url_for("user_update", user_id=user_id))
Beispiel #26
0
    def mutate(self, _, email, password, user_data):
        if _UserModel.find_by_email(email):
            LOG.warning(f'Repeated registration for {email}')
            raise GraphQLError(f'User {email} already exists')

        access_token = create_access_token(identity=email)
        refresh_token = create_refresh_token(identity=email)
        try:
            new_user = _UserModel(email=email.strip(),
                                  password=_UserModel.generate_hash(password),
                                  jti=decode_token(refresh_token)['jti'],
                                  created_time=datetime.datetime.now())

            new_user.save()
            Persistent.flush()
            new_user_profile = UserProfile(
                user_id=new_user.id,
                email=email.strip(),
                first_name=user_data.first_name.strip(),
                last_name=user_data.last_name.strip())
            new_user_profile.save_and_persist()
        except Exception as e:
            LOG.error(f"User registration failed. Error: {e}")
            Persistent.rollback()
            raise GraphQLError("User registration failed.")
        else:
            # check ws invitatitons
            try:
                pending_invitations = WorkspaceInvitation.find_all(
                    email=email, status=WorkspaceInvitationStatus.PENDING)
                processed_ws_ids = set()
                for inv in pending_invitations:
                    if inv.ws_id not in processed_ws_ids:
                        processed_ws_ids.add(inv.ws_id)
                        WorkspaceUser(user_id=new_user.id,
                                      ws_id=inv.ws_id,
                                      start_date=inv.start_date).save()

                        WorkspaceUserRole(
                            ws_id=inv.ws_id,
                            user_id=new_user.id,
                            role=WorkspaceUserRoles.MEMBER).save()

                    inv.status = WorkspaceInvitationStatus.ACCEPTED
                    WorkspaceInvitation.query() \
                        .filter(WorkspaceInvitation.id == inv.id) \
                        .update({WorkspaceInvitation.status: inv.status})

                Persistent.commit()
            except Exception as e:
                LOG.error(
                    f"Workspace invitations check failed for user {new_user.email}. Error: {e}"
                )
                db.session.rollback()

        return Register(ok=True,
                        user_id=new_user.id,
                        access_token=access_token,
                        refresh_token=refresh_token)
Beispiel #27
0
def list_users():
    if current_user.role != "ADMIN":
        return render_template("index.html", msg=msg_admin_feature)
    users = User.list_all_users()
    empty_shoppinglist = User.find_users_with_no_items()
    return render_template("auth/users.html",
                           users=users,
                           empty_shoppinglist=empty_shoppinglist)
def auth_list_users():
   if current_user.userrole == "MASTER":
      userList = User.list_users_and_admins()

   if current_user.userrole == "ADMIN":
      userList = User.list_users()

   return render_template("/auth/userList.html", userList=userList)
Beispiel #29
0
def worklog_stats():

    #Kirjautunut käyttäjä
    u = User.query.get(current_user.id)

    return render_template("worklog/front.html", user=u, total_work=User.total_tasks(), 
                    total_hours=WorkDone.total_hours(), user_hours=WorkDone.user_hours(u),
                    user_work = User.user_tasks(u), upcoming_work = UpcomingWork.select_filtered(u) )
Beispiel #30
0
def current_animals():
        
    owner = current_user
    owner_id = owner.get_id()   
    
    return render_template("animals/current.html", form = FoodForm(), 
        currentanimals = User.find_animals_of_current_user(owner_id), currentfoods = User.find_foods_of_current_user(owner_id),
        counts = User.count_animals_of_current_user(owner_id), average = User.average_of_food_prices(owner_id))