
Previously, the filename was URL-encoded, thus each / was replaced with %2F. This caused issues with some Apache2 configuration, smartly mingling with the URL to either encode it a second time (resulting in %252F) or decoding it (generating a real /). However, for authenticated file downloads with the JWT, we hardly require a byte-by-byte matching. With these changes, the URL parameter is no longer URL-encoded, so that Apache2 won't break our implementation any longer. Further, we use this opportunity to get rid of the unnecessary .json extension for those filename routes, simplifying the routes generated and doing some further cleanup.
183 lines
6.2 KiB
Ruby
183 lines
6.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
Rails.application.routes.draw do
|
|
resources :community_solutions, only: %i[index edit update]
|
|
resources :error_template_attributes
|
|
resources :error_templates do
|
|
member do
|
|
put 'attribute', to: 'error_templates#add_attribute'
|
|
delete 'attribute', to: 'error_templates#remove_attribute'
|
|
end
|
|
end
|
|
resources :file_templates do
|
|
collection do
|
|
get 'by_file_type/:file_type_id', as: :by_file_type, action: :by_file_type
|
|
end
|
|
end
|
|
resources :codeharbor_links, only: %i[new create edit update destroy]
|
|
resources :request_for_comments, except: %i[edit destroy] do
|
|
member do
|
|
get :mark_as_solved, defaults: {format: :json}
|
|
post :set_thank_you_note, defaults: {format: :json}
|
|
post :clear_question
|
|
end
|
|
end
|
|
resources :comments, defaults: {format: :json}
|
|
get '/my_request_for_comments', as: 'my_request_for_comments', to: 'request_for_comments#my_comment_requests'
|
|
get '/my_rfc_activity', as: 'my_rfc_activity', to: 'request_for_comments#rfcs_with_my_comments'
|
|
get '/exercises/:exercise_id/request_for_comments', as: 'exercise_request_for_comments', to: 'request_for_comments#rfcs_for_exercise'
|
|
|
|
delete '/comment_by_id', to: 'comments#destroy_by_id'
|
|
put '/comments', to: 'comments#update', defaults: {format: :json}
|
|
|
|
resources :subscriptions, only: %i[create destroy] do
|
|
member do
|
|
get :unsubscribe, to: 'subscriptions#destroy'
|
|
end
|
|
end
|
|
|
|
root to: 'application#welcome'
|
|
|
|
namespace :admin do
|
|
get 'dashboard', to: 'dashboard#show'
|
|
get 'dashboard/dump_docker', to: 'dashboard#dump_docker'
|
|
end
|
|
|
|
get '/insights', to: 'flowr#insights'
|
|
|
|
get 'statistics/', to: 'statistics#show'
|
|
get 'statistics/graphs', to: 'statistics#graphs'
|
|
get 'statistics/graphs/user-activity', to: 'statistics#user_activity'
|
|
get 'statistics/graphs/user-activity-history', to: 'statistics#user_activity_history'
|
|
get 'statistics/graphs/rfc-activity', to: 'statistics#rfc_activity'
|
|
get 'statistics/graphs/rfc-activity-history', to: 'statistics#rfc_activity_history'
|
|
|
|
concern :statistics do
|
|
member do
|
|
get :statistics
|
|
end
|
|
end
|
|
|
|
resources :consumers
|
|
|
|
resources :execution_environments do
|
|
member do
|
|
get :shell
|
|
post 'shell', as: :execute_command, action: :execute_command
|
|
get :list_files, as: :list_files_in
|
|
get 'download/*filename', as: :download_file_from, action: :download_arbitrary_file, controller: 'live_streams', format: false # Admin file-system access to runners
|
|
get :statistics
|
|
post :sync_to_runner_management
|
|
end
|
|
|
|
post :sync_all_to_runner_management, on: :collection
|
|
end
|
|
|
|
post '/import_task' => 'exercises#import_task'
|
|
post '/import_uuid_check' => 'exercises#import_uuid_check'
|
|
|
|
resources :exercises do
|
|
collection do
|
|
match '', to: 'exercises#batch_update', via: %i[patch put]
|
|
end
|
|
|
|
member do
|
|
post :clone
|
|
get :implement
|
|
get :working_times
|
|
post :intervention
|
|
get :statistics
|
|
get :feedback, path: 'feedbacks'
|
|
get :reload
|
|
get 'study_group_dashboard/:study_group_id', to: 'exercises#study_group_dashboard'
|
|
post :export_external_check
|
|
post :export_external_confirm
|
|
end
|
|
|
|
resources :programming_groups
|
|
resources :user_exercise_feedbacks, except: %i[show index], path: 'feedbacks'
|
|
end
|
|
|
|
resources :programming_groups, except: %i[new create]
|
|
|
|
resources :exercise_collections do
|
|
member do
|
|
get :statistics
|
|
end
|
|
end
|
|
|
|
resources :proxy_exercises do
|
|
member do
|
|
post :clone
|
|
get :reload
|
|
end
|
|
end
|
|
|
|
resources :tags
|
|
|
|
resources :tips
|
|
|
|
resources :external_users, only: %i[index show], concerns: :statistics do
|
|
resources :exercises, only: [] do
|
|
get :statistics, to: 'exercises#external_user_statistics', on: :member
|
|
end
|
|
member do
|
|
get :tag_statistics
|
|
end
|
|
end
|
|
|
|
namespace :code_ocean do
|
|
resources :files, only: %i[create destroy]
|
|
end
|
|
get '/uploads/files/:id/*filename', to: 'code_ocean/files#show_protected_upload', as: :protected_upload, format: false # View file, e.g., when implementing or viewing an exercise
|
|
get '/uploads/render_files/:id/*filename', to: 'code_ocean/files#render_protected_upload', as: :render_protected_upload, format: false # Render action with embedded files, i.e., images in user-created HTML
|
|
|
|
resources :file_types
|
|
|
|
resources :internal_users do
|
|
member do
|
|
match 'activate', to: 'internal_users#activate', via: %i[get patch put]
|
|
match 'reset_password', to: 'internal_users#reset_password', via: %i[get patch put]
|
|
end
|
|
end
|
|
|
|
match '/forgot_password', as: 'forgot_password', to: 'internal_users#forgot_password', via: %i[get post]
|
|
|
|
resources :sessions, only: %i[create destroy new]
|
|
|
|
post '/lti/launch', as: 'lti_launch', to: 'sessions#create_through_lti'
|
|
get '/lti/return', as: 'lti_return', to: 'sessions#destroy_through_lti'
|
|
get '/sign_in', as: 'sign_in', to: 'sessions#new'
|
|
match '/sign_out', as: 'sign_out', to: 'sessions#destroy', via: %i[get delete]
|
|
|
|
resources :submissions, only: %i[create index show] do
|
|
member do
|
|
get 'download', as: :download, action: :download # Full submission download with RemoteEvaluationMapping
|
|
get 'download/*filename', as: :download_file, action: :download_file, format: false # Single file download, currently not used in the frontend (but working)
|
|
get 'download_stream/*filename', as: :download_stream_file, action: :download_submission_file, controller: 'live_streams', format: false # Access runner artifacts
|
|
get 'render/*filename', as: :render, action: :render_file, format: false
|
|
get 'run/*filename', as: :run, action: :run, format: false
|
|
get :score
|
|
get :statistics
|
|
get 'test/*filename', as: :test, action: :test, format: false
|
|
get :finalize
|
|
end
|
|
end
|
|
|
|
resources :study_groups, only: %i[index show edit destroy update] do
|
|
member do
|
|
post :set_as_current
|
|
end
|
|
end
|
|
|
|
resources :events, only: [:create]
|
|
|
|
post '/evaluate', to: 'remote_evaluation#evaluate', defaults: {format: :json}
|
|
post '/submit', to: 'remote_evaluation#submit', defaults: {format: :json}
|
|
|
|
resources :ping, only: :index, defaults: {format: :json}
|
|
|
|
mount ActionCable.server => '/cable'
|
|
mount RailsAdmin::Engine => '/rails_admin', as: 'rails_admin'
|
|
end
|