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')
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')
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'))
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')
def post_meeting(): 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 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 = Meeting(name=name, where=where, when=when, when_end=when_end, available=available, quota=quota, location_lat=location_lat, location_lng=location_lng) db_session.add(meeting) db_session.commit() return redirect(url_for('meetings.get_meetings'))
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))
def post_meeting(): 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 when = config.TIMEZONE.localize(datetime.strptime(when, '%Y-%m-%d %H:%M')) meeting = Meeting( name=name, where=where, when=when, available=available, quota=quota, location_lat=location_lat, location_lng=location_lng) db_session.add(meeting) db_session.commit() return redirect(url_for('meetings.get_meetings'))
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))
def post_slides(meeting_id): presenter_id = int(request.form.get('presenter_id', '-1')) title = request.form.get('title', None) memo = request.form.get('memo', None) url = request.form.get('url', None) if not title or not url or presenter_id == -1: return render_template( 'form-slides.html', current_user=get_current_user(), meeting_id=meeting_id, message='발표자 번호, 제목, URL은 반드시 입력해야합니다.') slide = Slide(presenter_id=presenter_id, meeting_id=meeting_id, title=title, memo=memo, url=url) db_session.add(slide) db_session.commit() return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
def post_meeting(): name = request.form.get('name', None) where = request.form.get('where', None) when = request.form.get('when', None) available = request.form.get('available', 'off') == 'on' quota = int(request.form.get('quota', '-1')) if not name or not where or not when or quota == -1: return '', 400 when = config.TIMEZONE.localize(datetime.strptime(when, '%Y-%m-%d %H:%M')) meeting = Meeting(name=name, where=where, when=when, available=available, quota=quota) db_session.add(meeting) db_session.commit() return redirect(url_for('meetings.get_meetings'))
def post_slides(meeting_id): presenter_id = int(request.form.get('presenter_id', '-1')) title = request.form.get('title', None) memo = request.form.get('memo', None) url = request.form.get('url', None) if not title or not url or presenter_id == -1: return render_template('form-slides.html', current_user=get_current_user(), meeting_id=meeting_id, message='발표자 번호, 제목, URL은 반드시 입력해야합니다.') slide = Slide(presenter_id=presenter_id, meeting_id=meeting_id, title=title, memo=memo, url=url) db_session.add(slide) db_session.commit() return redirect(url_for('meetings.get_meeting', meeting_id=meeting_id))
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))
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))
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'))