您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

server.rb 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. require 'dotenv/load'
  2. require 'sequel'
  3. require 'sinatra'
  4. require_relative '../lib/auth'
  5. require_relative '../lib/search'
  6. class VLVSearch < Sinatra::Base
  7. enable :sessions
  8. get '/' do
  9. redirect '/login' unless signed_in?
  10. params[:type] = 'threads'
  11. erb :index, { locals: params, layout: :layout }
  12. end
  13. get '/search' do
  14. redirect '/login' unless signed_in?
  15. params[:type] = 'threads' unless params[:type]
  16. params[:page] = 1 unless params[:page]
  17. params[:page] = params[:page].to_i
  18. results = search(params)
  19. previous_url, next_url = build_urls(params)
  20. locals =
  21. params.merge(
  22. results: results, previous_url: previous_url, next_url: next_url
  23. )
  24. erb :results, { locals: locals, layout: :layout }
  25. end
  26. get '/login' do
  27. erb :login, { layout: :layout, locals: { error_message: nil } }
  28. end
  29. post '/login' do
  30. username = params[:username]
  31. password = params[:password]
  32. cookie = login(username, password)
  33. if cookie.nil?
  34. erb :login,
  35. { layout: :layout, locals: { error_message: 'Invalid credentials' } }
  36. else
  37. session[:user_id] = username
  38. redirect '/'
  39. end
  40. end
  41. post '/logout' do
  42. session[:user_id] = nil
  43. redirect '/'
  44. end
  45. helpers do
  46. def build_urls(params)
  47. current_page = params[:page].to_i
  48. previous_page = current_page > 1 ? current_page - 1 : nil
  49. next_page = current_page + 1
  50. url_params = { q: params[:q], type: params[:type] }
  51. url_params[:username] = params[:username] if params[:username]
  52. [previous_page, next_page].map do |page|
  53. URI::Generic.build(
  54. path: '/search',
  55. query: URI.encode_www_form(url_params.merge(page: page))
  56. )
  57. end
  58. end
  59. def current_user
  60. session[:user_id]
  61. end
  62. def signed_in?
  63. !!session[:user_id]
  64. end
  65. end
  66. end