Exemple #1
0
def login():
    s3 = boto3.client('s3')
    #default_image_path = os.path.join(current_app.config['APP_ROOT'], 'static/img/default.jpg')

    #     #s3.upload_file(default_image_path, 'ece1779-final', '/tmp/default/default.jpg')
    #
    #     #target_image_path = os.path.join(current_app.config['APP_ROOT'], 'static/profile_pics')
    #     #shutil.rmtree(target_image_path)
    #     #os.mkdir(os.path.join(current_app.config['APP_ROOT'], 'static/profile_pics'))
    #
    #     #s3.download_file('ece1779-final', '/tmp/default/default.jpg','/tmp/default.jpg')

    if 'user' in session:
        return redirect(url_for('main.home'))
    form = LoginForm()
    users_table = Users()
    if form.validate_on_submit():
        email = form.email.data
        users = users_table.query_email(email)
        if len(users) == 0:  #users空
            print("!!!")
            flash("You should register first", 'danger')
        else:
            user = users[0]
            print(user)
            if len(user['image_file']) == 0:
                user[
                    'image_file'] = 'https://covid19blog.s3.amazonaws.com/default/default.jpg'
            # else :
            #     if (user['image_file']!='default.jpg'):
            #       #print(target_image_path + '/' + user['image_file'])
            #       # s3.download_file('ece1779-final',
            #       #                '/tmp/'+ user['email'] + '/user_images/{}'.format(user['image_file']),
            #       #                '/tmp/'+user['image_file'])
            if user and bcrypt.check_password_hash(user['password'],
                                                   form.password.data):
                #print(user['image_file'])
                try:
                    place = get_coordinates(
                        current_app.config['GOOGLEMAPS_KEY'], user['address'])
                    place['infobox'] = "<b>Hello World</b>"
                    user_current_location = [place['lat'], place['lng']]
                except:
                    user_current_location = None
                session.permanent = True
                session['user'] = {
                    'username': user['username'],
                    'email': user['email'],
                    'image_file': user['image_file'],
                    'user_current_location': user_current_location
                }
                next_page = request.args.get('next')
                #flash('Login Successful', 'message')
                return redirect(next_page) if next_page else redirect(
                    url_for('main.home'))
            else:
                flash('Login Unsuccessful. Please check email and password',
                      'danger')
    return render_template('login.html', title='Login', form=form)
Exemple #2
0
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        print(Users.query.all())
        username = form.username.data
        email = form.email.data
        password = form.password.data
        hashed_password = bcrypt.generate_password_hash(password).decode(
            "utf-8")
        if Users.query.filter_by(
                username=username).first() or Users.query.filter_by(
                    email=email).first():
            flash(
                f'Could not create account.Username or email is already taken!',
                'danger')
            return redirect(url_for('users.register'))
        else:
            user = Users(username=username,
                         password=hashed_password,
                         email=email)
            db.session.add(user)
            db.session.commit()
            flash(f'Account created for {form.username.data}!', 'success')
            print(Users.query.all())
            return redirect(url_for('users.login'))

        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('main.home'))
    return render_template('register.html', title='Register', form=form)
Exemple #3
0
def account():
    s3 = boto3.client('s3')
    profile_img_folder = '/tmp'
    if 'user' not in session:
        return redirect(url_for('main.login'))
    form = UpdateAccountForm()
    users_table = Users()
    if form.validate_on_submit():
        if form.picture.data:
            picture_file = save_picture(form.picture.data)
            target_img_path = "/".join([profile_img_folder, picture_file])
            s3.upload_file(
                target_img_path, 'ece1779-final',
                '/tmp/' + session['user']['email'] +
                '/user_images/{}'.format(picture_file))
            url = s3.generate_presigned_url(
                'get_object',
                Params={
                    'Bucket':
                    'ece1779-final',
                    'Key':
                    '/tmp/' + session['user']['email'] +
                    '/user_images/{}'.format(picture_file)
                },
                ExpiresIn=604800)

            users_table.update_imagefile(session['user']['username'], url,
                                         picture_file)
            # =======
            #             users_table.update_imagefile(session['user']['username'],url)
            # >>>>>>> 708ef730537a1e160d1903d5d876ac41188ffdda
            session['user']['image_file'] = url
            flash('Your account has been updated!', 'success')
        return redirect(url_for('users.account'))
    elif request.method == 'GET':
        form.username.data = session['user']['username']
        form.email.data = session['user']['email']

    image_file = '/tmp/' + session['user']['image_file']
    #print(session['user']['image_file'])
    return render_template('account.html',
                           title='Account',
                           image_file=image_file,
                           form=form)
