mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 09:12:35 +02:00
91 lines
No EOL
2.1 KiB
Ruby
91 lines
No EOL
2.1 KiB
Ruby
def new_recaptcha_valid?
|
|
return session[:captcha_valid] = true if ENV['RACK_ENV'] == 'test'
|
|
resp = Net::HTTP.get URI(
|
|
'https://www.google.com/recaptcha/api/siteverify?'+
|
|
Rack::Utils.build_query(
|
|
secret: $config['recaptcha_private_key'],
|
|
response: params[:'g-recaptcha-response']
|
|
)
|
|
)
|
|
|
|
if JSON.parse(resp)['success'] == true
|
|
session[:captcha_valid] = true
|
|
true
|
|
else
|
|
false
|
|
end
|
|
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
|
|
|
|
if site.valid?
|
|
return [].to_json if new_recaptcha_valid?
|
|
return [['captcha', 'Please complete the captcha.']].to_json
|
|
end
|
|
|
|
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
|
|
)
|
|
|
|
if session[:captcha_valid] != true
|
|
flash[:error] = 'The captcha was not valid, please try again.'
|
|
return {result: 'error'}.to_json
|
|
end
|
|
|
|
if !@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
|
|
|
|
session[:captcha_valid] = nil
|
|
|
|
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 |