config.ru 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. require 'rubygems'
  2. require './app.rb'
  3. require 'sidekiq/web'
  4. require 'airbrake/sidekiq'
  5. use Airbrake::Rack::Middleware
  6. map('/') do
  7. use(Rack::Cache,
  8. verbose: false,
  9. metastore: 'file:/tmp/neocitiesrackcache/meta',
  10. entitystore: 'file:/tmp/neocitiesrackcache/body'
  11. )
  12. run Sinatra::Application
  13. end
  14. map '/webdav' do
  15. use Rack::Auth::Basic do |username, password|
  16. @site = Site.get_site_from_login username, password
  17. @site ? true : false
  18. end
  19. run lambda {|env|
  20. if env['REQUEST_METHOD'] == 'PUT'
  21. path = env['PATH_INFO']
  22. tmpfile = Tempfile.new 'davfile', encoding: 'binary'
  23. tmpfile.write env['rack.input'].read
  24. tmpfile.close
  25. if @site.file_size_too_large? tmpfile.size
  26. return [507, {}, ['']]
  27. end
  28. # if Site.valid_file_type?(filename: path, tempfile: tmpfile)
  29. if @site.okay_to_upload? filename: path, tempfile: tmpfile
  30. @site.store_files [{filename: path, tempfile: tmpfile}]
  31. return [201, {}, ['']]
  32. else
  33. return [415, {}, ['']]
  34. end
  35. end
  36. if env['REQUEST_METHOD'] == 'MKCOL'
  37. @site.create_directory env['PATH_INFO']
  38. return [201, {}, ['']]
  39. end
  40. if env['REQUEST_METHOD'] == 'MOVE'
  41. destination = env['HTTP_DESTINATION'].match(/^.+\/webdav(.+)$/i).captures.first
  42. env['PATH_INFO'] = env['PATH_INFO'][1..env['PATH_INFO'].length] if env['PATH_INFO'][0] == '/'
  43. site_file = @site.site_files.select {|s| s.path == env['PATH_INFO']}.first
  44. res = site_file.rename destination
  45. return [201, {}, ['']]
  46. end
  47. if env['REQUEST_METHOD'] == 'COPY'
  48. return [501, {}, ['']]
  49. end
  50. if env['REQUEST_METHOD'] == 'LOCK'
  51. return [501, {}, ['']]
  52. end
  53. if env['REQUEST_METHOD'] == 'UNLOCK'
  54. return [501, {}, ['']]
  55. end
  56. if env['REQUEST_METHOD'] == 'PROPPATCH'
  57. return [501, {}, ['']]
  58. end
  59. if env['REQUEST_METHOD'] == 'DELETE'
  60. @site.delete_file env['PATH_INFO']
  61. return [201, {}, ['']]
  62. end
  63. res = DAV4Rack::Handler.new(
  64. root: @site.files_path,
  65. root_uri_path: '/webdav'
  66. ).call(env)
  67. }
  68. end
  69. map '/sidekiq' do
  70. use Rack::Auth::Basic, "Protected Area" do |username, password|
  71. raise 'missing sidekiq auth' unless $config['sidekiq_user'] && $config['sidekiq_pass']
  72. username == $config['sidekiq_user'] && password == $config['sidekiq_pass']
  73. end
  74. use Rack::Session::Cookie, key: 'sidekiq.session', secret: $config['session_secret']
  75. use Rack::Protection::AuthenticityToken
  76. run Sidekiq::Web
  77. end