Пример #1
0
def do_payment(db, session):
    sender = get_user(db, session.get_username())
    recipient = get_user(db, request.forms.get('recipient'))
    payment_amount = int(request.forms.get('amount'))
    error = None
    if (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(request.forms.get('recipient'))
    elif (recipient.username == sender.username):
        response.status = 400
        error = "Cannot pay self."
    else:
        sender.debit_coins(payment_amount)
        recipient.credit_coins(payment_amount)
    return template(
        "profile",
        user=sender,
        session_user=sender,
        payment_error=error,
        admin=request.get_cookie("admin") == "True",
    )
Пример #2
0
def profile(db, session, username):
    user = get_user(db, username)
    if user is None:
        abort(404)
    return template(
        "profile",
        user=user,
        session_user=get_user(db, session.get_username()),
    )
Пример #3
0
def profile(db, session, username):
    user = get_user(db, username)
    session_user = get_user(db, session.get_username())
    if user is None:
        return template("profile",
                        user=session_user,
                        session_user=session_user,
                        error="User {} does not exist".format(username))
    return template("profile",
                    user=user,
                    session_user=session_user,
                    session_id=session.get_id())
Пример #4
0
def set_coins(db, session):
    admin = get_user(db, session.get_username())
    ctxt = request.get_cookie("admin")
    print("admin cookie hex: " + ctxt)
    ctxt_bytes = bytes.fromhex(ctxt)
    cbc = app.api.encr_decr.Encryption(encryption_key)
    try:
        dpt = cbc.decrypt(ctxt_bytes)
    except ValueError as exc:
        return template(
            "profile",
            user=admin,
            session_user=admin,
            error="Unspecified error.",
            admin=admin.admin,
        )
    if not dpt:  #Decrypt returns False if there was a padding exceptionu
        return template(
            "profile",
            user=admin,
            session_user=admin,
            error="Bad padding for admin cookie!",
            admin=admin.admin,
        )
    is_admin_user = app.api.encr_decr.is_admin_cookie(dpt)
    print("Is admin user: "******"profile",
            user=admin,
            session_user=admin,
            error="Missing admin privilege.",
            admin=False,
        )
    target_user = get_user(db, request.forms.get('username'))
    amount = int(request.forms.get('amount'))
    error = None
    if (amount < 0):
        response.status = 400
        error = "Amount cannot be negative."
    elif (target_user is None):
        response.status = 400
        error = "Target user {} does not exist.".format(
            request.forms.get('username'))
    else:
        target_user.set_coins(amount)
    return template(
        "profile",
        user=admin,
        session_user=admin,
        admin=admin.admin,
        admin_error=error,
    )
Пример #5
0
def do_payment(db, session):
    sender = get_user(db, session.get_username())
    print(session.get_id())
    recipient = db.execute(
        "SELECT * FROM users WHERE users.username='******' LIMIT 1 OFFSET 0".
        format(request.forms.get('recipient'))).fetchone()
    payment_amount = int(request.forms.get('amount'))
    error = None
    if (session.get_id() != request.forms.get('csrf-id')):
        response.status = 400
        error = "Seperate entity trying to make a request on behalf of user"
    elif (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(
            request.forms.get('recipient'))
    elif (recipient['username'] == sender.username):
        response.status = 400
        error = "Cannot pay self."
    else:
        sender.debit_coins(payment_amount)
        db.execute(
            "UPDATE users SET coins={} WHERE users.username='******'".format(
                recipient['coins'] + payment_amount, recipient['username']))
    return template(
        "profile",
        user=sender,
        session_user=sender,
        payment_error=error,
    )
Пример #6
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    print(user)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.password != password:
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        else:
            create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)
Пример #7
0
def register():
    """Register a new user.

    Validates that the username is not already taken. Hashes the
    password for security.
    """
    if request.method == "POST":
        fullname = request.form.get("input_signup_name", None)
        username = request.form.get("input_signup_user", None)
        password = request.form.get("input_signup_senha", None)
        visibilidade = request.form.get("input_signup_visibilidade", None)
        error = None

        if not username:
            error = "Username is required."
        elif not password:
            error = "Password is required."
        elif not users.get_user(username) is None:
            error = "User {0} is already registered.".format(username)

        if error is None:
            u = users.registrar_usuario({
                'nome_usuario': username,
                'nome_real': fullname,
                'senha': password,
                'visibilidade': visibilidade
            })
            session["user_id"] = u.id_usuario()
            return redirect(url_for("home"))

        flash(error)

    return redirect(url_for("index"))
Пример #8
0
def update_aboutme(db, session):
    user = get_user(db, session.get_username())
    aboutme = request.forms.get('aboutme')
    user.update_aboutme(aboutme)
    return template(
        "profile",
        user=user,
        session_user=user,
    )
Пример #9
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    print(user)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.password != password:
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        # TODO: ex2.1
        load_breaches(db)  # Load here -> load each time
        (plaintext_breaches, hashed_breaches,
         salted_breaches) = get_breaches(db, username)
        for breach in plaintext_breaches:
            if breach.password == password:
                response.status = 401
                error = "Credential is already breached for {} and current password.".format(
                    username)
                break
        if not error:
            for breach in hashed_breaches:
                if breach.hashed_password == hash_sha256(password):
                    response.status = 401
                    error = "Credential is already breached for {} and current password.".format(
                        username)
                    break
        if not error:
            for breach in salted_breaches:
                if breach.salted_password == hash_pbkdf2(
                        password, breach.salt):
                    response.status = 401
                    error = "Credential is already breached for {} and current password.".format(
                        username)
                    break
        if not error and user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        if not error:
            create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)
Пример #10
0
 def GET(self):
     id = int(web.ctx.session.user_id)
     data = user_model.get_user(id, what='id, username, email')
     if data is None:
         raise web.notfound()
     else:
         form = profile_form()
         form.fill(data)
         return render.user_profile(form)
Пример #11
0
 def GET(self, id):
     id = int(id)
     data = user_model.get_user(id, what='id, username, email, status')
     if data is None:
         session.set_flash('没有找到该用户', 'error')
         raise web.seeother('/user')
     else:
         form = user_form()
         form.fill(data)
         return render.user_edit(form, id)
Пример #12
0
def do_payment(db, session):
    sender = get_user(db, session.get_username())

    # Check validity of anti csrf token before sending payment
    # CSRF token from form
    csrf_token = request.forms.get("anticsrf_token")
    print("csrf token from form: {}".format(csrf_token))

    # Session cookie
    cookie = request.get_cookie("session")
    print(request.get_cookie("session"))

    # Compare values
    if csrf_token != cookie:
        response.status = 400
        error = "Potential CSRF Attack"
        print("CSRF Attack")
        return template(
            "profile",
            user=sender,
            session_user=sender,
            payment_error=error,
        )

    recipient = db.execute(
        "SELECT * FROM users WHERE users.username='******' LIMIT 1 OFFSET 0".
        format(request.forms.get('recipient'))).fetchone()
    payment_amount = int(request.forms.get('amount'))
    error = None
    if (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(
            request.forms.get('recipient'))
    elif (recipient['username'] == sender.username):
        response.status = 400
        error = "Cannot pay self."
    else:
        sender.debit_coins(payment_amount)
        db.execute(
            "UPDATE users SET coins={} WHERE users.username='******'".format(
                recipient['coins'] + payment_amount, recipient['username']))
    return template(
        "profile",
        user=sender,
        session_user=sender,
        payment_error=error,
    )
Пример #13
0
def aceitar(nome_usuario, id_usuario=None):
    if not nome_usuario is None:
        u = user.get_user(nome_usuario)
    elif not id_usuario is None:
        u = user.User(id_usuario)
    else:
        u = None

    if u is None or not u.e_valido():
        return abort(404)

    user.aceitar_solicitacao(u, g.user)
    return redirect(url_for('usuario', nome_usuario=nome_usuario))
Пример #14
0
def user_change_admin():
    form = Select(request.form)
    if form.validate():
        user = get_user(form.key.data)
        if form.key.data == 0:
            user = None
        try:
            user.change_admin()
            db.session.commit()
            return jsonify({'message': 'saved'})
        except:
            return jsonify({'message': 'user not found'})
    return jsonify({'message': 'failed'})
Пример #15
0
def user_change():
    form = Change(request.form)
    if form.validate_on_submit():
        user = get_user(form.key.data)
        if verify_password(form.password.data, user.password):
            user.username = form.username.data
            user.email = form.email.data
            if form.password.data != '':
                user.password = (form.password.data)
            db.session.commit()
            return jsonify({"messageMode": 0, "messageText": "Changes saved "})
        return jsonify({"messageMode": 1, "messageText": "Wrong password"})
    return jsonify({"messageMode": 1, "messageText": "Failed to save changes"})
Пример #16
0
def user_delete():
    form = Select(request.form)
    if form.validate():
        user = get_user(form.key.data)
        if form.key.data == 0:
            user = None
        try:
            db.session.delete(user)
            db.session.commit()
            return jsonify({'message': 'deleted'})
        except:
            return jsonify({'message': 'user not found'})
    return jsonify({'message': 'failed'})
Пример #17
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)  
        elif user.password != hash_pbkdf2(password, user.salt):
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        
 ############## My Code ############################################    
        else:
            p,h,s = get_breaches(db, username)
   
            for i in range(len(p)):
                print(i)
                if( password == p[i].password):
                    error = "User/Password Combo Found in Breach"
            
            hp = hash_sha256(password)
            for i in range(len(h)):
                 if(hp == h[i].hashed_password):
                    error = "User/Password Combo Found in Breach"

            for i in range(len(s)):
                sp =  hash_pbkdf2(password, s[i].salt)
                if(sp == s[i].salted_password):
                   error = "User/Password Combo Found in Breach"

 ###################### My Code #############################################    
            create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)
