Пример #1
0
def recover_step1_post(json):
    try:
        data = CurrentUserSchema(only=("email", )).load(json).data
    except ValidationError as e:
        return jsonify(error="validation-failed", fields=e.messages), 422

    user = User.by_email_address(data["email_address"])
    if not user:
        return jsonify(error="email-unknown"), 422

    user.generate_recover_key(request.remote_addr)

    current_user = User.get(request.user_id) if request.user_id else None
    if current_user.admin:
        url = u"http://skylines.aero/users/recover?key=%x" % user.recover_key
        return jsonify(url=url)

    try:
        send_recover_mail(user)
    except ServiceUnavailable:
        return jsonify(error="mail-service-unavailable"), 503

    db.session.commit()

    return jsonify()
Пример #2
0
def read():
    current_user = User.get(request.user_id)
    if not current_user:
        return jsonify(error='invalid-token'), 401

    schema = CurrentUserSchema(exclude=('id'))
    return jsonify(schema.dump(current_user).data)
Пример #3
0
def update():
    json = request.get_json()
    if json is None:
        return jsonify(error='invalid-request'), 400

    try:
        data = CurrentUserSchema(partial=True).load(json).data
    except ValidationError, e:
        return jsonify(error='validation-failed', fields=e.messages), 422
Пример #4
0
def new_post():
    json = request.get_json()
    if json is None:
        return jsonify(error='invalid-request'), 400

    try:
        data = CurrentUserSchema(only=('email', 'firstName', 'lastName',
                                       'password')).load(json).data
    except ValidationError, e:
        return jsonify(error='validation-failed', fields=e.messages), 422
Пример #5
0
def recover_step2_post(json):
    try:
        data = CurrentUserSchema(only=("password",
                                       "recoveryKey")).load(json).data
    except ValidationError as e:
        return jsonify(error="validation-failed", fields=e.messages), 422

    user = User.by_recover_key(int(data["recover_key"], base=16))
    if not user:
        return jsonify(error="recovery-key-unknown"), 422

    user.password = data["password"]
    user.recover_key = None

    db.session.commit()

    return jsonify()
Пример #6
0
def read(user_id):
    user = get_requested_record(User, user_id)

    user_schema = CurrentUserSchema(
    ) if user_id == request.user_id else UserSchema()
    user_json = user_schema.dump(user).data

    if request.user_id:
        current_user = User.get(request.user_id)
        user_json["followed"] = current_user.follows(user)

    if "extended" in request.args:
        user_json["distanceFlights"] = _distance_flights(user)
        user_json["stats"] = _quick_stats(user)
        user_json["takeoffLocations"] = _get_takeoff_locations(user)

    mark_user_notifications_read(user)

    return jsonify(user_json)
Пример #7
0
def recover_step1_post(json):
    try:
        data = CurrentUserSchema(only=("email", )).load(json).data
    except ValidationError as e:
        return jsonify(error="validation-failed", fields=e.messages), 422

    user = User.by_email_address(data["email_address"])
    if not user:
        return jsonify(error="email-unknown"), 422

    user.generate_recover_key(request.remote_addr)
    try:
        send_recover_mail(user)
    except ServiceUnavailable:
        return jsonify(error="mail-service-unavailable"), 503

    db.session.commit()

    return jsonify()
Пример #8
0
def new_post():
    json = request.get_json()
    if json is None:
        return jsonify(error="invalid-request"), 400

    try:
        data = (CurrentUserSchema(only=("email", "firstName", "lastName",
                                        "password")).load(json).data)
    except ValidationError as e:
        return jsonify(error="validation-failed", fields=e.messages), 422

    user = User(**data)

    user.created_ip = request.remote_addr
    db.session.add(user)

    create_new_user_event(user)

    db.session.commit()

    return jsonify(user=UserSchema().dump(user).data)
Пример #9
0
def index():
    if 'application/json' in request.headers.get('Accept', ''):
        user_schema = CurrentUserSchema(
        ) if g.user == g.current_user else UserSchema()
        user = user_schema.dump(g.user).data

        if g.current_user:
            user['followed'] = g.current_user.follows(g.user)

        if 'extended' in request.args:
            user['distanceFlights'] = _distance_flights(g.user)
            user['stats'] = _quick_stats()
            user['takeoffLocations'] = _get_takeoff_locations()

        return jsonify(**user)

    mark_user_notifications_read(g.user)

    return render_template('ember-page.jinja',
                           openlayers=True,
                           active_page='settings')