Exemple #4
0
def register():
    if current_user.is_authenticated:
        return redirect(url_for('main.home'))
    form = RegistrationForm()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user = Users(username=form.username.data, email=form.email.data, password=hashed_password)
        db.session.add(user)
        db.session.commit()
        flash('Your account has bees created, You are able to login!!', 'success')
        return redirect(url_for('users.login'))
    return render_template('register.html', title='Register', form=form)
Exemple #5
0
def reset_request():
    if 'user' in session:
        return redirect(url_for('main.home'))
    form = RequestResetForm()
    if form.validate_on_submit():
        user = Users()
        user = user.query_email(email=form.email.data)
        if len(user) == 0:
            flash('Your account does not exist', 'error')
            return redirect(url_for('users.reset_password'))
        email = user[0]['email']
        username = user[0]['username']
        image_file = user[0]['image_file']
        user = User(email=email, username=username, image_file=image_file)
        #user = User.query.filter_by(email=form.email.data).first()
        send_reset_email(user)
        flash(
            'An email has been sent with instructions to reset your password.',
            'info')
        return redirect(url_for('users.login'))
    return render_template('reset_request.html',
                           title='Reset Password',
                           form=form)
Exemple #6
0
def post(post_id):
    if 'user' not in session:
        flash('Please log in to access this page', 'warning')
        return redirect(url_for('users.login'))

    post = Posts()
    post = post.get_post(post_id)
    print("_-----------------")
    print(session)
    print(session['user']['user_current_location'])
    locations = []  # long list of coordinates
    #place = get_coordinates(current_app.config['GOOGLEMAPS_KEY'], session['user']['user_current_location'])
    place = {}
    try:
        place['lat'] = session['user']['user_current_location'][0]
        place['lng'] = session['user']['user_current_location'][1]
        place['icon'] = 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png'
        place['infobox'] = "<b>Your Current Location</b>"
        locations.append(place)
    except:
        flash(
            "Your location shows error, Please input your location in search bar",
            "warning")
        return redirect(url_for('main.offerhelp'))
    place1 = {}
    place1 = get_coordinates(current_app.config['GOOGLEMAPS_KEY'],
                             post.address)
    place1['icon'] = 'http://maps.google.com/mapfiles/ms/icons/red-dot.png'
    place1['infobox'] = "<b>Target Location</b>"
    locations.append(place1)

    print(locations)

    map_offerhelp = Map(identifier="map_offerhelp",
                        style=("height:350px;"
                               "width:730px;"),
                        lat=locations[0]['lat'],
                        lng=locations[0]['lng'],
                        markers=[(loc['lat'], loc['lng'], loc['infobox'],
                                  loc['icon']) for loc in locations],
                        fit_markers_to_bounds=True)
    print(post.timestamp)
    user_table = Users()
    #post = Post.query.get_or_404(post_id)
    return render_template('post.html',
                           title=post.title,
                           post=post,
                           user_table=user_table,
                           map_offerhelp=map_offerhelp)
Exemple #7
0
def reset_token(token):
    if current_user.is_authenticated:
        return redirect(url_for('main.home'))
    user = Users.verify_reset_token(token)
    if user is None:
        flash('This is invalid token!!', 'warning')
        return redirect(url_for('users.reset_request'))
    form = ResetPasswordForm()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user.password = hashed_password
        db.session.commit()
        flash('Your password has been updated!!, You are able to login!!', 'success')
        return redirect(url_for('users.login'))
    return render_template('reset_token.html', title='Reset Password', form=form, legend='Reset Password')
Exemple #8
0
def user_posts(username):
    # page = request.args.get('page', 1, type=int)
    # user = User.query.filter_by(username=username).first_or_404()
    # posts = Post.query.filter_by(author=user)\
    #     .order_by(Post.date_posted.desc())\
    #     .paginate(page=page, per_page=5)
    post_table = Posts()
    #list of Post objects
    posts = post_table.query_post_by_username(username)
    length = len(posts)
    print("here", posts)
    user_table = Users()
    return render_template('user_posts.html',
                           posts=posts,
                           user_table=user_table,
                           username=username,
                           length=length)