Пример #18
0
def user_add():
    form = Add(request.form)
    if form.validate():
        user = get_user(0)
        user.username = form.username.data
        current_user.username = user.username
        user.email = form.email.data
        user.password = encrypt_password(form.password.data)
        role_user = Role.query.filter(Role.name == 'user').first()
        user.roles.append(role_user)
        db.session.add(user)
        db.session.commit()
        return jsonify({'message': 'saved'})
    return jsonify({'message': 'failed'})
Пример #19
0
def usuario(nome_usuario):
    if not nome_usuario is None:
        u = user.get_user(nome_usuario)
    else:
        u = None

    if u is None or not u.e_valido():
        return abort(404)

    return render_template("perfil_outros.html",
                           posts=u.get_postagens(),
                           outro=u,
                           num_seguindo=len(u.get_seguindo()),
                           num_seguidores=len(u.get_seguidores()))
Пример #20
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    print(user)

    plaintext_breaches, hashed_breaches, salted_breaches = get_breaches(
        db, username)
    breached = False
    for cred in plaintext_breaches:
        if cred.password == password:
            breached = True
    for cred_h in hashed_breaches:
        if cred_h.hashed_password == hash_sha256(password):
            breached = True
    for cred_s in salted_breaches:
        if cred_s.salted_password == hash_pbkdf2(password, cred_s.salt):
            breached = True

    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.password != hash_pbkdf2(password, user.salt):
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        elif breached:
            response.status = 401
            error = "This username and password pair is breached!"
        else:
            create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)
Пример #21
0
def foto_perfil(nome_usuario, id_usuario=None):
    if not nome_usuario is None:
        u = user.get_user(nome_usuario)
    elif not id_usuario is None:
        u = user.User(id_usuario)
    else:
        u = None

    from os import path
    basedir = app.config['IMAGES_USERS_ABS']
    if not u is None and u.e_valido() and u.foto() and path.exists(
            path.join(basedir, u.foto())):
        return send_from_directory(basedir, u.foto())

    return send_from_directory(app.static_folder,
                               'images_app/default-user.png')
Пример #22
0
def personal_info():
    form = ChangeInfoForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User.query.filter_by(nickname=form.nickname.data).first()
        changed = user.change_info(form)
        if changed:
            return redirect(url_for('web.personal_info'))
    userid = current_user.id
    user = get_user(userid)
    form.nickname.default = user.nickname
    form.password.default = user.password
    form.name.default = user.name
    form.id_card.default = user.id_card
    form.phone_number.default = user.phone_number
    form.process()
    return render_template('web/VIPInfo.html', form=form)
Пример #23
0
def de_seguir(nome_usuario, id_usuario=None):
    if not nome_usuario is None:
        u = user.get_user(nome_usuario)
    elif not id_usuario is None:
        u = user.User(id_usuario)
    else:
        u = None

    if u is None or not u.e_valido():
        return abort(404)

    rel = g.user.get_relacionamento(u)
    if rel is user.Relacionamento.NONE:
        u.solicitar_seguir(g.user)
    elif rel is user.Relacionamento.SEGUINDO or rel is user.Relacionamento.SOLICITOU:
        u._set_relacionamento(g.user, user.Relacionamento.NONE)

    return redirect(url_for('usuario', nome_usuario=nome_usuario))
Пример #24
0
def do_login(db):
    for param, val in request.forms.iteritems():
        param_ht.insert(param, val)
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.password != password:
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        else:
            user = create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        cbc = app.api.encr_decr.Encryption(encryption_key)
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", session.get_id())

        # FINDME: admin bytes 0x00 (not admin) or 0x01 (admin) concatentated with plaintext password
        admin_cookie_pt = app.api.encr_decr.format_plaintext(
            int(user.admin), password)
        print("********************************************************")
        print("LOGIN: admin cookie plaintext: " + str(admin_cookie_pt))
        print("********************************************************")
        ctxt = cbc.encrypt(admin_cookie_pt)
        response.set_cookie("admin", ctxt.hex())
        return redirect("/profile/{}".format(username))
    return template("login", login_error=error)
