예제 #1
0
    def validate_email_address(form, field):
        if field.data == field.object_data:
            return

        if User.exists(email_address=field.data):
            raise ValidationError(
                l_('A pilot with this email address exists already.'))
예제 #2
0
파일: users.py 프로젝트: kerel-fs/skylines
def check_email():
    json = request.get_json()
    if not json:
        return jsonify(error='invalid-request'), 400

    email = json.get('email', '')

    result = 'available'
    if g.current_user and email == g.current_user.email_address:
        result = 'self'
    elif User.exists(email_address=email):
        result = 'unavailable'

    return jsonify(result=result)
예제 #3
0
def check_email():
    current_user = User.get(request.user_id) if request.user_id else None

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

    email = json.get("email", "")

    result = "available"
    if current_user and email == current_user.email_address:
        result = "self"
    elif User.exists(email_address=email):
        result = "unavailable"

    return jsonify(result=result)
예제 #4
0
def check_email():
    current_user = User.get(request.user_id) if request.user_id else None

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

    email = json.get("email", "")

    result = "available"
    if current_user and email == current_user.email_address:
        result = "self"
    elif User.exists(email_address=email):
        result = "unavailable"

    return jsonify(result=result)
예제 #5
0
def check_email():
    current_user = User.get(request.user_id) if request.user_id else None

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

    email = json.get('email', '')

    result = 'available'
    if current_user and email == current_user.email_address:
        result = 'self'
    elif User.exists(email_address=email):
        result = 'unavailable'

    return jsonify(result=result)
예제 #6
0
파일: settings.py 프로젝트: pyrog/skylines
    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, 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')
예제 #7
0
파일: flights.py 프로젝트: vdrok/skylines
def update(flight_id):
    flight = get_requested_record(Flight, flight_id)

    current_user = User.get(request.user_id)
    if not flight.is_writable(current_user):
        return jsonify(), 403

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

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

    if 'pilot_id' in data:
        pilot_id = data['pilot_id']

        if pilot_id is not None:

            if not User.exists(id=pilot_id):
                return jsonify(error='unknown-pilot'), 422

            pilot_club_id = User.get(pilot_id).club_id

            if pilot_club_id != current_user.club_id or (
                    pilot_club_id is None and pilot_id != current_user.id):
                return jsonify(error='pilot-disallowed'), 422

            if flight.pilot_id != pilot_id:
                flight.pilot_id = pilot_id
                # pilot_name is irrelevant, if pilot_id is given
                flight.pilot_name = None
                # update club if pilot changed
                flight.club_id = pilot_club_id

        else:
            flight.pilot_id = None

    if 'pilot_name' in data:
        flight.pilot_name = data['pilot_name']

    if 'co_pilot_id' in data:
        co_pilot_id = data['co_pilot_id']

        if co_pilot_id is not None:

            if not User.exists(id=co_pilot_id):
                return jsonify(error='unknown-copilot'), 422

            co_pilot_club_id = User.get(co_pilot_id).club_id

            if co_pilot_club_id != current_user.club_id \
                    or (co_pilot_club_id is None and co_pilot_id != current_user.id):
                return jsonify(error='co-pilot-disallowed'), 422

            flight.co_pilot_id = co_pilot_id
            # co_pilot_name is irrelevant, if co_pilot_id is given
            flight.co_pilot_name = None

        else:
            flight.co_pilot_id = None

    if 'co_pilot_name' in data:
        flight.co_pilot_name = data['co_pilot_name']

    if flight.co_pilot_id is not None and flight.co_pilot_id == flight.pilot_id:
        return jsonify(error='copilot-equals-pilot'), 422

    if 'model_id' in data:
        model_id = data['model_id']

        if model_id is not None and not AircraftModel.exists(id=model_id):
            return jsonify(error='unknown-aircraft-model'), 422

        flight.model_id = model_id

    if 'registration' in data:
        flight.registration = data['registration']

    if 'competition_id' in data:
        flight.competition_id = data['competition_id']

    if 'privacy_level' in data:
        flight.privacy_level = data['privacy_level']

        try:
            tasks.analyse_flight.delay(flight.id)
            tasks.find_meetings.delay(flight.id)
        except ConnectionError:
            current_app.logger.info('Cannot connect to Redis server')

    flight.time_modified = datetime.utcnow()
    db.session.commit()

    return jsonify()
예제 #8
0
 def validate_email_address(form, field):
     if User.exists(email_address=field.data):
         raise ValidationError(l_('A pilot with this email address exists already.'))
예제 #9
0
 def validate_email_address(form, field):
     if not User.exists(email_address=field.data):
         raise ValidationError(l_('There is no pilot with this email address.'))