Exemple #9
0
def register():
    try:
        if 'user' in session:
            return redirect(url_for('main.home'))

        form = RegistrationForm()
        users_table = Users()
        if form.validate_on_submit():
            hashed_password = bcrypt.generate_password_hash(
                form.password.data).decode('utf-8')
            # user = User2(username=form.username.data, email=form.email.data, password=hashed_password)
            #db.session.add(user)
            #db.session.commit()
            username = form.username.data
            email = form.email.data
            password = hashed_password
            address = form.address.data
            try:
                place = get_coordinates(current_app.config['GOOGLEMAPS_KEY'],
                                        address)
            except:
                flash("Your address is invalid", "warning")
                return render_template('register.html',
                                       title='Register',
                                       form=form)

            user = users_table.get_user(username)
            user_emails = users_table.query_email(email)
            if user != None and len(user_emails) != 0:
                flash("Username already exists", "danger")
            elif user != None:
                flash("Username already exists", "danger")
            elif len(user_emails) != 0:
                if user_emails != None: print(user_emails)
                flash("Email already exists", "danger")
            else:
                users_table.put_user(username, email, password, address)
                flash(
                    'Your account has been created! You are now able to log in',
                    'success')
                return redirect(url_for('users.login'))
        return render_template('register.html', title='Register', form=form)

    except Exception as e:
        print(e)
        traceback.print_tb(e.__traceback__)
        return render_template('error.html')
    return ' '
def offerhelp():
    form = SearchForm()
    post_table = Posts()
    users = Users()
    s3 = boto3.client('s3')
    target_image_path = '/tmp'

    allusers = users.get_all_users()
    for user in allusers:
        url = user['image_file']
        r = requests.get(url)
        if r.status_code == 403:
            url = s3.generate_presigned_url(
                'get_object',
                Params={
                    'Bucket':
                    'ece1779-final',
                    'Key':
                    '/tmp/' + session['user']['email'] +
                    '/user_images/{}'.format(user['image_name'])
                },
                ExpiresIn=604800)
            users.update_imagefile2(user['username'], url)
    for user in allusers:
        if (imgisexist(user['image_file'], target_image_path)):
            #print('ece1779-final', user['email'] + '/user_images/{}'.format(user['image_file']))
            #print(target_image_path + '/' + user['image_file'])
            print(user['image_file'])
            # s3.download_file('ece1779-final','/tmp/'+user['email'] + '/user_images/{}'.format(user['image_file']),
            #              target_image_path + '/' + user['image_file'])

    if form.validate_on_submit():
        #locations=post_table.query_post_by_address(form.location.data)
        types = post_table.get_all_posts()
        if form.type.data != "All":
            #print(form.type.data)
            types = post_table.query_post_by_type(form.type.data)
        sdates = post_table.query_post_by_sdate(form.sdate.data)
        fdates = post_table.query_post_by_fdate(form.fdate.data)
        search_results = extra_same_elem(types, sdates)
        search_results = extra_same_elem(search_results, fdates)
        #print(search_results)

        #####################################################################
        locations = []  # long list of coordinates
        place = get_coordinates(current_app.config['GOOGLEMAPS_KEY'],
                                form.location.data)
        place['infobox'] = "<b>Hello World</b>"
        locations.append(place)
        for item in search_results:
            #print(item)
            temp = {}
            temp['lat'] = item.lat
            temp['lng'] = item.lng
            temp['infobox'] = "<b>Hello World from other place</b>"
            locations.append(temp)
        print(locations)
        temp_results = []
        i = 1
        user_current_location = [locations[0]['lat'], locations[0]['lng']]
        session['user']['user_current_location'] = user_current_location
        #print(session['user']['user_current_location'])
        for item in search_results:
            post_location = [locations[i]['lat'], locations[i]['lng']]
            i += 1
            item.distance = great_circle(user_current_location,
                                         post_location).km
            print("Distance:{}km".format(item.distance))
            if form.distance.data >= item.distance:
                temp_results.append([item.distance, item.post_id])
            #print(second_search_results)
        temp_results.sort()
        #print(temp_results)
        search_results.clear()
        for item in temp_results:
            post = post_table.get_post(item[1])
            search_results.append(post)
            if len(search_results) > 4:
                break
        #####################################################################
        print(search_results)
        user_table = Users()

        return render_template('offerhelp.html',
                               posts=search_results,
                               user_table=user_table,
                               form=form,
                               legend='Filter Request')
    else:
        post_table = Posts()
        # list of Post objects
        posts = post_table.get_all_posts()
        user_table = Users()
        return render_template('offerhelp.html',
                               posts=posts,
                               user_table=user_table,
                               form=form,
                               legend='Filter Request')