Esempio n. 1
0
def rmfavor(brand, name):

    if 'account' not in session:
        table = get_table('Fragrances')
        key = {'brand': brand, 'name': name}

        try:
            response = table.get_item(Key=key)
        except ClientError as e:
            raise e
        else:
            item = response['Item']
        return render_template('info.html', item=item, notLogin=True)
    else:
        table = get_table('Fragrances')
        key = {'brand': brand, 'name': name}

        try:
            response = table.get_item(Key=key)
        except ClientError as e:
            raise e
        else:
            item = response['Item']

        if 'favors' not in item:
            favors = 1
        if item['favors'] > 0:
            favors = item['favors'] - 1
            response = table.update_item(
                Key={
                    'brand': brand,
                    'name': name
                },
                UpdateExpression="set favors = :f",
                ExpressionAttributeValues={':f': favors},
                ReturnValues="UPDATED_NEW")

        account = session['account']
        table = get_table('Users')

        try:
            response = table.get_item(Key={'account': account})
        except ClientError as e:
            raise e
        else:
            user = response['Item']
            favor = user['favor']
            key = {'brand': brand, 'name': name}
            if key in favor:
                favor.remove({'brand': brand, 'name': name})

                response = table.update_item(
                    Key={'account': account},
                    UpdateExpression="set favor = :f",
                    ExpressionAttributeValues={':f': favor},
                    ReturnValues="UPDATED_NEW")
            return redirect(url_for('info', brand=brand, name=name))
Esempio n. 2
0
def search(keywords):
    keywords = keywords.strip().encode("utf-8")
    print keywords
    print len(keywords)
    print type(keywords)

    if type(keywords) != str:
        keywords = str(keywords)
    keywords = keywords.replace(",", " ")
    keywords = keywords.replace("/", " ")
    keywords = keywords.replace("\\", " ")
    keywords = keywords.replace(";", " ")
    keywords = keywords.replace("%", " ")
    keywords = keywords.replace("|", " ")
    keywords = keywords.split()

    table = get_table('Fragrances')
    try:
        response = table.scan()
    except ClientError as e:
        raise e
    else:
        items = response['Items']
        for item in items:
            del item['properties']['description']
        items = filterByKeywords(items, keywords)
        items = sort(items)
        num = len(items)

    if 'account' not in session:
        return render_template(
            'search.html',
            items=items,
            num=num,
            keywords=" ".join(keywords),
        )
    else:
        table = get_table('Users')
        account = session['account']
        try:
            response = table.get_item(Key={'account': account})
        except ClientError as e:
            raise e
        else:
            user = response['Item']
            return render_template(
                'search.html',
                name=user['name'],
                items=items,
                num=num,
                keywords=" ".join(keywords),
            )
Esempio n. 3
0
def addreview(brand, name):
    title = request.form.get('title', "")
    content = request.form.get('content', "")
    date = datetime.datetime.utcnow().strftime('(UTC)%H:%M:%S, %B %d, %Y')

    if 'account' not in session:
        table = get_table('Fragrances')
        key = {'brand': brand, 'name': name}

        try:
            response = table.get_item(Key=key)
        except ClientError as e:
            raise e
        else:
            item = response['Item']
        return render_template('info.html', item=item, notLogin=True)
    else:
        account = session['account']
        table = get_table('Users')
        key = {'account': account}
        response = table.get_item(Key=key)
        user = response['Item']

        table = get_table('Fragrances')

        key = {'brand': brand, 'name': name}
        response = table.get_item(Key=key)
        item = response['Item']
        if 'comments' not in item:
            comments = []
        else:
            comments = item['comments']

        newComment = {
            'name': user['name'],
            'date': date,
            'title': title,
            'content': content
        }
        comments.insert(0, newComment)
        response = table.update_item(
            Key=key,
            UpdateExpression="set comments = :c, reviews=:r",
            ExpressionAttributeValues={
                ':c': comments,
                ':r': len(comments)
            },
            ReturnValues="UPDATED_NEW")
        return redirect(url_for('info', brand=brand, name=name))
