mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 09:12:35 +02:00
further cleanups to app.rb
This commit is contained in:
parent
4cbcc3a5e9
commit
60e6697529
10 changed files with 261 additions and 279 deletions
280
app.rb
280
app.rb
|
@ -1,4 +1,3 @@
|
||||||
require 'base64'
|
|
||||||
require './environment.rb'
|
require './environment.rb'
|
||||||
require './app_helpers.rb'
|
require './app_helpers.rb'
|
||||||
|
|
||||||
|
@ -55,281 +54,4 @@ error do
|
||||||
erb :'error'
|
erb :'error'
|
||||||
end
|
end
|
||||||
|
|
||||||
# :nocov:
|
Dir['./app/**/*.rb'].each {|f| require f}
|
||||||
get '/home_mockup' do
|
|
||||||
erb :'home_mockup'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/edit_mockup' do
|
|
||||||
erb :'edit_mockup'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/profile_mockup' do
|
|
||||||
require_login
|
|
||||||
erb :'profile_mockup', locals: {site: current_site}
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/browse_mockup' do
|
|
||||||
erb :'browse_mockup'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/tips_mockup' do
|
|
||||||
erb :'tips_mockup'
|
|
||||||
end
|
|
||||||
# :nocov:
|
|
||||||
|
|
||||||
get '/?' do
|
|
||||||
if current_site
|
|
||||||
require_login
|
|
||||||
|
|
||||||
@suggestions = current_site.suggestions
|
|
||||||
|
|
||||||
@current_page = params[:current_page].to_i
|
|
||||||
@current_page = 1 if @current_page == 0
|
|
||||||
|
|
||||||
if params[:activity] == 'mine'
|
|
||||||
events_dataset = current_site.latest_events(@current_page, 10)
|
|
||||||
elsif params[:event_id]
|
|
||||||
event = Event.select(:id).where(id: params[:event_id]).first
|
|
||||||
not_found if event.nil?
|
|
||||||
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
|
||||||
else
|
|
||||||
events_dataset = current_site.news_feed(@current_page, 10)
|
|
||||||
end
|
|
||||||
|
|
||||||
@page_count = events_dataset.page_count || 1
|
|
||||||
@events = events_dataset.all
|
|
||||||
|
|
||||||
current_site.events_dataset.update notification_seen: true
|
|
||||||
|
|
||||||
halt erb :'home', locals: {site: current_site}
|
|
||||||
end
|
|
||||||
|
|
||||||
if SimpleCache.expired?(:sites_count)
|
|
||||||
@sites_count = SimpleCache.store :sites_count, Site.count.roundup(100), 600 # 10 Minutes
|
|
||||||
else
|
|
||||||
@sites_count = SimpleCache.get :sites_count
|
|
||||||
end
|
|
||||||
|
|
||||||
@blackbox_question = BlackBox.generate
|
|
||||||
@question_first_number, @question_last_number = generate_question
|
|
||||||
|
|
||||||
erb :index, layout: false
|
|
||||||
end
|
|
||||||
|
|
||||||
def browse_sites_dataset
|
|
||||||
@current_page = params[:current_page]
|
|
||||||
@current_page = @current_page.to_i
|
|
||||||
@current_page = 1 if @current_page == 0
|
|
||||||
|
|
||||||
site_dataset = Site.filter(is_banned: false, is_crashing: false).filter(site_changed: true)
|
|
||||||
|
|
||||||
if current_site
|
|
||||||
if !current_site.blocking_site_ids.empty?
|
|
||||||
site_dataset.where!(Sequel.~(Sequel.qualify(:sites, :id) => current_site.blocking_site_ids))
|
|
||||||
end
|
|
||||||
|
|
||||||
if current_site.blocks_dataset.count
|
|
||||||
site_dataset.where!(
|
|
||||||
Sequel.~(Sequel.qualify(:sites, :id) => current_site.blocks_dataset.select(:actioning_site_id).all.collect {|s| s.actioning_site_id})
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
case params[:sort_by]
|
|
||||||
when 'hits'
|
|
||||||
site_dataset.order!(:hits.desc, :site_updated_at.desc)
|
|
||||||
when 'views'
|
|
||||||
site_dataset.order!(:views.desc, :site_updated_at.desc)
|
|
||||||
when 'newest'
|
|
||||||
site_dataset.order!(:created_at.desc, :views.desc)
|
|
||||||
when 'oldest'
|
|
||||||
site_dataset.order!(:created_at, :views.desc)
|
|
||||||
when 'random'
|
|
||||||
site_dataset.where! 'random() < 0.01'
|
|
||||||
when 'last_updated'
|
|
||||||
params[:sort_by] = 'last_updated'
|
|
||||||
site_dataset.order!(:site_updated_at.desc, :views.desc)
|
|
||||||
else
|
|
||||||
if params[:tag]
|
|
||||||
params[:sort_by] = 'views'
|
|
||||||
site_dataset.order!(:views.desc, :site_updated_at.desc)
|
|
||||||
else
|
|
||||||
params[:sort_by] = 'last_updated'
|
|
||||||
site_dataset.order!(:site_updated_at.desc, :views.desc)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
site_dataset.where! ['sites.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
|
||||||
|
|
||||||
if params[:tag]
|
|
||||||
site_dataset = site_dataset.association_join(:tags).select_all(:sites)
|
|
||||||
site_dataset.where! ['tags.name = ?', params[:tag]]
|
|
||||||
site_dataset.where! ['tags.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
|
||||||
end
|
|
||||||
|
|
||||||
site_dataset
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/browse/?' do
|
|
||||||
params.delete 'tag' if params[:tag].nil? || params[:tag].empty?
|
|
||||||
site_dataset = browse_sites_dataset
|
|
||||||
site_dataset = site_dataset.paginate @current_page, Site::BROWSE_PAGINATION_LENGTH
|
|
||||||
@page_count = site_dataset.page_count || 1
|
|
||||||
@sites = site_dataset.all
|
|
||||||
erb :browse
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/surf/?' do
|
|
||||||
params.delete 'tag' if params[:tag].nil? || params[:tag].empty?
|
|
||||||
site_dataset = browse_sites_dataset
|
|
||||||
site_dataset = site_dataset.paginate @current_page, 1
|
|
||||||
@page_count = site_dataset.page_count || 1
|
|
||||||
@site = site_dataset.first
|
|
||||||
redirect "/browse?#{Rack::Utils.build_query params}" if @site.nil?
|
|
||||||
erb :'surf', layout: false
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/surf/:username' do |username|
|
|
||||||
@site = Site.select(:id, :username, :title, :domain, :views, :stripe_customer_id).where(username: username).first
|
|
||||||
@title = @site.title
|
|
||||||
not_found if @site.nil?
|
|
||||||
erb :'surf', layout: false
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/tutorials' do
|
|
||||||
erb :'tutorials'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/donate' do
|
|
||||||
erb :'donate'
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/create_validate_all' do
|
|
||||||
content_type :json
|
|
||||||
fields = params.select {|p| p.match /^username$|^password$|^email$|^new_tags_string$/}
|
|
||||||
|
|
||||||
site = Site.new fields
|
|
||||||
return [].to_json if site.valid?
|
|
||||||
site.errors.collect {|e| [e.first, e.last.first]}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/create_validate' do
|
|
||||||
content_type :json
|
|
||||||
|
|
||||||
if !params[:field].match /^username$|^password$|^email$|^new_tags_string$/
|
|
||||||
return {error: 'not a valid field'}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
site = Site.new(params[:field] => params[:value])
|
|
||||||
site.valid?
|
|
||||||
|
|
||||||
field_sym = params[:field].to_sym
|
|
||||||
|
|
||||||
if site.errors[field_sym]
|
|
||||||
return {error: site.errors[field_sym].first}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
{result: 'ok'}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/create' do
|
|
||||||
content_type :json
|
|
||||||
require_unbanned_ip
|
|
||||||
dashboard_if_signed_in
|
|
||||||
|
|
||||||
@site = Site.new(
|
|
||||||
username: params[:username],
|
|
||||||
password: params[:password],
|
|
||||||
email: params[:email],
|
|
||||||
new_tags_string: params[:tags],
|
|
||||||
ip: request.ip
|
|
||||||
)
|
|
||||||
|
|
||||||
black_box_answered = BlackBox.valid? params[:blackbox_answer], request.ip
|
|
||||||
question_answered_correctly = params[:question_answer] == session[:question_answer]
|
|
||||||
|
|
||||||
if !question_answered_correctly
|
|
||||||
question_first_number, question_last_number = generate_question
|
|
||||||
return {
|
|
||||||
result: 'bad_answer',
|
|
||||||
question_first_number: question_first_number,
|
|
||||||
question_last_number: question_last_number
|
|
||||||
}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
if !black_box_answered || !@site.valid? || Site.ip_create_limit?(request.ip)
|
|
||||||
flash[:error] = 'There was an unknown error, please try again.'
|
|
||||||
return {result: 'error'}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
@site.save
|
|
||||||
|
|
||||||
EmailWorker.perform_async({
|
|
||||||
from: 'web@neocities.org',
|
|
||||||
reply_to: 'contact@neocities.org',
|
|
||||||
to: @site.email,
|
|
||||||
subject: "[Neocities] Welcome to Neocities!",
|
|
||||||
body: Tilt.new('./views/templates/email_welcome.erb', pretty: true).render(self)
|
|
||||||
})
|
|
||||||
|
|
||||||
send_confirmation_email @site
|
|
||||||
|
|
||||||
session[:id] = @site.id
|
|
||||||
{result: 'ok'}.to_json
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/dashboard' do
|
|
||||||
require_login
|
|
||||||
|
|
||||||
if params[:dir] && params[:dir][0] != '/'
|
|
||||||
params[:dir] = '/'+params[:dir]
|
|
||||||
end
|
|
||||||
|
|
||||||
if !File.directory?(current_site.files_path(params[:dir]))
|
|
||||||
redirect '/dashboard'
|
|
||||||
end
|
|
||||||
|
|
||||||
@dir = params[:dir]
|
|
||||||
@file_list = current_site.file_list @dir
|
|
||||||
erb :'dashboard'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/about' do
|
|
||||||
erb :'about'
|
|
||||||
end
|
|
||||||
|
|
||||||
require './app/api.rb'
|
|
||||||
require './app/site.rb'
|
|
||||||
require './app/site_files.rb'
|
|
||||||
require './app/admin.rb'
|
|
||||||
require './app/settings.rb'
|
|
||||||
require './app/blog.rb'
|
|
||||||
require './app/signin.rb'
|
|
||||||
require './app/tags.rb'
|
|
||||||
require './app/plan.rb'
|
|
||||||
require './app/password_reset.rb'
|
|
||||||
require './app/contact.rb'
|
|
||||||
require './app/event.rb'
|
|
||||||
require './app/comment.rb'
|
|
||||||
|
|
||||||
get '/terms' do
|
|
||||||
erb :'terms'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/privacy' do
|
|
||||||
erb :'privacy'
|
|
||||||
end
|
|
||||||
|
|
||||||
get '/press' do
|
|
||||||
erb :'press'
|
|
||||||
end
|
|
||||||
|
|
||||||
post '/stripe_webhook' do
|
|
||||||
event = JSON.parse request.body.read
|
|
||||||
if event['type'] == 'customer.created'
|
|
||||||
username = event['data']['object']['description']
|
|
||||||
email = event['data']['object']['email']
|
|
||||||
end
|
|
||||||
'ok'
|
|
||||||
end
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'base64'
|
||||||
|
|
||||||
get '/api' do
|
get '/api' do
|
||||||
@title = 'Developers API'
|
@title = 'Developers API'
|
||||||
|
|
62
app/browse.rb
Normal file
62
app/browse.rb
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
get '/browse/?' do
|
||||||
|
params.delete 'tag' if params[:tag].nil? || params[:tag].empty?
|
||||||
|
site_dataset = browse_sites_dataset
|
||||||
|
site_dataset = site_dataset.paginate @current_page, Site::BROWSE_PAGINATION_LENGTH
|
||||||
|
@page_count = site_dataset.page_count || 1
|
||||||
|
@sites = site_dataset.all
|
||||||
|
erb :browse
|
||||||
|
end
|
||||||
|
|
||||||
|
def browse_sites_dataset
|
||||||
|
@current_page = params[:current_page]
|
||||||
|
@current_page = @current_page.to_i
|
||||||
|
@current_page = 1 if @current_page == 0
|
||||||
|
|
||||||
|
site_dataset = Site.filter(is_banned: false, is_crashing: false).filter(site_changed: true)
|
||||||
|
|
||||||
|
if current_site
|
||||||
|
if !current_site.blocking_site_ids.empty?
|
||||||
|
site_dataset.where!(Sequel.~(Sequel.qualify(:sites, :id) => current_site.blocking_site_ids))
|
||||||
|
end
|
||||||
|
|
||||||
|
if current_site.blocks_dataset.count
|
||||||
|
site_dataset.where!(
|
||||||
|
Sequel.~(Sequel.qualify(:sites, :id) => current_site.blocks_dataset.select(:actioning_site_id).all.collect {|s| s.actioning_site_id})
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
case params[:sort_by]
|
||||||
|
when 'hits'
|
||||||
|
site_dataset.order!(:hits.desc, :site_updated_at.desc)
|
||||||
|
when 'views'
|
||||||
|
site_dataset.order!(:views.desc, :site_updated_at.desc)
|
||||||
|
when 'newest'
|
||||||
|
site_dataset.order!(:created_at.desc, :views.desc)
|
||||||
|
when 'oldest'
|
||||||
|
site_dataset.order!(:created_at, :views.desc)
|
||||||
|
when 'random'
|
||||||
|
site_dataset.where! 'random() < 0.01'
|
||||||
|
when 'last_updated'
|
||||||
|
params[:sort_by] = 'last_updated'
|
||||||
|
site_dataset.order!(:site_updated_at.desc, :views.desc)
|
||||||
|
else
|
||||||
|
if params[:tag]
|
||||||
|
params[:sort_by] = 'views'
|
||||||
|
site_dataset.order!(:views.desc, :site_updated_at.desc)
|
||||||
|
else
|
||||||
|
params[:sort_by] = 'last_updated'
|
||||||
|
site_dataset.order!(:site_updated_at.desc, :views.desc)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
site_dataset.where! ['sites.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
||||||
|
|
||||||
|
if params[:tag]
|
||||||
|
site_dataset = site_dataset.association_join(:tags).select_all(:sites)
|
||||||
|
site_dataset.where! ['tags.name = ?', params[:tag]]
|
||||||
|
site_dataset.where! ['tags.is_nsfw = ?', (params[:is_nsfw] == 'true' ? true : false)]
|
||||||
|
end
|
||||||
|
|
||||||
|
site_dataset
|
||||||
|
end
|
73
app/create.rb
Normal file
73
app/create.rb
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
post '/create_validate_all' do
|
||||||
|
content_type :json
|
||||||
|
fields = params.select {|p| p.match /^username$|^password$|^email$|^new_tags_string$/}
|
||||||
|
|
||||||
|
site = Site.new fields
|
||||||
|
return [].to_json if site.valid?
|
||||||
|
site.errors.collect {|e| [e.first, e.last.first]}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/create_validate' do
|
||||||
|
content_type :json
|
||||||
|
|
||||||
|
if !params[:field].match /^username$|^password$|^email$|^new_tags_string$/
|
||||||
|
return {error: 'not a valid field'}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
site = Site.new(params[:field] => params[:value])
|
||||||
|
site.valid?
|
||||||
|
|
||||||
|
field_sym = params[:field].to_sym
|
||||||
|
|
||||||
|
if site.errors[field_sym]
|
||||||
|
return {error: site.errors[field_sym].first}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
{result: 'ok'}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/create' do
|
||||||
|
content_type :json
|
||||||
|
require_unbanned_ip
|
||||||
|
dashboard_if_signed_in
|
||||||
|
|
||||||
|
@site = Site.new(
|
||||||
|
username: params[:username],
|
||||||
|
password: params[:password],
|
||||||
|
email: params[:email],
|
||||||
|
new_tags_string: params[:tags],
|
||||||
|
ip: request.ip
|
||||||
|
)
|
||||||
|
|
||||||
|
black_box_answered = BlackBox.valid? params[:blackbox_answer], request.ip
|
||||||
|
question_answered_correctly = params[:question_answer] == session[:question_answer]
|
||||||
|
|
||||||
|
if !question_answered_correctly
|
||||||
|
question_first_number, question_last_number = generate_question
|
||||||
|
return {
|
||||||
|
result: 'bad_answer',
|
||||||
|
question_first_number: question_first_number,
|
||||||
|
question_last_number: question_last_number
|
||||||
|
}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
if !black_box_answered || !@site.valid? || Site.ip_create_limit?(request.ip)
|
||||||
|
flash[:error] = 'There was an unknown error, please try again.'
|
||||||
|
return {result: 'error'}.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
@site.save
|
||||||
|
|
||||||
|
EmailWorker.perform_async({
|
||||||
|
from: 'web@neocities.org',
|
||||||
|
reply_to: 'contact@neocities.org',
|
||||||
|
to: @site.email,
|
||||||
|
subject: "[Neocities] Welcome to Neocities!",
|
||||||
|
body: Tilt.new('./views/templates/email_welcome.erb', pretty: true).render(self)
|
||||||
|
})
|
||||||
|
|
||||||
|
send_confirmation_email @site
|
||||||
|
|
||||||
|
session[:id] = @site.id
|
||||||
|
{result: 'ok'}.to_json
|
||||||
|
end
|
15
app/dashboard.rb
Normal file
15
app/dashboard.rb
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
get '/dashboard' do
|
||||||
|
require_login
|
||||||
|
|
||||||
|
if params[:dir] && params[:dir][0] != '/'
|
||||||
|
params[:dir] = '/'+params[:dir]
|
||||||
|
end
|
||||||
|
|
||||||
|
if !File.directory?(current_site.files_path(params[:dir]))
|
||||||
|
redirect '/dashboard'
|
||||||
|
end
|
||||||
|
|
||||||
|
@dir = params[:dir]
|
||||||
|
@file_list = current_site.file_list @dir
|
||||||
|
erb :'dashboard'
|
||||||
|
end
|
62
app/index.rb
Normal file
62
app/index.rb
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
get '/?' do
|
||||||
|
if current_site
|
||||||
|
require_login
|
||||||
|
|
||||||
|
@suggestions = current_site.suggestions
|
||||||
|
|
||||||
|
@current_page = params[:current_page].to_i
|
||||||
|
@current_page = 1 if @current_page == 0
|
||||||
|
|
||||||
|
if params[:activity] == 'mine'
|
||||||
|
events_dataset = current_site.latest_events(@current_page, 10)
|
||||||
|
elsif params[:event_id]
|
||||||
|
event = Event.select(:id).where(id: params[:event_id]).first
|
||||||
|
not_found if event.nil?
|
||||||
|
events_dataset = Event.where(id: params[:event_id]).paginate(1, 1)
|
||||||
|
else
|
||||||
|
events_dataset = current_site.news_feed(@current_page, 10)
|
||||||
|
end
|
||||||
|
|
||||||
|
@page_count = events_dataset.page_count || 1
|
||||||
|
@events = events_dataset.all
|
||||||
|
|
||||||
|
current_site.events_dataset.update notification_seen: true
|
||||||
|
|
||||||
|
halt erb :'home', locals: {site: current_site}
|
||||||
|
end
|
||||||
|
|
||||||
|
if SimpleCache.expired?(:sites_count)
|
||||||
|
@sites_count = SimpleCache.store :sites_count, Site.count.roundup(100), 600 # 10 Minutes
|
||||||
|
else
|
||||||
|
@sites_count = SimpleCache.get :sites_count
|
||||||
|
end
|
||||||
|
|
||||||
|
@blackbox_question = BlackBox.generate
|
||||||
|
@question_first_number, @question_last_number = generate_question
|
||||||
|
|
||||||
|
erb :index, layout: false
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/tutorials' do
|
||||||
|
erb :'tutorials'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/donate' do
|
||||||
|
erb :'donate'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/about' do
|
||||||
|
erb :'about'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/terms' do
|
||||||
|
erb :'terms'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/privacy' do
|
||||||
|
erb :'privacy'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/press' do
|
||||||
|
erb :'press'
|
||||||
|
end
|
22
app/mockup.rb
Normal file
22
app/mockup.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# :nocov:
|
||||||
|
get '/home_mockup' do
|
||||||
|
erb :'home_mockup'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/edit_mockup' do
|
||||||
|
erb :'edit_mockup'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/profile_mockup' do
|
||||||
|
require_login
|
||||||
|
erb :'profile_mockup', locals: {site: current_site}
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/browse_mockup' do
|
||||||
|
erb :'browse_mockup'
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/tips_mockup' do
|
||||||
|
erb :'tips_mockup'
|
||||||
|
end
|
||||||
|
# :nocov:
|
8
app/stripe_webhook.rb
Normal file
8
app/stripe_webhook.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
post '/stripe_webhook' do
|
||||||
|
event = JSON.parse request.body.read
|
||||||
|
if event['type'] == 'customer.created'
|
||||||
|
username = event['data']['object']['description']
|
||||||
|
email = event['data']['object']['email']
|
||||||
|
end
|
||||||
|
'ok'
|
||||||
|
end
|
16
app/surf.rb
Normal file
16
app/surf.rb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
get '/surf/?' do
|
||||||
|
params.delete 'tag' if params[:tag].nil? || params[:tag].empty?
|
||||||
|
site_dataset = browse_sites_dataset
|
||||||
|
site_dataset = site_dataset.paginate @current_page, 1
|
||||||
|
@page_count = site_dataset.page_count || 1
|
||||||
|
@site = site_dataset.first
|
||||||
|
redirect "/browse?#{Rack::Utils.build_query params}" if @site.nil?
|
||||||
|
erb :'surf', layout: false
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/surf/:username' do |username|
|
||||||
|
@site = Site.select(:id, :username, :title, :domain, :views, :stripe_customer_id).where(username: username).first
|
||||||
|
@title = @site.title
|
||||||
|
not_found if @site.nil?
|
||||||
|
erb :'surf', layout: false
|
||||||
|
end
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'base64'
|
||||||
require 'zlib'
|
require 'zlib'
|
||||||
require 'rubygems/package'
|
require 'rubygems/package'
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue