var marker, map;
function setLocation(e) {
- $("#latitude").val(e.latlng.lat);
- $("#longitude").val(e.latlng.lng);
+ const latlng = e.latlng.wrap();
+
+ $("#latitude").val(latlng.lat);
+ $("#longitude").val(latlng.lng);
if (marker) {
map.removeLayer(marker);
before_action :authorize
before_action :check_api_writable, :only => [:create, :update, :destroy]
- before_action :check_api_readable, :except => [:create, :update, :destroy]
authorize_resource
render :action => "new"
else
# Save the user record
- save_new_user params[:email_hmac], params[:referer]
+ if save_new_user params[:email_hmac]
+ SIGNUP_IP_LIMITER&.update(request.remote_ip)
+ SIGNUP_EMAIL_LIMITER&.update(canonical_email(current_user.email))
+
+ flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo)
+
+ referer = welcome_path(welcome_options(params[:referer]))
+
+ if current_user.status == "active"
+ successful_login(current_user, referer)
+ else
+ session[:pending_user] = current_user.id
+ UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later
+ redirect_to :controller => :confirmations, :action => :confirm, :display_name => current_user.display_name
+ end
+ else
+ render :action => "new", :referer => params[:referer]
+ end
end
end
end
private
- def save_new_user(email_hmac, referer = nil)
+ def save_new_user(email_hmac)
current_user.data_public = true
current_user.description = "" if current_user.description.nil?
current_user.creation_address = request.remote_ip
current_user.activate
end
- if current_user.save
- SIGNUP_IP_LIMITER&.update(request.remote_ip)
- SIGNUP_EMAIL_LIMITER&.update(canonical_email(current_user.email))
-
- flash[:matomo_goal] = Settings.matomo["goals"]["signup"] if defined?(Settings.matomo)
-
- referer = welcome_path(welcome_options(referer))
-
- if current_user.status == "active"
- successful_login(current_user, referer)
- else
- session[:pending_user] = current_user.id
- UserMailer.signup_confirm(current_user, current_user.generate_token_for(:new_user), referer).deliver_later
- redirect_to :controller => :confirmations, :action => :confirm, :display_name => current_user.display_name
- end
- else
- render :action => "new", :referer => params[:referer]
- end
+ current_user.save
end
def welcome_options(referer = nil)
</h1>
<p class='text-body-secondary'>
- <%= t ".resend_html",
- :reconfirm_link => link_to(t(".click_here"), url_for(:action => "confirm_resend")) %>
+ <%= t ".if_need_resend" %>
</p>
+ <%= bootstrap_form_tag :url => url_for(:action => "confirm_resend") do |f| %>
+ <%= f.submit t(".resend_button"), :class => "btn btn-outline-primary" %>
+ <% end %>
<% end %>
success: "Confirmed your account, thanks for signing up!"
already active: "This account has already been confirmed."
unknown token: "That confirmation code has expired or does not exist."
- resend_html: "If you need us to resend the confirmation email, %{reconfirm_link}."
- click_here: click here
+ if_need_resend: "If you need us to resend the confirmation email, click the button below."
+ resend_button: Resend the confirmation email
confirm_resend:
failure: "User %{name} not found."
confirm_email:
post "/user/new" => "users#create"
get "/user/terms" => "users#terms"
post "/user/save" => "users#save"
- get "/user/:display_name/confirm/resend" => "confirmations#confirm_resend", :as => :user_confirm_resend
+ post "/user/:display_name/confirm/resend" => "confirmations#confirm_resend", :as => :user_confirm_resend
match "/user/:display_name/confirm" => "confirmations#confirm", :via => [:get, :post]
match "/user/confirm" => "confirmations#confirm", :via => [:get, :post]
match "/user/confirm-email" => "confirmations#confirm_email", :via => [:get, :post]
def within_sidebar(&)
within("#sidebar_content", &)
end
+
+ def within_content_body(&)
+ within("#content > .content-body", &)
+ end
end
{ :controller => "confirmations", :action => "confirm", :display_name => "username" }
)
assert_routing(
- { :path => "/user/username/confirm/resend", :method => :get },
+ { :path => "/user/username/confirm/resend", :method => :post },
{ :controller => "confirmations", :action => "confirm_resend", :display_name => "username" }
)
assert_difference "ActionMailer::Base.deliveries.size", 1 do
perform_enqueued_jobs do
- get user_confirm_resend_path(user)
+ post user_confirm_resend_path(user)
end
end
assert_no_difference "ActionMailer::Base.deliveries.size" do
perform_enqueued_jobs do
- get user_confirm_resend_path(user)
+ post user_confirm_resend_path(user)
end
end
def test_confirm_resend_unknown_user
assert_no_difference "ActionMailer::Base.deliveries.size" do
perform_enqueued_jobs do
- get user_confirm_resend_path(:display_name => "No Such User")
+ post user_confirm_resend_path(:display_name => "No Such User")
end
end
+++ /dev/null
-require "application_system_test_case"
-
-class ConfirmationResendSystemTest < ApplicationSystemTestCase
- def setup
- @user = build(:user)
- visit user_new_path
-
- within ".new_user" do
- fill_in "Email", :with => @user.email
- fill_in "Display Name", :with => @user.display_name
- fill_in "Password", :with => "testtest"
- fill_in "Confirm Password", :with => "testtest"
- click_on "Sign Up"
- end
- end
-
- test "flash message should not contain raw html" do
- visit user_confirm_resend_path(@user)
-
- assert_content "sent a new confirmation"
- assert_no_content "<p>"
- end
-end
require "application_system_test_case"
class UserSignupTest < ApplicationSystemTestCase
+ include ActionMailer::TestHelper
+
+ def setup
+ stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
+ end
+
+ test "Sign up with confirmation email" do
+ visit root_path
+
+ click_on "Sign Up"
+
+ within_content_body do
+ fill_in "Email", :with => "new_user_account@example.com"
+ fill_in "Display Name", :with => "new_user_account"
+ fill_in "Password", :with => "new_user_password"
+ fill_in "Confirm Password", :with => "new_user_password"
+
+ assert_emails 1 do
+ click_on "Sign Up"
+
+ assert_content "We sent you a confirmation email"
+ end
+ end
+
+ email = ActionMailer::Base.deliveries.first
+ assert_equal 1, email.to.count
+ assert_equal "new_user_account@example.com", email.to.first
+ email_text = email.parts[0].parts[0].decoded
+ match = %r{/user/new_user_account/confirm\?confirm_string=\S+}.match(email_text)
+ assert_not_nil match
+
+ visit match[0]
+
+ assert_content "new_user_account"
+ assert_content "Welcome!"
+ end
+
+ test "Sign up with confirmation email resending" do
+ visit root_path
+
+ click_on "Sign Up"
+
+ within_content_body do
+ fill_in "Email", :with => "new_user_account@example.com"
+ fill_in "Display Name", :with => "new_user_account"
+ fill_in "Password", :with => "new_user_password"
+ fill_in "Confirm Password", :with => "new_user_password"
+
+ assert_emails 2 do
+ click_on "Sign Up"
+
+ assert_content "We sent you a confirmation email"
+
+ click_on "Resend the confirmation email"
+
+ assert_content "Email Address or Username"
+ end
+ end
+
+ assert_content "sent a new confirmation"
+ assert_no_content "<p>"
+
+ email = ActionMailer::Base.deliveries.last
+ assert_equal 1, email.to.count
+ assert_equal "new_user_account@example.com", email.to.first
+ email_text = email.parts[0].parts[0].decoded
+ match = %r{/user/new_user_account/confirm\?confirm_string=\S+}.match(email_text)
+ assert_not_nil match
+
+ visit match[0]
+
+ assert_content "new_user_account"
+ assert_content "Welcome!"
+ end
+
test "Sign up from login page" do
visit login_path
click_on "Sign up"
- assert_content "Confirm Password"
+ within_content_body do
+ assert_content "Confirm Password"
+ end
end
test "Show OpenID form when OpenID provider button is clicked" do
visit login_path
- assert_no_field "OpenID URL"
- assert_no_button "Continue"
+ within_content_body do
+ assert_no_field "OpenID URL"
+ assert_no_button "Continue"
- click_on "Log in with OpenID"
+ click_on "Log in with OpenID"
- assert_field "OpenID URL"
- assert_button "Continue"
+ assert_field "OpenID URL"
+ assert_button "Continue"
+ end
end
end