def verify(verify_key): with db.ConnectionInstance() as queries: email = queries.get_verify_info(verify_key) if email: with db.ConnectionInstance() as queries: queries.activate_user(email) user = load_user(email) login_user(user) return render_template("verify_confirm.html") else: return ( "Your account has been already verified or the link is no longer valid" )
def add_calendar(): if request.method == "POST": cal_name = request.form.get('newCalendarName', None) cal_color = request.form.get('color', None) if cal_name and cal_color and len(cal_name) < 45 and len( cal_color) == 7: with db.ConnectionInstance() as queries: new_cal_id = queries.add_calendar(datetime.utcnow(), current_user.user_id, cal_name, cal_color[1:]) if new_cal_id: # parse 'invites' string and send invites invites = re.sub('\s+', ' ', request.form.get('invites', '')).strip() invites = re.split(',| |;', invites) for email in invites: # send email to email sent = send_invite(current_user.username(), email, cal_name) if sent and queries.check_invite(email, new_cal_id): role = 3 # 0: owner, 1: admin, 2: contributor, 3: user queries.send_invite(new_cal_id, queries.get_user_id(email), current_user.user_id, role, email) cal_data = queries.get_calendars_details((new_cal_id, ))[0] return json.dumps({ 'success': 'true', 'data': json.dumps(cal_data, default=type_handler) }) return json.dumps({'success': 'false'})
def set_instance(): if request.method == "POST": eid = request.form.get('event_id', None) year = request.form.get('year', None) if not eid or not year: return json.dumps({ 'success': 'false', 'message': 'Non specified event id or year' }) response, data = verify.prepare_set_instance_data() if not response: return json.dumps({'success': 'false', 'message': data}) with db.ConnectionInstance() as queries: cid = queries.get_event_calendar_id(eid) role = queries.get_calendar_role(current_user.user_id, cid) if role is not None and role <= 2: chid = queries.get_child_id(eid, year) if chid: queries.update_child(data, chid) else: data['child_date_created'] = datetime.utcnow() data['child_owner_id'] = current_user.user_id data['child_parent_id'] = eid data['child_year'] = year chid = queries.add_child(data) if chid: success = [ queries.add_child_file(file, eid, chid) for file in request.files.getlist('file') ] return json.dumps({'success': 'true', 'files': success}) return json.dumps({'success': 'false'})
def edit_calendar(): cal_data = {} if request.method == "POST": cal_data['calendar_name'] = request.form.get('newCalendarName', None) cal_data['calendar_color'] = request.form.get('color', None)[1:] cid = request.form.get('cal_id', None) with db.ConnectionInstance() as queries: role = queries.get_calendar_role(current_user.user_id, cid) if role is not None and role <= 2: success = queries.update_calendar(cal_data, cid) if success: # parse 'invites' string and send invites invites = re.sub('\s+', ' ', request.form.get('invites', '')).strip() invites = re.split(',| |;', invites) for email in invites: # send email to email sent = send_invite(current_user.username(), email, cal_data['calendar_name']) if sent and queries.check_invite(email, cid): role = 3 # 0: owner, 1: admin, 2: contributor, 3: user queries.send_invite(cid, queries.get_user_id(email), current_user.user_id, role, email) cal_data = queries.get_calendars_details((cid, ))[0] return json.dumps({ 'success': 'true', 'data': json.dumps(cal_data, default=type_handler) }) return json.dumps({'success': 'false'})
def register(): """ """ if request.method == "POST": # read the posted values from the UI email = request.form.get('inputEmail', None) password = request.form.get('inputPassword', None) # validate received values if email and password and not user_exists(email): with db.ConnectionInstance() as queries: key = random_key(10) + email # TODO delete or merge previously created user if exists #adds new user to the database added = queries.add_user(datetime.utcnow(), email, hash_password(password), key) if (added): user = User(email) #adds default calendar to that user queries.add_calendar(datetime.utcnow(), user.user_id) #send verfication email send_verification(email, key) return render_template("verify_send.html", email=email) # reload if something not right # TODO maybe some error messages return redirect('/')
def leave_calander(): if request.method == 'POST': cid = request.form.get("calender_id", None) with db.ConnectionInstance() as q: q.leave_calander(cid, current_user.user_id) return 'true' return 'false'
def uploaded_file(filename): eid = request.args.get('id', None) chid = request.args.get('chid', None) with db.ConnectionInstance() as queries: cal = queries.get_event_calendar_id(eid) role = queries.get_calendar_role(current_user.user_id, cal) if role is not None: return load_file(filename, eid, chid)
def decline_calander(): if request.method == 'POST': id = request.form.get("calendar_id", None) role = request.form.get("role", None) with db.ConnectionInstance() as q: if q.check_for_invite(current_user.user_id, id, role) == True: return 'true' return 'false'
def get_data(): """ """ with db.ConnectionInstance() as queries: calendar_ids = queries.get_calendars(current_user.user_id) cal_details = queries.get_calendars_details(calendar_ids) event_details = queries.get_events_details(calendar_ids) return json.dumps([cal_details, event_details], default=type_handler)
def verifyoption(): email = request.form.get("email", None) user = load_user(email) if email: key = random_key(10) + email with db.ConnectionInstance() as queries: queries.make_verifykey(user.user_id, key) send_verification(email, key) return render_template("verify_send.html", email=email)
def profile(): with db.ConnectionInstance() as q: phone = q.get_user_data(current_user.user_id) name = current_user.username() user_data = {"name": name, "email": current_user.email, "phone": phone} return render_template('display_profile.html', name=name, email=current_user.email, phone=phone)
def delete_cal(): if request.method == "POST": cal = request.form.get('calendar_id', None) if cal: with db.ConnectionInstance() as queries: role = queries.get_calendar_role(current_user.user_id, cal) if role is not None and role == 0: queries.db_del_cal(cal) return 'true' return 'false'
def reset(resetkey): with db.ConnectionInstance() as queries: email = queries.get_reset_info(resetkey) if email: if request.method == "POST": if reset_password(email): return render_template("resetsuccess.html") return render_template("reset.html") else: return render_template("invalidlink.html")
def delete_event(): if request.method == "POST": event = request.form.get('event_id', None) if event: with db.ConnectionInstance() as queries: cal = queries.get_event_calendar_id(event) role = queries.get_calendar_role(current_user.user_id, cal) if role is not None and role == 0: queries.db_del_event(event) # TODO delete files return 'true' return 'false'
def notifications(): with db.ConnectionInstance() as q: invites = q.get_user_invites(current_user.user_id) with friends_queries() as q: friend_ids = q.get_friend_requests(current_user.email) friend_requests = [{ 'user_id': fid[0], 'sender': q.get_user_repr(fid[0]) } for fid in friend_ids] return render_template('notifications.html', cal_invites=invites, friend_requests=friend_requests)
def update_profile(): if request.method == "POST": name = request.form.get('name', None) name = current_user.name if name == '' or name == None else name try: phone = int(request.form['phone']) except: phone = None if name and len(name) < 45: with db.ConnectionInstance() as queries: if queries.update_user(current_user.user_id, name, phone): return 'true' return 'false'
def request_calandar(): if request.method == "POST": cal_id = request.form.get('cal_id', None) if cal_id: with db.ConnectionInstance() as queries: role = queries.get_calendar_role(current_user.user_id, cal_id) if role is not None: cal_data = queries.get_calendars_details((cal_id, ))[0] return json.dumps({ 'success': 'true', 'data': json.dumps(cal_data, default=type_handler) }) return json.dumps({'success': 'false'})
def invite_calander(): if request.method == 'POST': email = request.form.get("email", None) if len(email) > 45: return 'false' calendar_id = request.form.get("calendar_id", None) role = request.form.get("role", None) with db.ConnectionInstance() as q: if q.get_calendar_role(current_user.user_id, calendar_id) == 0 and q.check_invite( email, calendar_id): q.send_invite(calendar_id, q.get_user_id(email), current_user.user_id, role, email) return 'true' return 'false'
def edit_event(): if request.method == "POST": eid = request.form.get('event_id', None) if eid is None: return json.dumps({ 'success': 'false', 'message': 'Missing event id' }) response, data = verify.prepare_edit_event_data() if not response: return json.dumps({'success': 'false', 'message': data}) with db.ConnectionInstance() as queries: current_calendar = queries.get_event_calendar_id(eid) if current_calendar is None: return json.dumps({ 'success': 'false', 'message': 'bad event ID' }) role_old = queries.get_calendar_role(current_user.user_id, current_calendar) if role_old is None or role_old > 1: return json.dumps({ 'success': 'false', 'message': 'no permission' }) if data['event_calendar_id'] and data[ 'event_calendar_id'] != current_calendar: role_new = queries.get_calendar_role(current_user.user_id, data['event_calendar_id']) if role_new is None or role_new > 1: return json.dumps({ 'success': 'false', 'message': 'no permission' }) edit = queries.update_event(data, eid) if edit: success = [ queries.add_event_file(file, eid) for file in request.files.getlist('file') ] return json.dumps({'success': 'true', 'files': success}) return json.dumps({'success': 'false'})
def add_event(): if request.method == "POST": response, data = verify.prepare_new_event_data() if not response: return json.dumps({'success': 'false', 'message': data}) with db.ConnectionInstance() as queries: role = queries.get_calendar_role(current_user.user_id, data['event_calendar_id']) if role is not None and role <= 2: eid = queries.add_event(data) if eid: success = [ queries.add_event_file(file, eid) for file in request.files.getlist('file') ] return json.dumps({ 'success': 'true', 'id': eid, 'files': success }) return json.dumps({'success': 'false'})
def delete_user(): with db.ConnectionInstance() as queries: queries.db_del_user(current_user.user_id) logout_user() # TODO redirect to user has been deleted page return redirect(url_for('index'))