48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
module Api
|
|
# The API follows this workflow when creating a new image:
|
|
# 1. Upload image to an S3 "untrusted" bucket (gets deleted quite often)
|
|
# 2. POST the URL from step 1 (or any URL) to ImagesController#Create
|
|
# 3. Image is transferred to the "trusted bucket".
|
|
class ImagesController < Api::AbstractController
|
|
cattr_accessor :store_locally
|
|
self.store_locally = !ENV["GCS_BUCKET"]
|
|
|
|
def create
|
|
mutate Images::Create.run(raw_json, device: current_device)
|
|
end
|
|
|
|
def index
|
|
mutate Images::Fetch.run(device: current_device)
|
|
end
|
|
|
|
def show
|
|
render json: image
|
|
end
|
|
|
|
def destroy
|
|
Image.delay.maybe_destroy(image.id) # See notes. This is for edge cases.
|
|
render json: ""
|
|
end
|
|
|
|
# Creates a "policy object" + meta data so that users may upload an image to
|
|
# Google Cloud Storage.
|
|
def storage_auth
|
|
mutate policy_class.run
|
|
end
|
|
|
|
private
|
|
|
|
def policy_class
|
|
if ImagesController.store_locally
|
|
Images::StubPolicy
|
|
else
|
|
Images::GeneratePolicy
|
|
end
|
|
end
|
|
|
|
def image
|
|
@image ||= Image.where(device: current_device).find(params[:id])
|
|
end
|
|
end
|
|
end
|