Esempio n. 4
0
def reSort(keywords):

    sortBy = request.form.get('sortBy', "correlation")

    if type(keywords) != str:
        keywords = str(keywords)
    keywords = keywords.replace(",", " ")
    keywords = keywords.replace("/", " ")
    keywords = keywords.replace("\\", " ")
    keywords = keywords.replace(";", " ")
    keywords = keywords.replace("%", " ")
    keywords = keywords.replace("|", " ")
    keywords = keywords.split()

    table = get_table('Fragrances')
    try:
        response = table.scan()
    except ClientError as e:
        raise e
    else:
        items = response['Items']
        for item in items:
            del item['properties']['description']
        items = sort(items, sortBy)
        items = filterByKeywords(items, keywords)
        num = len(items)

        if 'account' not in session:
            return render_template('search.html',
                                   items=items,
                                   num=num,
                                   keywords=" ".join(keywords),
                                   sortBy=sortBy)
        else:
            account = session['account']
            table = get_table('Users')
            try:
                response = table.get_item(Key={'account': account})
            except ClientError as e:
                raise e
            else:
                user = response['Item']
                return render_template('search.html',
                                       name=user['name'],
                                       items=items,
                                       num=num,
                                       keywords=" ".join(keywords),
                                       sortBy=sortBy)
Esempio n. 5
0
def verify(email, code):
    print(email)
    print(code)

    table = get_table('UserInfo')
    try:
        response = table.get_item(Key={'email': email})
    except Exception as e:
        raise e
    else:
        if 'Item' in response:
            user = response['Item']
            if user['active'] == True:
                return 'Your Account is Active.'
            elif user['code'] == code:
                response = table.update_item(
                    Key={'email': email},
                    UpdateExpression="set active = :a",
                    ExpressionAttributeValues={':a': True},
                    ReturnValues="UPDATED_NEW")
                signUpMsg = [
                    "Congratulations!",
                    "Your account has been successfully created!",
                    "Please login with your email and have fun! "
                ]
                return render_template('index.html',
                                       clickSignUp=True,
                                       needSignUp=True,
                                       signUpMsg=signUpMsg)
        else:
            signUpMsg = ['Your must Sign Up before activation.']
            return render_template('index.html',
                                   clickSignUp=True,
                                   signUpMsg=signUpMsg)
Esempio n. 6
0
def login():

    table = get_table('UserInfo')
    session['email'] = request.form.get('email', "")
    email = session['email']
    password = request.form.get('password', "")
    try:
        response = table.get_item(Key={
            'email': email,
        })
    except ClientError as e:
        session.pop('email', None)
        err_msg = [e.response['Error']['Message']]
        return render_template('index.html', login_err_msg=err_msg)
    else:
        if 'Item' not in response:
            session.pop('email', None)
            err_msg = ["Account does not exist."]
            return render_template('index.html', login_err_msg=err_msg)
        elif response['Item']['active']:
            user = response['Item']
            if (password != user['password']):
                session.pop('email', None)
                err_msg = ["Incorrect password."]
                return render_template('index.html', login_err_msg=err_msg)
            else:
                return redirect(url_for('index'))
        else:
            session.pop('email', None)
            err_msg = [
                "Your email hasn't been verified. You can register again if you lost the verification email. "
            ]
            return render_template('index.html', login_err_msg=err_msg)
Esempio n. 7
0
def favorList():
    if 'account' not in session:
        return redirect(url_for('index'))
    else:
        account = session['account']
        table = get_table('Users')

        try:
            response = table.get_item(Key={'account': account})
        except ClientError as e:
            raise e
        else:
            user = response['Item']
            table = get_table('Fragrances')
            favors = []
            for favor in user['favor']:
                try:
                    response = table.get_item(Key={
                        'brand': favor['brand'],
                        'name': favor['name'],
                    })
                except ClientError as e:
                    raise e
                else:
                    item = response['Item']
                    favors.append({
                        'brand': item['brand'],
                        'name': item['name'],
                        'key': item['key']
                    })

            return render_template(
                'list.html',
                name=user['name'],
                items=favors,
            )
Esempio n. 8
0
def list():
    items = get_all_fragrances()
    items = sort(items, 'name')
    if 'account' in session:
        account = session['account']
        table = get_table('Users')
        try:
            response = table.get_item(Key={'account': account})
        except ClientError as e:
            raise e
        else:
            user = response['Item']
            return render_template('list.html',
                                   name=user['name'],
                                   items=items,
                                   viewAll=True)
    else:
        return render_template('list.html', items=items, viewAll=True)
Esempio n. 9
0
def list_sort():
    sortBy = request.form.get('sortBy', "name")

    items = get_all_fragrances()
    items = sort(items, sortBy)
    if 'account' not in session:
        return render_template('list.html',
                               items=items,
                               sortBy=sortBy,
                               viewAll=True)
    else:
        account = session['account']
        table = get_table('Users')
        try:
            response = table.get_item(Key={'account': account})
        except ClientError as e:
            raise e
        else:
            user = response['Item']
            return render_template('list.html',
                                   name=user['name'],
                                   items=items,
                                   sortBy=sortBy,
                                   viewAll=True)
Esempio n. 10
0
def sign_up():

    table = get_table('Users')

    account = request.form.get('account', "")
    password = request.form.get('password', "")
    conf_pw = request.form.get('conf_pw', "")
    first_name = request.form.get('first_name', "")
    last_name = request.form.get('last_name', "")

    frags_most_reviews = get_most_reviews(5)
    frags_trend_favors = get_trend_favors(5)
    frags_top_rated = get_top_rated(5)

    if password != conf_pw:
        err_msg = "Passwords do not match."
        return render_template(
            'index.html',
            clickSignUp=True,
            signup_err_msg=err_msg,
            frags_most_reviews=frags_most_reviews,
            frags_trend_favors=frags_trend_favors,
            frags_top_rated=frags_top_rated,
        )

    try:
        response = table.get_item(Key={
            'account': account,
        })
    except ClientError as e:
        err_msg = e.response['Error']['Message']
        return render_template(
            'index.html',
            clickSignUp=True,
            signup_err_msg=err_msg,
            frags_most_reviews=frags_most_reviews,
            frags_trend_favors=frags_trend_favors,
            frags_top_rated=frags_top_rated,
        )
    else:
        if ('Item' in response) and response['Item']['active']:
            err_msg = "Account already exists."
            return render_template(
                'index.html',
                clickSignUp=True,
                signup_err_msg=err_msg,
                frags_most_reviews=frags_most_reviews,
                frags_trend_favors=frags_trend_favors,
                frags_top_rated=frags_top_rated,
            )
        else:
            src = account + password
            code = hashlib.md5(src).hexdigest()

            response = table.put_item(
                Item={
                    'account': account,
                    'password': password,
                    'name': {
                        'first': first_name,
                        'last': last_name,
                    },
                    'favor': [],
                    'post': [],
                    'code': code,
                    'active': False
                })

            ses = boto3.client('ses')

            name = first_name + " " + last_name
            link = request.url_root + 'sign_up/verify/' + account + '&' + code

            response = ses.send_email(
                Source=my_email,
                Destination={'ToAddresses': [
                    account,
                ]},
                Message={
                    'Subject': {
                        'Data': 'Welcome to the Fragrance Community'
                    },
                    'Body': {
                        # 'Text': {
                        #     'Data': 'string',
                        #     'Charset': 'string'
                        # },
                        'Html': {
                            'Data':
                            '''
<h2>Hi 
''' + name + '''
!</h2>
<p>Welcome to the <a href="
''' + request.url_root + '''
">Fragrance Community</a>.</p>
<h3>Verify Your Account</h3>
<p>To complete your registration, please verify your email address by clicking this <a href="
''' + link + '''
"> Link </a>.</p>
<p>Alternatively, you can copy and paste the following link into your browser's address window: </p>
<p>
''' + link + '''
</p>
			                '''
                        }
                    }
                })

            signUpMsg = [
                "To complete the registration, check your emails.",
                "You'll get an email with a link to comfirm that the address is yours."
            ]
            return render_template(
                'index.html',
                clickSignUp=True,
                signUpMsg=signUpMsg,
                frags_most_reviews=frags_most_reviews,
                frags_trend_favors=frags_trend_favors,
                frags_top_rated=frags_top_rated,
            )
Esempio n. 11
0
def login():

    table = get_table('Users')

    session['account'] = request.form['account']
    account = session['account']
    password = request.form.get('password', "")

    frags_most_reviews = get_most_reviews(5)
    frags_trend_favors = get_trend_favors(5)
    frags_top_rated = get_top_rated(5)

    try:
        response = table.get_item(Key={
            'account': account,
        })
    except ClientError as e:
        session.pop('account', None)
        err_msg = e.response['Error']['Message']
        return render_template(
            'index.html',
            frags_most_reviews=frags_most_reviews,
            frags_trend_favors=frags_trend_favors,
            frags_top_rated=frags_top_rated,
            login_err_msg=err_msg,
        )
    else:
        if 'Item' not in response:
            session.pop('account', None)
            err_msg = "Account does not exist."
            return render_template(
                'index.html',
                frags_most_reviews=frags_most_reviews,
                frags_trend_favors=frags_trend_favors,
                frags_top_rated=frags_top_rated,
                login_err_msg=err_msg,
            )
        elif response['Item']['active']:
            user = response['Item']
            if (password != user['password']):
                session.pop('account', None)
                err_msg = "Incorrect password."
                return render_template(
                    'index.html',
                    frags_most_reviews=frags_most_reviews,
                    frags_trend_favors=frags_trend_favors,
                    frags_top_rated=frags_top_rated,
                    login_err_msg=err_msg,
                )
            else:
                return redirect(url_for('index'))
        else:
            session.pop('account', None)
            err_msg = "Your email hasn't been verified. You can register again if you lost the verification email. "
            return render_template(
                'index.html',
                frags_most_reviews=frags_most_reviews,
                frags_trend_favors=frags_trend_favors,
                frags_top_rated=frags_top_rated,
                login_err_msg=err_msg,
            )
Esempio n. 12
0
def signup():
    table = get_table('UserInfo')
    email = request.form.get('email', "")
    password = request.form.get('password', "")
    name = request.form.get("name", "")
    print("Before " + email)
    try:
        response = table.get_item(Key={
            'email': email,
        })
    except ClientError as e:
        err_msg = e.response['Error']['Message']
        print(err_msg)
        return render_template('index.html', err_msg=err_msg)

    if ('Item' in response) and response['Item']['active']:
        err_msg = ["Account already exists."]
        return render_template(
            'index.html',
            clickSignUp=True,
            signup_err_msg=err_msg,
        )
    else:
        src = email + password
        # code = hashlib.sha256(src.encode('utf-8')).hexdigest()
        code = 'Test'
        response = table.put_item(
            Item={
                'email': email,
                'password': password,
                'name': name,
                'active': False,
                'code': code,
                'favorites': []
            })

        ses = boto3.client('ses')

        link = "https://h1u79dg2z9.execute-api.us-east-1.amazonaws.com/dev/" + 'sign_up/verify/' + email + '&' + code
        print(email)
        response = ses.send_email(
            Source=webapp.config['my_email'],
            Destination={'ToAddresses': [
                email,
            ]},
            Message={
                'Subject': {
                    'Data': 'Welcome to Yammme'
                },
                'Body': {
                    # 'Text': {
                    #     'Data': 'string',
                    #     'Charset': 'string'
                    # },
                    'Html': {
                        'Data':
                        '''
    <h2>Hi
    ''' + name + '''
    !</h2>
    <p>Welcome to the <a href="
    ''' + "https://h1u79dg2z9.execute-api.us-east-1.amazonaws.com/dev/" + '''
    ">Yammme</a>.</p>
    <h3>Verify Your Account</h3>
    <p>To complete your registration, please verify your email address by clicking this <a href="
    ''' + link + '''
    "> Link </a>.</p>
    <p>Alternatively, you can copy and paste the following link into your browser's address window: </p>
    <p>
    ''' + link + '''
    </p>
    			                '''
                    }
                }
            })

    signUpMsg = [
        "To complete the registration, check your emails.",
        "You'll get an email with a link to comfirm that the address is yours."
    ]
    return render_template('index.html', signUpMsg=signUpMsg)