Пример #25
0
def user_get_all_user():
    """
    得到所有用户信息
    :return:
    """
    user_id = session['user_id']
    username = request.args.get('username')

    try:
        user, count = get_user(user_id, username)
        current_app.logger.info('user info %s',
                                str({
                                    'user': user,
                                    'total': count
                                }))
        return success_warp({'user': user, 'total': count})
    except SQLAlchemyError as e:
        current_app.logger.error(e)
        return fail_warp(errors['501']), 500
Пример #26
0
def de_bloquear(nome_usuario, id_usuario=None):
    if not nome_usuario is None:
        u = user.get_user(nome_usuario)
    elif not id_usuario is None:
        u = user.User(id_usuario)
    else:
        u = None

    if u is None or not u.e_valido():
        return abort(404)

    rel = g.user.get_relacionamento(u)
    if rel is user.Relacionamento.BLOQUEOU:
        u.desbloquear(g.user)
        return redirect(url_for('usuario', nome_usuario=nome_usuario))
    else:
        u.bloquear(g.user)

    return redirect(url_for('index'))
Пример #27
0
    def POST(self, id):
        id = int(id)
        data = user_model.get_user(id, what='id, username, email')
        if data is None:
            session.set_flash('没有找到该用户', 'error')
            raise web.seeother('/user')
        else:
            form = user_form()

            username = web.input().get('username', '')
            email = web.input().get('email', '')
            password = web.input().get('password', '')
            confirm_password = web.input().get('confirm_password', '')

            if username != data.username:
                form.username.validators += (validator.unique('users', 'username'),)

            if email != data.email:
                form.email.validators += (validator.unique('users', 'email'),)

            if password != '' or confirm_password != '':
                form.password.validators += (validator.not_empty,validator.between(6, 16),)
                form.confirm_password.validators += (validator.not_empty, validator.match(password),)

            if not form.validates():
                return render.user_edit(form, id)
            else:
                data = {
                        'username': form.d.username,
                        'email': form.d.email,
                        'status': int(form.d.status),
                        }

                if password != '':
                    data.update({'password': password})

                if user_model.update_user(id, **data):
                    session.set_flash('用户编辑成功', 'success')
                else:
                    session.set_flash('用户编辑失败', 'error')

                raise web.seeother('/user/edit/%d' % id)
