Esempio n. 1
0
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"
        )
Esempio n. 2
0
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'})
Esempio n. 3
0
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'})
Esempio n. 4
0
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'})
Esempio n. 5
0
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('/')
Esempio n. 6
0
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'
Esempio n. 7
0
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)
Esempio n. 8
0
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'
Esempio n. 9
0
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)
Esempio n. 10
0
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)
Esempio n. 11
0
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)
Esempio n. 12
0
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'
Esempio n. 13
0
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")
Esempio n. 14
0
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'
Esempio n. 15
0
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)
Esempio n. 16
0
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'
Esempio n. 17
0
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'})
Esempio n. 18
0
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'
Esempio n. 19
0
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'})
Esempio n. 20
0
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'})
Esempio n. 21
0
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'))