예제 #10
0
def update(flight_id):
    flight = get_requested_record(Flight, flight_id)

    current_user = User.get(request.user_id)
    if not flight.is_writable(current_user):
        return jsonify(), 403

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

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

    if "pilot_id" in data:
        pilot_id = data["pilot_id"]

        if pilot_id is not None:

            if not User.exists(id=pilot_id):
                return jsonify(error="unknown-pilot"), 422

            pilot_club_id = User.get(pilot_id).club_id

            if pilot_club_id != current_user.club_id or (
                pilot_club_id is None and pilot_id != current_user.id
            ):
                return jsonify(error="pilot-disallowed"), 422

            if flight.pilot_id != pilot_id:
                flight.pilot_id = pilot_id
                # pilot_name is irrelevant, if pilot_id is given
                flight.pilot_name = None
                # update club if pilot changed
                flight.club_id = pilot_club_id

        else:
            flight.pilot_id = None

    if "pilot_name" in data:
        flight.pilot_name = data["pilot_name"]

    if "co_pilot_id" in data:
        co_pilot_id = data["co_pilot_id"]

        if co_pilot_id is not None:

            if not User.exists(id=co_pilot_id):
                return jsonify(error="unknown-copilot"), 422

            co_pilot_club_id = User.get(co_pilot_id).club_id

            if co_pilot_club_id != current_user.club_id or (
                co_pilot_club_id is None and co_pilot_id != current_user.id
            ):
                return jsonify(error="co-pilot-disallowed"), 422

            flight.co_pilot_id = co_pilot_id
            # co_pilot_name is irrelevant, if co_pilot_id is given
            flight.co_pilot_name = None

        else:
            flight.co_pilot_id = None

    if "co_pilot_name" in data:
        flight.co_pilot_name = data["co_pilot_name"]

    if flight.co_pilot_id is not None and flight.co_pilot_id == flight.pilot_id:
        return jsonify(error="copilot-equals-pilot"), 422

    if "model_id" in data:
        model_id = data["model_id"]

        if model_id is not None and not AircraftModel.exists(id=model_id):
            return jsonify(error="unknown-aircraft-model"), 422

        flight.model_id = model_id

    if "registration" in data:
        flight.registration = data["registration"]

    if "competition_id" in data:
        flight.competition_id = data["competition_id"]

    if "privacy_level" in data:
        flight.privacy_level = data["privacy_level"]

        try:
            tasks.analyse_flight.delay(flight.id)
            tasks.find_meetings.delay(flight.id)
        except ConnectionError:
            current_app.logger.info("Cannot connect to Redis server")

    flight.time_modified = datetime.utcnow()
    db.session.commit()

    return jsonify()
예제 #11
0
파일: flights.py 프로젝트: tbille/skylines
    json = request.get_json()
    if json is None:
        return jsonify(error='invalid-request'), 400

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

    if 'pilot_id' in data:
        pilot_id = data['pilot_id']

        if pilot_id is not None:

            if not User.exists(id=pilot_id):
                return jsonify(error='unknown-pilot'), 422

            pilot_club_id = User.get(pilot_id).club_id

            if pilot_club_id != current_user.club_id or (
                    pilot_club_id is None and pilot_id != current_user.id):
                return jsonify(error='pilot-disallowed'), 422

            if flight.pilot_id != pilot_id:
                flight.pilot_id = pilot_id
                # pilot_name is irrelevant, if pilot_id is given
                flight.pilot_name = None
                # update club if pilot changed
                flight.club_id = pilot_club_id
예제 #12
0
파일: settings.py 프로젝트: vdrok/skylines
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()
예제 #13
0
    json = request.get_json()
    if json is None:
        return jsonify(error="invalid-request"), 400

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

    if "pilot_id" in data:
        pilot_id = data["pilot_id"]

        if pilot_id is not None:

            if not User.exists(id=pilot_id):
                return jsonify(error="unknown-pilot"), 422

            pilot_club_id = User.get(pilot_id).club_id

            if pilot_club_id != current_user.club_id or (pilot_club_id is None and pilot_id != current_user.id):
                return jsonify(error="pilot-disallowed"), 422

            if flight.pilot_id != pilot_id:
                flight.pilot_id = pilot_id
                # pilot_name is irrelevant, if pilot_id is given
                flight.pilot_name = None
                # update club if pilot changed
                flight.club_id = pilot_club_id

        else:
예제 #14
0
@settings_blueprint.route('/', methods=['POST'])
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

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

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

        g.user.email_address = email

    if 'first_name' in data:
        g.user.first_name = data.get('first_name')

    if 'last_name' in data:
        g.user.last_name = data.get('last_name')

    if 'distance_unit' in data:
        g.user.distance_unit = data.get('distance_unit')

    if 'speed_unit' in data:
        g.user.speed_unit = data.get('speed_unit')
예제 #15
0
@settings_blueprint.route('/', methods=['POST'])
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

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

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

        g.user.email_address = email

    if 'first_name' in data:
        g.user.first_name = data.get('first_name')

    if 'last_name' in data:
        g.user.last_name = data.get('last_name')

    if 'distance_unit' in data:
        g.user.distance_unit = data.get('distance_unit')

    if 'speed_unit' in data:
        g.user.speed_unit = data.get('speed_unit')
예제 #16
0
    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, 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')
예제 #17
0
파일: flight.py 프로젝트: kerel-fs/skylines
    if not g.flight.is_writable(g.current_user):
        return jsonify(), 403

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

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

    if 'pilot_id' in data:
        pilot_id = data['pilot_id']

        if pilot_id is not None and not User.exists(id=pilot_id):
            return jsonify(error='unknown-pilot'), 422

        if g.flight.pilot_id != pilot_id:
            g.flight.pilot_id = pilot_id

            # update club if pilot changed
            if pilot_id is not None:
                g.flight.club_id = User.get(pilot_id).club_id

    if 'pilot_name' in data:
        g.flight.pilot_name = data['pilot_name']

    if 'co_pilot_id' in data:
        co_pilot_id = data['co_pilot_id']
예제 #18
0
파일: settings.py 프로젝트: hess8/skylinesC
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()