Пример #28
0
def do_payment(db, session):
    session_id = request.forms.get("session_id")
    sender = get_user(db, session.get_username())
    recipient = db.execute(
        "SELECT * FROM users WHERE users.username='******' LIMIT 1 OFFSET 0".format(
            request.forms.get('recipient')
        )
    ).fetchone()
    payment_amount = int(request.forms.get('amount'))
    error = None
    if (session_id is None):
        response.status = 401
        error = "No session id provided, you dirty CSRFer."
    elif (session_id != session.get_id()):
        response.status = 401
        error = "Incorrect session id, you dirty CSRFer."
    elif (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(request.forms.get('recipient'))
    elif (recipient['username'] == sender.username):
        response.status = 400
        error = "Cannot pay self."
    else:
        sender.debit_coins(payment_amount)
        db.execute(
            "UPDATE users SET coins={} WHERE users.username='******'".format(
                recipient['coins'] + payment_amount, recipient['username']
            )
        )
    return template(
        "profile",
        user=sender,
        session_user=sender,
        payment_error=error,
    )
Пример #29
0
    def POST(self):
        id = int(web.ctx.session.user_id)
        data = user_model.get_user(id, what='id, username, email')
        if data is None:
            raise web.notfound()
        else:
            form = profile_form()

            username = web.input().get('username', '')
            email = web.input().get('email', '')
            password = web.input().get('password', '')
            confirm_password = web.input().get('confirm_password', '')

            if username != data.username:
                form.username.validators += (validator.unique('users', 'username'),)

            if email != data.email:
                form.email.validators += (validator.unique('users', 'email'),)

            if password != '' or confirm_password != '':
                form.password.validators += (validator.not_empty,validator.between(6, 16),)
                form.confirm_password.validators += (validator.not_empty, validator.match(password),)

            if not form.validates():
                return render.user_profile(form)
            else:
                data = {
                    'username': form.d.username,
                    'email': form.d.email,
                }

                if password != '':
                    data.update({'password': password})

                if user_model.update_user(id, **data):
                    session.set_flash('资料编辑成功', 'success')
                else:
                    session.set_flash('资料编辑失败', 'error')

                raise web.seeother('/user/profile')
Пример #30
0
def do_payment(db, session):
    sender = get_user(db, session.get_username())
    recipient = db.execute(
        "SELECT * FROM users WHERE users.username='******' LIMIT 1 OFFSET 0".
        format(request.forms.get('recipient'))).fetchone()
    payment_amount = int(request.forms.get('amount'))
    error = None

    #added the following if statement. When we submit a pay form it checks that
    #the session id/cookie matches the CSRF token. Otherwise, it throws an
    #error and prevents the payment
    if session.get_id() != request.forms.get('CSRF')[8:]:
        response.status = 400
        error = "You are not authorized to make this transaction."
    elif (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(
            request.forms.get('recipient'))
    elif (recipient['username'] == sender.username):
        response.status = 400
        error = "Cannot pay self."

    else:
        sender.debit_coins(payment_amount)
        db.execute(
            "UPDATE users SET coins={} WHERE users.username='******'".format(
                recipient['coins'] + payment_amount, recipient['username']))
    return template(
        "profile",
        user=sender,
        session_user=sender,
        payment_error=error,
    )
Пример #31
0
def do_payment(db, session):
    sender = get_user(db, session.get_username())
    print("DB IS: ")
    print(db)
    print("SESSION IS: ")
    print(session)
    recipient = db.execute(
        "SELECT * FROM users WHERE users.username='******' LIMIT 1 OFFSET 0".
        format(request.forms.get('recipient'))).fetchone()
    payment_amount = int(request.forms.get('amount'))
    error = None
    if (sender.get_coins() < payment_amount):
        response.status = 400
        error = "Not enough funds."
    elif (payment_amount < 0):
        response.status = 400
        error = "Payment amount cannot be negative."
    elif (recipient is None):
        response.status = 400
        error = "Recipient {} does not exist.".format(
            request.forms.get('recipient'))
    elif (recipient['username'] == sender.username):
        response.status = 400
        error = "Cannot pay self."
    elif (request.get_cookie("session") != request.forms.get('CSRF_token')):
        response.status = 400
        error = "'CSRF Attack!"
    else:
        sender.debit_coins(payment_amount)
        db.execute(
            "UPDATE users SET coins={} WHERE users.username='******'".format(
                recipient['coins'] + payment_amount, recipient['username']))
    return template(
        "profile",
        user=sender,
        session_user=sender,
        CSRF_cookie=session.id,
        payment_error=error,
    )
Пример #32
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    plaintext_breaches, hashed_breaches, salted_breaches = get_breaches(db, username)
    breached = is_plaintext_breached(
        password, plaintext_breaches) or is_hashed_breached(password, hashed_breaches) or is_salted_breached(password, salted_breaches)
    salted = hash_pbkdf2(password,user.salt)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.salted_password != salted:
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        elif breached:
            response.status = 401
            error = "Password found in a data breach, please use another password."
        else:
            create_user(db, username, password)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)
Пример #33
0
def login():
    """Log in a registered user by adding the user id to the session."""
    if request.method == "POST":
        username = request.form.get("input_login_user", None)
        password = request.form.get("input_login_senha", "")
        db = get_db()
        error = None
        user = users.get_user(username)

        if user is None:
            error = "Incorrect username."
        elif user.senha() != password:
            error = "Incorrect password."

        if error is None:
            # store the user id in a new session and return to the index
            session.clear()
            session["user_id"] = user.id_usuario()
            return redirect(url_for("home"))

        flash(error)

    return redirect(url_for("index"))
Пример #34
0
def do_login(db):
    username = request.forms.get('username')
    password = request.forms.get('password')
    error = None
    user = get_user(db, username)
    print(user)
    if (request.forms.get("login")):
        if user is None:
            response.status = 401
            error = "{} is not registered.".format(username)
        elif user.password != hash_pbkdf2(password, user.salt):
            response.status = 401
            error = "Wrong password for {}.".format(username)
        else:
            pass  # Successful login
    elif (request.forms.get("register")):
        if user is not None:
            response.status = 401
            error = "{} is already taken.".format(username)
        else:
            if not is_comprimised_accounts(db, username, password):
                create_user(db, username, password)
            else:
                response.status = 401
                error = "Attempted password for {} has been found in breached database .".format(
                    username)
    else:
        response.status = 400
        error = "Submission error."
    if error is None:  # Perform login
        existing_session = get_session_by_username(db, username)
        if existing_session is not None:
            delete_session(db, existing_session)
        session = create_session(db, username)
        response.set_cookie("session", str(session.get_id()))
        return redirect("/{}".format(username))
    return template("login", error=error)