def post_picture(user_id: int, requester: User) -> Response:
        if user_id != requester.id and not requester.is_administrator:
            raise Unauthorized()

        image_file = request.files['file']
        if not image_file:
            raise FileTypeNotImplemented(
                'Missing image data. Request needs to provide binary\n'
                'image data as the request parameter named "file".'
            )

        image_data = image_file.read()
        if not is_allowable_image(image_data):
            image_type = get_image_type(image_data)

            if image_type is None:
                reason = 'Could not infer type of image.'
            else:
                reason = 'Inferred image type {} is not allowed.'
                reason = reason.format(image_type)

            raise FileTypeNotPermitted(
                '{reason}\n\n'
                'Allowable types are {types}.'
                .format(
                    reason=reason,
                    types=', '.join(picture_types),
                )
            )

        filename = image_to_user_filename(image_data, user_id)

        store_image(image_file, filename)

        requester.picture_filename = filename
        store.session.add(requester)
        store.session.commit()

        logger.info('Saving image {!r}'.format(filename))

        return make_OK_response()