Esempio n. 1
0
def post_registration(meeting_id):
    participant = get_current_user()
    memo = request.form.get('memo', None)

    if not memo:
        return redirect(
            url_for('meetings.get_form_registration',
                    meeting_id=meeting_id,
                    message='모임에서 달성할 목표는 반드시 입력해야합니다.'))

    meeting = db_session.query(Meeting).filter(
        Meeting.id == meeting_id).first()
    if not meeting:
        return redirect(
            url_for('meetings.get_form_registration',
                    meeting_id=meeting_id,
                    message='해당 모임이 존재하지 않습니다.'))

    registration = db_session.query(Registration).filter(
        Registration.user == participant,
        Registration.meeting == meeting).first()
    if not registration:
        if not meeting.available or len(meeting.users) >= meeting.quota:
            return redirect(
                url_for('meetings.get_form_registration',
                        meeting_id=meeting_id,
                        message='해당 모임에는 참가할 수 없습니다.'))
        registration = Registration(user_id=participant.id,
                                    meeting_id=meeting_id)

    registration.memo = memo
    db_session.add(registration)
    db_session.commit()

    return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
Esempio n. 2
0
def get_form_registration(meeting_id):
    message = request.args.get('message', None)
    current_user = get_current_user()
    meeting = db_session.query(Meeting).filter(Meeting.id == meeting_id).first()
    registration = db_session.query(Registration).filter(Registration.user == current_user, Registration.meeting == meeting).first()

    if (not meeting or len(meeting.users) >= meeting.quota or not meeting.available) and not registration:
        return render_template('meeting.html', message='이미 끝난 모임이거나, 정원이 다 차버린 모임입니다.', meeting=meeting,
                               current_user=get_current_user())

    return render_template('registration.html', participant=current_user, current_user=current_user, next_meeting=meeting,
                           message=message, registration=registration)
Esempio n. 3
0
def post_change_password(user_id: int):
    email = request.form.get('email', '')
    token = request.form.get('token', '')
    expired = request.form.get('expired', '')
    password = request.form.get('password', '')
    password_confirm = request.form.get('password_confirm', '')

    now = datetime.now(tz=config.TIMEZONE)
    expired = datetime.strptime(expired, config.DATETIME_FORMAT)
    if expired < now or not valid_token(
            token, str(user_id), 'post_change_password', expired):  # fail
        return render_template('error.html', message='잘못된 비밀번호 변경 요청입니다.')

    user = db_session.query(User).filter(User.id == user_id).first()
    if not user:
        return render_template('error.html', message='해당 사용자 정보가 존재하지 않습니다.')

    if password != password_confirm:
        return render_template('change-password.html',
                               message='비밀번호와 비밀번호 확인이 일치하지 않습니다.',
                               config=config,
                               email=email,
                               token=token,
                               expired=expired,
                               user_id=user_id)

    user.password = password
    db_session.add(user)
    db_session.commit()

    return render_template('change-password-success.html')
Esempio n. 4
0
def modify_meeting(meeting_id):
    try:
        name, where, location_lat, location_lng, when, when_end, available, quota = get_meeting_data_from_request(
        )
    except ValueError:
        return render_template('error.html',
                               current_user=get_current_user(),
                               message='잘못된 요청입니다.'), 400

    meeting = db_session.query(Meeting).filter(
        Meeting.id == meeting_id).first()
    if not meeting:
        return render_template('error.html',
                               current_user=get_current_user(),
                               message='해당 모임 정보가 없습니다.')

    when = config.TIMEZONE.localize(datetime.strptime(when, '%Y-%m-%d %H:%M'))
    when_end = config.TIMEZONE.localize(
        datetime.strptime(when_end, '%Y-%m-%d %H:%M'))

    meeting.name = name
    meeting.where = where
    meeting.location_lat = location_lat
    meeting.location_lng = location_lng
    meeting.when = when
    meeting.when_end = when_end
    meeting.available = available
    meeting.quota = quota
    db_session.add(meeting)
    db_session.commit()

    return redirect(url_for('meetings.get_meetings'))
Esempio n. 5
0
def get_meeting(meeting_id):
    meeting = db_session.query(Meeting).filter(
        Meeting.id == meeting_id).first()
    return render_template('meeting.html',
                           meeting=meeting,
                           current_user=get_current_user(),
                           config=config)
Esempio n. 6
0
def post_change_password(user_id: int):
    email = request.form.get('email', '')
    token = request.form.get('token', '')
    expired = request.form.get('expired', '')
    password = request.form.get('password', '')
    password_confirm = request.form.get('password_confirm', '')

    now = datetime.now(tz=config.TIMEZONE)
    expired = datetime.strptime(expired, config.DATETIME_FORMAT)
    if expired < now or not valid_token(token, str(user_id), 'post_change_password', expired):  # fail
        return render_template('error.html', message='잘못된 비밀번호 변경 요청입니다.')

    user = db_session.query(User).filter(User.id == user_id).first()
    if not user:
        return render_template('error.html', message='해당 사용자 정보가 존재하지 않습니다.')

    if password != password_confirm:
        return render_template('change-password.html', message='비밀번호와 비밀번호 확인이 일치하지 않습니다.', config=config,
                               email=email, token=token, expired=expired, user_id=user_id)

    user.password = password
    db_session.add(user)
    db_session.commit()

    return render_template('change-password-success.html')
Esempio n. 7
0
def post_signup():
    email = request.form.get('email', None)
    name = request.form.get('name', None)
    password = request.form.get('password', None)
    password_confirm = request.form.get('password_confirm', None)
    mail_subscribe = request.form.get('mail_subscribe', 'off') == 'on'

    message = None

    # validation of user input
    if not EMAIL_REGEX.match(email):
        message = '이메일 형식이 올바르지 않습니다.'
    elif password != password_confirm:
        message = '입력한 두 비밀번호가 서로 다릅니다.'
    elif not name:
        message = '이름이 입력되지 않았습니다.'

    # check user duplication
    if db_session.query(User).filter(User.email == email).count() > 0:
        message = '동일한 이메일 주소로 가입된 사용자가 존재합니다.'

    if message:
        return render_template('signup.html', message=message, input_email=email, input_name=name)

    # add user
    user = User(name=name, email=email, password=password, mail_subscribe=mail_subscribe)
    db_session.add(user)
    db_session.commit()

    return render_template('signup-success.html')
Esempio n. 8
0
def form_modify_meeting(meeting_id):
    meeting = db_session.query(Meeting).filter(
        Meeting.id == meeting_id).first()
    if not meeting:
        return render_template('error.html',
                               current_user=get_current_user(),
                               message='해당 모임 정보가 없습니다.')
    return render_template('form-meeting.html',
                           meeting=meeting,
                           current_user=get_current_user(),
                           config=config)
Esempio n. 9
0
def get_form_registration(meeting_id):
    message = request.args.get('message', None)
    current_user = get_current_user()
    meeting = db_session.query(Meeting).filter(
        Meeting.id == meeting_id).first()
    registration = db_session.query(Registration).filter(
        Registration.user == current_user,
        Registration.meeting == meeting).first()

    if (not meeting or len(meeting.users) >= meeting.quota
            or not meeting.available) and not registration:
        return render_template('meeting.html',
                               message='이미 끝난 모임이거나, 정원이 다 차버린 모임입니다.',
                               meeting=meeting,
                               current_user=get_current_user())

    return render_template('registration.html',
                           participant=current_user,
                           current_user=current_user,
                           next_meeting=meeting,
                           message=message,
                           registration=registration)
Esempio n. 10
0
def post_registration(meeting_id):
    participant = get_current_user()
    memo = request.form.get('memo', None)

    if not memo:
        return redirect(url_for('meetings.get_form_registration', meeting_id=meeting_id, message='모임에서 달성할 목표는 반드시 입력해야합니다.'))

    meeting = db_session.query(Meeting).filter(Meeting.id == meeting_id).first()
    if not meeting:
        return redirect(url_for('meetings.get_form_registration', meeting_id=meeting_id, message='해당 모임이 존재하지 않습니다.'))

    registration = db_session.query(Registration).filter(Registration.user == participant, Registration.meeting == meeting).first()
    if not registration:
        if not meeting.available or len(meeting.users) >= meeting.quota:
            return redirect(url_for('meetings.get_form_registration', meeting_id=meeting_id, message='해당 모임에는 참가할 수 없습니다.'))
        registration = Registration(user_id=participant.id, meeting_id=meeting_id)

    registration.memo = memo
    db_session.add(registration)
    db_session.commit()

    return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
Esempio n. 11
0
def post_signin():
    email = request.form.get('email', None)
    password = request.form.get('password', None)
    dest = request.args.get('dest', None)

    user = db_session.query(User).filter(User.email == email, User.password == password).first()
    if user:
        session['user_id'] = user.id
    else:
        return render_template('signin.html', message='로그인 정보가 잘못되었습니다.')

    if not dest:
        dest = url_for('index.get_index')
    return redirect(dest)
Esempio n. 12
0
def post_signin():
    email = request.form.get('email', None)
    password = request.form.get('password', None)
    dest = request.args.get('dest', None)

    user = db_session.query(User).filter(User.email == email,
                                         User.password == password).first()
    if user:
        session['user_id'] = user.id
    else:
        return render_template('signin.html', message='로그인 정보가 잘못되었습니다.')

    if not dest:
        dest = url_for('index.get_index')
    return redirect(dest)
Esempio n. 13
0
def manage_registration(meeting_id, registration_id):
    registration = db_session.query(Registration).filter(Registration.id == registration_id).first()
    if not registration:
        return render_template('error.html', message='해당 참가 신청이 존재하지 않습니다.')
    if meeting_id != registration.meeting_id:
        return render_template('error.html', message='해당 참가 신청 데이터가 잘못되었습니다. (not matched meeting id)')
    status = request.form.get('status', None)
    if status not in ['waiting', 'accepted', 'cancelled', 'refused', 'not-attended']:
        return render_template('error.html', message='참가 신청 상태 정보가 잘못되었습니다. (' + str(status) + ')')

    registration.status = status
    db_session.add(registration)
    db_session.commit()

    return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
Esempio n. 14
0
def manage_registration(meeting_id, registration_id):
    registration = db_session.query(Registration).filter(
        Registration.id == registration_id).first()
    if not registration:
        return render_template('error.html', message='해당 참가 신청이 존재하지 않습니다.')
    if meeting_id != registration.meeting_id:
        return render_template(
            'error.html',
            message='해당 참가 신청 데이터가 잘못되었습니다. (not matched meeting id)')
    status = request.form.get('status', None)
    if status not in [
            'waiting', 'accepted', 'cancelled', 'refused', 'not-attended'
    ]:
        return render_template('error.html',
                               message='참가 신청 상태 정보가 잘못되었습니다. (' +
                               str(status) + ')')

    registration.status = status
    db_session.add(registration)
    db_session.commit()

    return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
Esempio n. 15
0
def post_find_password():
    email = request.form.get('email', '')

    if not email:
        return render_template('find-password.html', message='메일 주소를 입력해주세요.')

    user = db_session.query(User).filter(User.email == email).first()
    if not user:
        return render_template('find-password.html', message='해당 메일 주소를 갖는 사용자가 없습니다.')

    expired = datetime.now(tz=config.TIMEZONE) + timedelta(minutes=30)
    args = {
        'config': config,
        'expired': expired,
        'email': email,
        'user_id': user.id,
        'token': create_token(email, 'form_change_password', expired)
    }
    if send_email_to_user(user, '[tototo] 요청하신 비밀번호 찾기 메일입니다.', 'mail-find-password.html', args):
        return render_template('find-password-send-complete.html')

    return render_template('error.html', message='비밀번호 찾기 메일 발송에 실패했습니다.')
Esempio n. 16
0
def modify_meeting(meeting_id):
    try:
        name, where, location_lat, location_lng, when, available, quota = get_meeting_data_from_request()
    except ValueError:
        return render_template('error.html', current_user=get_current_user(), message='잘못된 요청입니다.'), 400

    meeting = db_session.query(Meeting).filter(Meeting.id == meeting_id).first()
    if not meeting:
        return render_template('error.html', current_user=get_current_user(), message='해당 모임 정보가 없습니다.')

    when = config.TIMEZONE.localize(datetime.strptime(when, '%Y-%m-%d %H:%M'))

    meeting.name = name
    meeting.where = where
    meeting.location_lat = location_lat
    meeting.location_lng = location_lng
    meeting.when = when
    meeting.available = available
    meeting.quota = quota
    db_session.add(meeting)
    db_session.commit()

    return redirect(url_for('meetings.get_meetings'))
Esempio n. 17
0
def post_find_password():
    email = request.form.get('email', '')

    if not email:
        return render_template('find-password.html', message='메일 주소를 입력해주세요.')

    user = db_session.query(User).filter(User.email == email).first()
    if not user:
        return render_template('find-password.html',
                               message='해당 메일 주소를 갖는 사용자가 없습니다.')

    expired = datetime.now(tz=config.TIMEZONE) + timedelta(minutes=30)
    args = {
        'config': config,
        'expired': expired,
        'email': email,
        'user_id': user.id,
        'token': create_token(email, 'form_change_password', expired)
    }
    if send_email_to_user(user, '[tototo] 요청하신 비밀번호 찾기 메일입니다.',
                          'mail-find-password.html', args):
        return render_template('find-password-send-complete.html')

    return render_template('error.html', message='비밀번호 찾기 메일 발송에 실패했습니다.')
Esempio n. 18
0
def post_signup():
    email = request.form.get('email', None)
    name = request.form.get('name', None)
    password = request.form.get('password', None)
    password_confirm = request.form.get('password_confirm', None)
    mail_subscribe = request.form.get('mail_subscribe', 'off') == 'on'

    message = None

    # validation of user input
    if not EMAIL_REGEX.match(email):
        message = '이메일 형식이 올바르지 않습니다.'
    elif password != password_confirm:
        message = '입력한 두 비밀번호가 서로 다릅니다.'
    elif not name:
        message = '이름이 입력되지 않았습니다.'

    # check user duplication
    if db_session.query(User).filter(User.email == email).count() > 0:
        message = '동일한 이메일 주소로 가입된 사용자가 존재합니다.'

    if message:
        return render_template('signup.html',
                               message=message,
                               input_email=email,
                               input_name=name)

    # add user
    user = User(name=name,
                email=email,
                password=password,
                mail_subscribe=mail_subscribe)
    db_session.add(user)
    db_session.commit()

    return render_template('signup-success.html')
Esempio n. 19
0
def form_modify_meeting(meeting_id):
    meeting = db_session.query(Meeting).filter(Meeting.id == meeting_id).first()
    if not meeting:
        return render_template('error.html', current_user=get_current_user(), message='해당 모임 정보가 없습니다.')
    return render_template('form-meeting.html', meeting=meeting, current_user=get_current_user(), config=config)
Esempio n. 20
0
def get_meetings():
    meetings = db_session.query(Meeting).order_by(desc(
        Meeting.registered)).all()
    return render_template('meetings-list.html',
                           meetings=meetings,
                           current_user=get_current_user())
Esempio n. 21
0
def get_meeting(meeting_id):
    meeting = db_session.query(Meeting).filter(Meeting.id == meeting_id).first()
    return render_template('meeting.html', meeting=meeting, current_user=get_current_user())
Esempio n. 22
0
def get_meetings():
    meetings = db_session.query(Meeting).order_by(desc(Meeting.registered)).all()
    return render_template('meetings-list.html', meetings=meetings, current_user=get_current_user())