123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- require 'dotenv/load'
- require 'sequel'
- require 'sinatra'
-
- require_relative '../lib/auth'
- require_relative '../lib/search'
-
- class VLVSearch < Sinatra::Base
- enable :sessions
-
- get '/' do
- redirect '/login' unless signed_in?
- params[:type] = 'threads'
- erb :index, { locals: params, layout: :layout }
- end
-
- get '/search' do
- redirect '/login' unless signed_in?
- params[:type] = 'threads' unless params[:type]
- params[:page] = 1 unless params[:page]
- params[:page] = params[:page].to_i
-
- results = search(params)
- previous_url, next_url = build_urls(params)
-
- locals =
- params.merge(
- results: results, previous_url: previous_url, next_url: next_url
- )
-
- erb :results, { locals: locals, layout: :layout }
- end
-
- get '/login' do
- erb :login, { layout: :layout, locals: { error_message: nil } }
- end
-
- post '/login' do
- username = params[:username]
- password = params[:password]
- cookie = login(username, password)
-
- if cookie.nil?
- erb :login,
- { layout: :layout, locals: { error_message: 'Invalid credentials' } }
- else
- session[:user_id] = username
- redirect '/'
- end
- end
-
- post '/logout' do
- session[:user_id] = nil
- redirect '/'
- end
-
- helpers do
- def build_urls(params)
- current_page = params[:page].to_i
- previous_page = current_page > 1 ? current_page - 1 : nil
- next_page = current_page + 1
-
- url_params = { q: params[:q], type: params[:type] }
- url_params[:username] = params[:username] if params[:username]
-
- [previous_page, next_page].map do |page|
- URI::Generic.build(
- path: '/search',
- query: URI.encode_www_form(url_params.merge(page: page))
- )
- end
- end
-
- def current_user
- session[:user_id]
- end
-
- def signed_in?
- !!session[:user_id]
- end
-
- run!
- end
- end
|