Websites/config/routes/yiff_rest_routes.rb

103 lines
3.8 KiB
Ruby

# frozen_string_literal: true
module YiffRestRoutes
DOMAIN = "yiff.rest"
V2 = "v2"
V2_DOMAIN = "#{V2}.#{DOMAIN}".freeze
DISCORD = "discord"
DISCORD_DOMAIN = "#{DISCORD}.#{DOMAIN}".freeze
THUMBS = "thumbs"
THUMBS_DOMAIN = "#{THUMBS}.#{DOMAIN}".freeze
STATE = "state"
STATE_DOMAIN = "#{STATE}.#{DOMAIN}".freeze
def self.extended(router)
router.instance_exec do
namespace(:yiff_rest, path: "") do
constraints(DomainConstraint.new(DOMAIN)) do
resources(:apikeys, only: %i[index new create destroy edit update]) do
get(:logout, on: :collection)
member do
post(:disable)
put(:enable)
put(:deactivate)
put(:reactivate)
put(:regenerate)
end
end
namespace(:home, path: "") do
get(:manifest, constraints: { format: "json" })
get(:browserconfig, constraints: { format: "xml" })
get(:support, to: redirect { Websites.config.yiffy2_discord_invite })
end
get("/v2/(*category)", action: :index, controller: "api_v2") # TODO: make routes case insensitive
get("/V2/(*category)", action: :index, controller: "api_v2")
root(to: "home#index")
end
constraints(DomainConstraint.new(DOMAIN, STATE)) do
namespace(:state, path: "") do
get(:manifest, constraints: { format: "json" })
get(:browserconfig, constraints: { format: "xml" })
end
root(to: "state#index", as: :state_index)
end
constraints(DomainConstraint.new(DOMAIN, V2)) do
namespace(:api_v2, path: "") do
resources(:manage, constraints: { id: /[a-z0-9\-.]+/i }, only: %i[index]) do
collection do
get(:logout)
put(:sync)
resources(:images, as: "manage_images") do
get(:delete_with_reason, on: :member)
collection do
get(:iqdb)
get("/iqdb/query", action: :query_iqdb)
post("/iqdb/query", action: :query_iqdb)
end
end
end
end
get("/", to: redirect("https://yiff.rest"))
get(:robots, constraints: { format: "txt" })
get(:state, to: redirect("https://state.yiff.rest"))
get(:online)
get(:stats)
get(:categories)
get("/categories/(*category)", action: :category, as: :api_v2_category, constraints: { category: /[a-z0-9\-.]+/i })
get("/images/:id", action: :image, as: :api_v2_image, constraints: { id: /[a-f0-9]{32}/ })
post(:bulk, constraints: { format: "json" }, defaults: { format: :json })
get("/(*category)", action: :index, as: :api_v2_images, constraints: { category: /(?!rails).*/ })
end
end
constraints(DomainConstraint.new(DOMAIN, DISCORD)) do
namespace(:discord, path: "") do
get(:count_servers)
get(:flags)
get(:apikey)
get(:manage_images)
post(:interactions)
end
root(to: "discord#index", as: :discord_root)
end
constraints(DomainConstraint.new(DOMAIN, THUMBS)) do
namespace(:thumbs, path: "") do
get("/:id", action: :show, as: :thumbs_show, constraints: { id: /[a-f0-9]{32}|\d+/ })
put("/:id/:type", action: :create, as: :thumbs_create, constraints: { id: /[a-f0-9]{32}|\d+/, type: /gif|png/ })
get("/check/:id/:type", action: :check, as: :thumbs_check, constraints: { md5: /[a-f0-9]{32}/, type: /gif|png/ })
end
root(to: redirect("https://docs.yiff.rest/thumbnails"), as: :thumbs_root)
end
end
end
end
end