src/api/config/routes/api.rb
cons = RoutesHelper::RoutesConstraints::CONS
constraints(RoutesHelper::APIMatcher) do
get '/', to: redirect('/about')
resources :about, only: :index
resource :configuration, only: %i[show update]
resources :announcements, except: %i[edit new]
### /person
post 'person' => 'person#command'
get 'person' => 'person#show'
get 'person/:login/token' => 'person/token#index', constraints: cons
post 'person/:login/token' => 'person/token#create', constraints: cons
delete 'person/:login/token/:id' => 'person/token#delete', constraints: cons
# FIXME3.0: this is no clean namespace, a person "register" or "changepasswd" could exist ...
# remove these for OBS 3.0
match 'person/register' => 'person#register', via: %i[post put] # use /person?cmd=register POST instead
match 'person/changepasswd' => 'person#change_my_password', via: %i[post put] # use /person/:login?cmd=changepassword POST instead
get 'person/:login/group' => 'person#grouplist', constraints: cons # Use /group?person=:login GET instead
### notifications
get '/my/notifications' => 'person/notifications#index'
put '/my/notifications/:id' => 'person/notifications#update'
# /FIXME3.0
get 'person/:login' => 'person#get_userinfo', constraints: cons
put 'person/:login' => 'person#put_userinfo', constraints: cons
post 'person/:login' => 'person#post_userinfo', constraints: cons
get 'person/:login/watchlist' => 'person#get_watchlist', constraints: cons
put 'person/:login/watchlist' => 'person#put_watchlist', constraints: cons
### /group
controller :group do
get 'group' => :index
get 'group/:title' => :show, constraints: cons
delete 'group/:title' => :delete, constraints: cons
put 'group/:title' => :update, constraints: cons
post 'group/:title' => :command, constraints: cons
end
### /service
get 'service' => 'service#index'
### /source
controller :attribute_namespace do
get 'attribute' => :index
get 'attribute/:namespace' => :index
# FIXME3.0: drop the POST and DELETE here
get 'attribute/:namespace/_meta' => :show
delete 'attribute/:namespace/_meta' => :delete
delete 'attribute/:namespace' => :delete
match 'attribute/:namespace/_meta' => :update, via: %i[post put]
end
controller :attribute do
get 'attribute/:namespace/:name/_meta' => :show
delete 'attribute/:namespace/:name/_meta' => :delete
delete 'attribute/:namespace/:name' => :delete
match 'attribute/:namespace/:name/_meta' => :update, via: %i[post put]
end
### /architecture
resources :architectures, only: %i[index show update] # create,delete currently disabled
### /trigger
post 'trigger' => 'trigger#create'
post 'trigger/webhook' => 'trigger#create'
post 'trigger/rebuild' => 'trigger#rebuild'
post 'trigger/release' => 'trigger#release'
post 'trigger/runservice' => 'trigger#runservice'
post 'trigger/workflow' => 'trigger_workflow#create'
### /issue_trackers
resources :issue_trackers, only: %i[index show create update destroy], param: :name do
resources :issues, only: [:show]
end
### /statistics
# Routes for statistics
# ---------------------
controller :statistics do
# Timestamps
#
get 'statistics/added_timestamp/:project(/:package)' => :added_timestamp, constraints: cons
get 'statistics/updated_timestamp/:project(/:package)' => :updated_timestamp, constraints: cons
# Activity
#
get 'statistics/activity/:project(/:package)' => :activity, constraints: cons
get 'statistics' => :index
get 'statistics/most_active_projects' => :most_active_projects
get 'statistics/most_active_packages' => :most_active_packages
get 'statistics/latest_added' => :latest_added
get 'statistics/latest_updated' => :latest_updated
get 'statistics/global_counters' => :global_counters
get 'statistics/active_request_creators/:project' => :active_request_creators, constraints: cons
get 'statistics/maintenance_statistics/:project' => 'statistics/maintenance_statistics#index', constraints: cons,
as: 'maintenance_statistics'
get 'public/statistics/maintenance_statistics/:project' => 'statistics/maintenance_statistics#index', constraints: cons
end
### /status_message
resources :status_messages, only: %i[show index create destroy], path: 'status/messages'
resources :status_project, only: [:show], param: :project, path: 'status/project'
get 'status_message' => 'status_messages#index'
get 'status/workerstatus' => 'worker/status#index'
### /search
controller :search do
match 'search/published/binary/id' => :pass_to_backend, via: %i[get post]
match 'search/published/repoinfo/id' => :pass_to_backend, via: %i[get post]
match 'search/published/pattern/id' => :pass_to_backend, via: %i[get post]
match 'search/channel/binary/id' => :channel_binary_id, via: %i[get post]
match 'search/channel/binary' => :channel_binary, via: %i[get post]
match 'search/channel' => :channel, via: %i[get post]
match 'search/released/binary/id' => :released_binary_id, via: %i[get post]
match 'search/released/binary' => :released_binary, via: %i[get post]
match 'search/project/id' => :project_id, via: %i[get post]
match 'search/package/id' => :package_id, via: %i[get post]
match 'search/project_id' => :project_id_deprecated, via: %i[get post] # FIXME3.0: to be removed
match 'search/package_id' => :package_id_deprecated, via: %i[get post] # FIXME3.0: to be removed
match 'search/project' => :project, via: %i[get post]
match 'search/package' => :package, via: %i[get post]
match 'search/person' => :person, via: %i[get post]
match 'search/owner' => :owner, via: %i[get post]
match 'search/missing_owner' => :missing_owner, via: %i[get post]
match 'search/request' => :bs_request, via: %i[get post]
match 'search/request/id' => :bs_request_id, via: %i[get post]
match 'search' => :pass_to_backend, via: %i[get post]
match 'search/repository/id' => :repository_id, via: %i[get post]
match 'search/issue' => :issue, via: %i[get post]
end
### /request
resources :request, only: %i[index show update destroy]
post 'request' => 'request#global_command'
post 'request/:id' => 'request#request_command', constraints: cons
### /lastevents
get '/lastevents' => 'source#lastevents_public'
match 'public/lastevents' => 'source#lastevents_public', via: %i[get post]
post '/lastevents' => 'source#lastevents'
### /distributions
resources :distributions, except: %i[new edit] do
collection do
get 'include_remotes'
put 'bulk_replace' => :bulk_replace
# This GET routes gives us a poor mans osc interface for bulk replacing...
# Like: osc api -e /distributions/bulk_replace
get 'bulk_replace' => :index
# This PUT route is for backward compatiblity, it was traditionally
# used for bulk replacing distributions.
put '' => :bulk_replace
end
end
### /cloud/upload
scope :cloud, as: :cloud do
resources :upload, only: %i[index show create destroy], controller: 'cloud/upload_jobs'
end
### /public
controller :public do
get 'public', to: redirect('/public/about')
get 'public/about' => 'about#index'
get 'public/configuration' => :configuration_show
get 'public/configuration.xml' => :configuration_show
get 'public/request/:number' => :show_request, constraints: cons
get 'public/source/:project' => :project_index, constraints: cons
get 'public/source/:project/_meta' => :project_meta, constraints: cons
get 'public/source/:project/_config' => :project_file, constraints: cons
get 'public/source/:project/_pubkey' => :project_file, constraints: cons
get 'public/source/:project/:package' => :package_index, constraints: cons
get 'public/source/:project/:package/_meta' => :package_meta, constraints: cons
get 'public/source/:project/:package/:filename' => :source_file, constraints: cons
get 'public/distributions' => :distributions
get 'public/binary_packages/:project/:package' => :binary_packages, constraints: cons
get 'public/build/:project(/:repository(/:arch(/:package(/:filename))))' => 'public#build', constraints: cons, as: :public_build
end
scope 'public' do
resources :image_templates, constraints: cons, only: [:index], controller: 'webui/image_templates'
end
resources :image_templates, constraints: cons, only: [:index], controller: 'webui/image_templates'
### /projects
get 'projects/:project/requests' => 'webui/projects/bs_requests#index', constraints: cons, as: 'projects_requests'
get 'projects/:project/packages/:package/requests' => 'webui/packages/bs_requests#index', constraints: cons, as: 'packages_requests'
end
# StagingWorkflow API
resources :staging, only: [], param: 'workflow_project', module: 'staging', constraints: cons do
resource :workflow, only: %i[create destroy update], constraints: cons
resources :backlog, only: [:index]
resources :staging_projects, only: %i[index create], param: :name, constraints: cons do
get '' => :show
post 'copy/:staging_project_copy_name' => :copy
post :accept
get 'staged_requests' => 'staged_requests#index', constraints: cons
resource :staged_requests, only: %i[create destroy]
end
delete 'staged_requests' => :destroy, constraints: cons, controller: 'staged_requests'
resources :excluded_requests, only: [:index], constraints: cons
resource :excluded_requests, only: %i[create destroy], constraints: cons
end
controller :source_attribute do
get 'source/:project(/:package(/:binary))/_attribute(/:attribute)' => :show, constraints: cons
post 'source/:project(/:package(/:binary))/_attribute(/:attribute)' => :update, constraints: cons, as: :change_attribute
delete 'source/:project(/:package(/:binary))/_attribute/:attribute' => :delete, constraints: cons
end
# project level
controller :source_project_meta do
get 'source/:project/_meta' => :show, constraints: cons
put 'source/:project/_meta' => :update, constraints: cons
end
controller :source_project do
get 'source/:project' => :show, constraints: cons
delete 'source/:project' => :delete, constraints: cons
post 'source/:project' => :project_command, constraints: cons
end
controller :source_project_config do
get 'source/:project/_config' => :show, constraints: cons
put 'source/:project/_config' => :update, constraints: cons
end
controller :source_project_keyinfo do
get 'source/:project/_keyinfo' => :show, constraints: cons
end
controller :source do
# package level
get '/source/:project/_project/:filename' => :get_file, constraints: cons, defaults: { format: 'xml' }
end
controller :source_project_package_meta do
get 'source/:project/:package/_meta' => :show, constraints: cons
put 'source/:project/:package/_meta' => :update, constraints: cons
end
controller :source do
get 'source' => :index
post 'source' => :global_command_createmaintenanceincident, constraints: ->(req) { req.params[:cmd] == 'createmaintenanceincident' }
post 'source' => :global_command_branch, constraints: ->(req) { req.params[:cmd] == 'branch' }
post 'source' => :global_command_orderkiwirepos, constraints: ->(req) { req.params[:cmd] == 'orderkiwirepos' }
post 'public/source' => :global_command_triggerscmsync, constraints: ->(req) { req.params[:cmd] == 'triggerscmsync' }
get 'source/:project/_pubkey' => :show_project_pubkey, constraints: cons
delete 'source/:project/_pubkey' => :delete_project_pubkey, constraints: cons
get 'source/:project/:package/:filename' => :get_file, constraints: cons, defaults: { format: 'xml' }
delete 'source/:project/:package/:filename' => :delete_file, constraints: cons
put 'source/:project/:package/:filename' => :update_file, constraints: cons
get 'source/:project/:package' => :show_package, constraints: cons
post 'source/:project/:package' => :package_command, constraints: cons
delete 'source/:project/:package' => :delete_package, constraints: cons
end
scope module: :status, path: :status_reports do
resources :projects, only: [], param: :name, constraints: cons do
resources :required_checks, only: %i[index create destroy], param: :name
end
scope :repositories do
resources :projects, only: [], param: :name, path: '', constraints: cons do
resources :repositories, only: [], param: :name, path: '', constraints: cons do
resources :required_checks, only: %i[index create destroy], param: :name
end
end
end
scope :built_repositories do
resources :projects, only: [], param: :name, path: '', constraints: cons do
resources :repositories, only: [], param: :name, path: '', constraints: cons do
resources :architectures, only: [], param: :name, path: '', constraints: cons do
resources :required_checks, only: %i[index create destroy], param: :name
end
end
end
end
controller :reports do
scope :published do
get ':project_name/:repository_name/reports/:report_uuid' => :show, constraints: cons
end
scope :built do
get ':project_name/:repository_name/:arch/reports/:report_uuid' => :show, constraints: cons
end
scope :requests do
get ':bs_request_number/reports' => :show
end
end
controller :checks do
scope :published do
post ':project_name/:repository_name/reports/:report_uuid' => :update, constraints: cons
end
scope :built do
post ':project_name/:repository_name/:arch/reports/:report_uuid' => :update, constraints: cons
end
scope :requests do
post ':bs_request_number/reports' => :update
end
end
end
defaults format: 'xml' do
controller :comments do
get 'comments/request/:request_number' => :index, constraints: cons, as: :comments_request
post 'comments/request/:request_number' => :create, constraints: cons, as: :create_request_comment
get 'comments/package/:project/:package' => :index, constraints: cons, as: :comments_package
post 'comments/package/:project/:package' => :create, constraints: cons, as: :create_package_comment
get 'comments/project/:project' => :index, constraints: cons, as: :comments_project
post 'comments/project/:project' => :create, constraints: cons, as: :create_project_comment
get 'comments/user' => :index, constraints: cons, as: :comments_user
get 'comment/:id/history' => :history, constraints: cons
delete 'comment/:id' => :destroy, constraints: cons, as: :comment_delete
end
end
get 'apidocs-old/:filename' => 'webui/apidocs#file', constraints: cons
# spiders request this, not browsers
controller 'webui/sitemaps' do
get 'sitemaps' => :index
get 'project/sitemap' => :projects
get 'package/sitemap(/:project_name)' => :packages
end
scope :worker, as: :worker do
resources :status, only: [:index], controller: 'worker/status'
resources :capability, only: [:show], param: :worker, controller: 'worker/capability'
resources :command, only: [], controller: 'worker/command' do
collection do
post 'run'
end
end
end
### /worker
get 'worker/_status' => 'worker/status#index', as: :worker_status
get 'build/_workerstatus' => 'worker/status#index', as: :build_workerstatus # For backward compatibility
get 'worker/:worker' => 'worker/capability#show'
post 'worker' => 'worker/command#run'
### /build
get 'build/:project/:repository/:arch/:package/_log' => 'build#logfile', constraints: cons, as: :raw_logfile
match 'build/:project/:repository/:arch/:package/_buildinfo' => 'build#buildinfo', constraints: cons, via: %i[get post]
match 'build/:project/:repository/:arch/:package/_status' => 'build#index', constraints: cons, via: %i[get post]
match 'build/:project/:repository/:arch/:package/_history' => 'build#index', constraints: cons, via: %i[get post]
get 'build/:project/:repository/:arch/:package/:filename' => 'build/file#show', constraints: cons
put 'build/:project/:repository/:arch/:package/:filename' => 'build/file#update', constraints: cons
delete 'build/:project/:repository/:arch/:package/:filename' => 'build/file#destroy', constraints: cons
match 'build/:project/:repository/:arch/_builddepinfo' => 'build#builddepinfo', via: %i[get post], constraints: cons
get 'build/:project/:repository/_buildconfig' => 'build#index', constraints: cons
match 'build/:project/:repository/:arch/:package' => 'build#index', constraints: cons, via: %i[get post]
get 'build/:project/:repository/:arch' => 'build#index', constraints: cons
get 'build/_result' => 'build#scmresult', constraints: cons
get 'build/:project/_result' => 'build#result', constraints: cons
get 'build/:project/:repository' => 'build#index', constraints: cons
match 'build/:project' => 'build#project_index', constraints: cons, via: %i[get post put]
get 'build' => 'source#index'
### /published
# :arch can be also a ymp for a pattern :/
get 'published/:project(/:repository(/:arch(/:binary)))' => 'published#index', constraints: cons
get 'published/' => 'source#index', via: :get