You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

server.rb 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. run!
  66. end
  67. end