Beispiel #1
0
def edit(user_id):
    """
    Edit user profile and save.
    :param user_id: target user id
    :return: Render signup template or return Json data
    """

    if request.method == 'GET':
        try:
            user = User.get(user_id)
            app.logger.debug(user)
        except Exception as e:
            app.logger.error(e)
            flash("DB operation failed! Try again.")

    if request.method == 'PUT':
        try:
            user = User.get(user_id)
            data = request.get_json()
            app.logger.debug(data)
            user.update(actions=[
                User.username.set(data['username']),
                User.password.set(generate_password_hash(data['password']))
            ])
            return jsonify(update='success')

        except Exception as e:
            app.logger.error(e)
            return jsonify(update='failed')

    return render_template('signup.html', user=user)
Beispiel #2
0
def edit(user_id):
    """
    Edit user profile and save.
    :param user_id: target user id
    :return: Render signup template or return Json data
    """
    password_reset = "https://cloudalbum.auth." \
                     "{0}.amazoncognito.com/forgotPassword?response_type=code&client_id=" \
                     "{1}&redirect_uri=" \
                     "{2}"\
        .format(conf['AWS_REGION'],
                conf['COGNITO_CLIENT_ID'],
                conf['BASE_URL']+'/callback')

    if request.method == 'GET':
        try:
            user = User()
            user.id = current_user.id
            user.email = current_user.email
            user.username = current_user.username

            app.logger.debug(user)
        except Exception as e:
            app.logger.error(e)
            flash("DB operation failed! Try again.")

    if request.method == 'PUT':
        try:
            data = request.get_json()

            client = boto3.client('cognito-idp')
            response = client.admin_update_user_attributes(
                UserPoolId=conf['COGNITO_POOL_ID'],
                Username=current_user.id,
                UserAttributes=[
                    {
                        'Name': 'name',
                        'Value': data['username']
                    },
                ])

            app.logger.debug(response)
            session['name'] = data['username']

            return jsonify(update='success')

        except Exception as e:
            app.logger.error(e)
            return jsonify(update='failed')

    return render_template('signup.html',
                           user=user,
                           password_reset=password_reset)
Beispiel #3
0
def user_loader(session_token):
    """Populate user object, check expiry"""
    if "expires" not in session:
        return None

    app.logger.debug(session_token)
    app.logger.debug(session)

    user = User()
    user.id = session_token
    user.username = session['name']
    user.email = session['email']

    return user
Beispiel #4
0
def callback():
    """Exchange the 'code' for Cognito tokens"""
    #http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
    csrf_state = request.args.get('state')
    code = request.args.get('code')
    request_parameters = {
        'grant_type': 'authorization_code',
        'client_id': conf['COGNITO_CLIENT_ID'],
        'code': code,
        "redirect_uri": conf['BASE_URL'] + "/callback"
    }

    response = requests.post("https://%s/oauth2/token" %
                             conf['COGNITO_DOMAIN'],
                             data=request_parameters,
                             auth=HTTPBasicAuth(conf['COGNITO_CLIENT_ID'],
                                                conf['COGNITO_CLIENT_SECRET']))

    # the response:
    # http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html
    if response.status_code == requests.codes.ok:
        verify(response.json()["access_token"])
        id_token = verify(response.json()["id_token"],
                          response.json()["access_token"])

        ## TODO #8: Write yoir code to set up User objedct using id_token from Cognito
        user = User()
        ## -- begin --
        user = User()
        user.id = id_token["cognito:username"]
        user.email = id_token["email"]
        user.username = id_token["name"]
        ## Now, password is managed by Cognito.
        user.password = '******'
        user.save()

        session['id'] = id_token["cognito:username"]
        session['email'] = id_token["email"]
        session['name'] = id_token["name"]
        session['expires'] = id_token["exp"]
        session['refresh_token'] = response.json()["refresh_token"]
        ## -- end --

        login_user(user, remember=True)
        return redirect(url_for("siteView.home"))

    else:
        return render_template_string("<h1>ERROR!</h1>")
def signup():
    """
    Sign-up view function.
    :return: if success, render sign-in HTML page.
    """

    form = UserForm(request.form)
    if request.method == 'POST' and form.validate():
        app.logger.debug(form.data)

        try:
            user_exist = None
            for item in User.email_index.query(form.email.data):
                user_exist = item.email

            if not user_exist:
                user = User(uuid.uuid4().hex)
                user.email = form.email.data
                user.password = generate_password_hash(form.password.data)
                user.username = form.username.data
                user.save()
                app.logger.debug(user)
                flash('You have been signed up successfully!')
                return redirect(url_for('userView.signin', form=form))

            else:
                flash('Your email is already registered. Please try again!')
                app.logger.debug('Email is already registered : %s ', form.email.data)
                return redirect(url_for('userView.signup', form=form))

        except Exception as e:
            app.logger.error(e)
            return errorHandler.server_error(e)

    return render_template('signup.html')
def edit(user_id):
    """
    Edit user profile and save.
    :param user_id: target user id
    :return: Render signup template or return Json data
    """

    if request.method == 'GET':
        try:
            user = User()
            user.id = current_user.id
            user.email = current_user.email
            user.username = current_user.username

            app.logger.debug(user)
        except Exception as e:
            app.logger.error(e)
            flash("DB operation failed! Try again.")

    if request.method == 'PUT':
        try:
            data = request.get_json()

            app.logger.debug(data)

            client = boto3.client('cognito-idp')

            response = client.admin_update_user_attributes(
                UserPoolId=conf['COGNITO_POOL_ID'],
                Username=current_user.id,
                UserAttributes=[
                    {
                        'name': data['username'],
                        'password': data['password']
                    },
                ])
            app.logger.debug(response)

            return jsonify(update='success')

        except Exception as e:
            app.logger.error(e)
            return jsonify(update='failed')

    return render_template('signup.html', user=user)
def user_loader(session_token):
    """Populate user object, check expiry"""
    if "expires" not in session:
        return None

    app.logger.debug(session_token)
    app.logger.debug(session)

    expires = datetime.utcfromtimestamp(session['expires'])
    expires_seconds = (expires - datetime.utcnow()).total_seconds()
    if expires_seconds < 0:
        return None

    user = User()
    user.id = session_token
    user.username = session['name']
    user.email = session['email']

    return user
Beispiel #8
0
"""
    model.__init__.py
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CloudAlbum is a sample application for TechSummit 2018 workshop.

    :copyright: © 2018 by Sungshik Jou.
    :license: BSD, see LICENSE for more details.
"""
from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute, ListAttribute
from cloudalbum.config import conf
from werkzeug.security import generate_password_hash, check_password_hash
import uuid
from cloudalbum.model.models_ddb import User
from cloudalbum.model.models_ddb import Photo

if not User.exists():
    User.create_table(read_capacity_units=conf['DDB_RCU'],
                      write_capacity_units=conf['DDB_WCU'],
                      wait=True)
    print('DynamoDB User table created!')

if not Photo.exists():
    Photo.create_table(read_capacity_units=conf['DDB_RCU'],
                       write_capacity_units=conf['DDB_WCU'],
                       wait=True)
    print('DynamoDB Photo table created!')