Пример #10
0
def update():
    current_user = User.get(request.user_id)
    if not current_user:
        return jsonify(error='invalid-token'), 401

    json = request.get_json()
    if json is None:
        return jsonify(error='invalid-request'), 400

    try:
        data = CurrentUserSchema(partial=True).load(json).data
    except ValidationError as e:
        return jsonify(error='validation-failed', fields=e.messages), 422

    if 'email_address' in data:
        email = data.get('email_address')

        if email != current_user.email_address and User.exists(
                email_address=email):
            return jsonify(error='email-exists-already'), 422

        current_user.email_address = email

    if 'first_name' in data:
        current_user.first_name = data.get('first_name')

    if 'last_name' in data:
        current_user.last_name = data.get('last_name')

    if 'distance_unit' in data:
        current_user.distance_unit = data.get('distance_unit')

    if 'speed_unit' in data:
        current_user.speed_unit = data.get('speed_unit')

    if 'lift_unit' in data:
        current_user.lift_unit = data.get('lift_unit')

    if 'altitude_unit' in data:
        current_user.altitude_unit = data.get('altitude_unit')

    if 'tracking_callsign' in data:
        current_user.tracking_callsign = data.get('tracking_callsign')

    if 'tracking_delay' in data:
        current_user.tracking_delay = data.get('tracking_delay')

    if 'password' in data:
        if 'currentPassword' not in data:
            return jsonify(error='current-password-missing'), 422

        if not current_user.validate_password(data['currentPassword']):
            return jsonify(error='wrong-password'), 403

        current_user.password = data['password']
        current_user.recover_key = None

    if 'club_id' in data and data['club_id'] != current_user.club_id:
        club_id = data['club_id']

        if club_id is not None and not Club.exists(id=club_id):
            return jsonify(error='unknown-club'), 422

        current_user.club_id = club_id

        create_club_join_event(club_id, current_user)

        # assign the user's new club to all of his flights that have
        # no club yet
        flights = Flight.query().join(IGCFile)
        flights = flights.filter(
            and_(
                Flight.club_id == None,
                or_(Flight.pilot_id == current_user.id,
                    IGCFile.owner_id == current_user.id)))
        for flight in flights:
            flight.club_id = club_id

    db.session.commit()

    return jsonify()
Пример #11
0
def index():
    if 'application/json' not in request.headers.get('Accept', ''):
        return redirect(url_for('.profile', user=g.user_id))

    schema = CurrentUserSchema(exclude=('id'))
    return jsonify(**schema.dump(g.user).data)
Пример #12
0
def recover_step1_post(json):
    try:
        data = CurrentUserSchema(only=('email', )).load(json).data
    except ValidationError, e:
        return jsonify(error='validation-failed', fields=e.messages), 422
Пример #13
0
def schema():
    return CurrentUserSchema()
Пример #14
0
def partial_schema():
    return CurrentUserSchema(partial=True)
Пример #15
0
def update():
    current_user = User.get(request.user_id)
    if not current_user:
        return jsonify(error="invalid-token"), 401

    json = request.get_json()
    if json is None:
        return jsonify(error="invalid-request"), 400

    try:
        data = CurrentUserSchema(partial=True).load(json).data
    except ValidationError as e:
        return jsonify(error="validation-failed", fields=e.messages), 422

    if "email_address" in data:
        email = data.get("email_address")

        if email != current_user.email_address and User.exists(
                email_address=email):
            return jsonify(error="email-exists-already"), 422

        current_user.email_address = email

    if "first_name" in data:
        current_user.first_name = data.get("first_name")

    if "last_name" in data:
        current_user.last_name = data.get("last_name")

    if "distance_unit" in data:
        current_user.distance_unit = data.get("distance_unit")

    if "speed_unit" in data:
        current_user.speed_unit = data.get("speed_unit")

    if "lift_unit" in data:
        current_user.lift_unit = data.get("lift_unit")

    if "altitude_unit" in data:
        current_user.altitude_unit = data.get("altitude_unit")

    if "tracking_callsign" in data:
        current_user.tracking_callsign = data.get("tracking_callsign")

    if "tracking_delay" in data:
        current_user.tracking_delay = data.get("tracking_delay")

    if "password" in data:
        if "currentPassword" not in data:
            return jsonify(error="current-password-missing"), 422

        if not current_user.validate_password(data["currentPassword"]):
            return jsonify(error="wrong-password"), 403

        current_user.password = data["password"]
        current_user.recover_key = None

    if "club_id" in data and data["club_id"] != current_user.club_id:
        club_id = data["club_id"]

        if club_id is not None and not Club.exists(id=club_id):
            return jsonify(error="unknown-club"), 422

        current_user.club_id = club_id

        create_club_join_event(club_id, current_user)

        # assign the user's new club to all of his flights that have
        # no club yet
        flights = Flight.query().join(IGCFile)
        flights = flights.filter(
            and_(
                Flight.club_id == None,
                or_(
                    Flight.pilot_id == current_user.id,
                    IGCFile.owner_id == current_user.id,
                ),
            ))
        for flight in flights:
            flight.club_id = club_id

    db.session.commit()

    return jsonify()