Esempio n. 13
0
def info(brand, name):

    table = get_table('Fragrances')
    key = {'brand': brand, 'name': name}
    try:
        response = table.get_item(Key=key)
    except ClientError as e:
        raise e
    else:
        item = response['Item']

        # if 'reviews' not in item:
        # 	reviews = 1
        # else:
        # 	reviews = item['reviews'] + 1

        # response = table.update_item(
        # 	Key = key,
        # 	UpdateExpression="set reviews = :r",
        # 	ExpressionAttributeValues={
        # 	':r': reviews
        # 	},
        # 	ReturnValues="UPDATED_NEW"
        # 	)

        if 'account' not in session:
            return render_template(
                'info.html',
                item=item,
            )
        else:
            account = session['account']
            table = get_table('Users')

            try:
                response = table.get_item(Key={'account': account})
            except ClientError as e:
                raise e
            else:
                user = response['Item']
                if key in user['favor']:
                    hasFavored = True
                else:
                    hasFavored = False

                hasRated = False
                u_score = None
                if 'rated' in user:
                    for ratedItem in user['rated']:
                        if ratedItem['brand'] == key['brand'] and ratedItem[
                                'name'] == key['name']:
                            hasRated = True
                            u_score = ratedItem['u_score']
                            break

                return render_template('info.html',
                                       item=item,
                                       name=user['name'],
                                       u_score=u_score,
                                       hasFavored=hasFavored,
                                       hasRated=hasRated)
Esempio n. 14
0
def rate():
    score = request.form.get('score')
    brand = request.form.get('brand')
    name = request.form.get('name')
    score = decimal.Decimal(score)
    u_score = score

    brand = brand.replace('&amp;', '&')
    name = name.replace('&amp;', '&')

    table = get_table('Fragrances')

    try:
        response = table.get_item(Key={'brand': brand, 'name': name})
    except ClientError as e:
        raise e
    else:
        item = response['Item']

        if 'account' not in session:
            return render_template('info.html', item=item, notLogin=True)

        if item['rating'] == None:
            num = decimal.Decimal(1)
            rating = {'score': score, 'num': num}
        else:
            num = item['rating']['num'] + 1
            score = (item['rating']['score'] * (num - 1) + score) / num
            print score
            score = decimal.Decimal(score).quantize(decimal.Decimal('0.0'))
            print score
            rating = {'score': score, 'num': num}

        response = table.update_item(Key={
            'brand': brand,
            'name': name
        },
                                     UpdateExpression="set rating = :r",
                                     ExpressionAttributeValues={':r': rating},
                                     ReturnValues="UPDATED_NEW")

        account = session['account']
        table = get_table('Users')

        try:
            response = table.get_item(Key={'account': account})
        except Exception as e:
            raise e
        else:
            user = response['Item']

            if 'rated' not in user:
                rated = []
                rated.append({
                    'brand': brand,
                    'name': name,
                    'u_score': u_score
                })
            else:
                rated = user['rated']
                rated.append({
                    'brand': brand,
                    'name': name,
                    'u_score': u_score
                })
            response = table.update_item(
                Key={'account': account},
                UpdateExpression="set rated = :r",
                ExpressionAttributeValues={':r': rated},
                ReturnValues="UPDATED_NEW")

            return jsonify(ret={
                'score': float(score),
                'num': int(num),
                'u_score': int(u_score)
            })