Compare commits

...

4 commits

Author SHA1 Message Date
03b3e18126 Remove caps and spaces from email addresses
Closes #19
2026-01-09 17:41:15 -06:00
cb89742f60 Set time zone as well when signing up 2026-01-09 17:41:15 -06:00
51cfbd5548 Move reset link to error message 2026-01-09 17:41:15 -06:00
35f8c3f392 Redirect to previous page after login
Closes #24
2026-01-09 17:40:39 -06:00
4 changed files with 23 additions and 7 deletions

View file

@ -102,7 +102,7 @@ get '/signup' do
end end
post '/signup' do post '/signup' do
@user = User.create(email: params[:email]) @user = User.create(email: params[:email].downcase.strip)
@errors = [] @errors = []
if params[:password].empty? if params[:password].empty?
@errors << OpenStruct.new(:attribute => :password, :type => :blank) @errors << OpenStruct.new(:attribute => :password, :type => :blank)
@ -114,6 +114,7 @@ post '/signup' do
@user.save @user.save
session.clear session.clear
session[:user_id] = @user.id session[:user_id] = @user.id
session[:timezone] = params[:timezone]
redirect '/' redirect '/'
else else
erb :signup erb :signup
@ -125,7 +126,7 @@ get '/login' do
end end
post '/login' do post '/login' do
user = User.find_by(email: params[:email]) user = User.find_by(email: params[:email].downcase.strip)
if user && verify_password(params[:password], user.password) if user && verify_password(params[:password], user.password)
if not user.reset.nil? if not user.reset.nil?
user.reset = nil user.reset = nil
@ -134,7 +135,11 @@ post '/login' do
session.clear session.clear
session[:user_id] = user.id session[:user_id] = user.id
session[:timezone] = params[:timezone] session[:timezone] = params[:timezone]
redirect '/' if params[:r]
redirect params[:r]
else
redirect '/'
end
else else
@error = _("Incorrect email or password.") @error = _("Incorrect email or password.")
erb :login erb :login
@ -146,6 +151,7 @@ get '/reset' do
end end
post '/reset' do post '/reset' do
params[:email].downcase!.strip!
logger.info "Password reset request for \"#{params[:email]}\"" logger.info "Password reset request for \"#{params[:email]}\""
@errors = [] @errors = []
if not params[:email] =~ URI::MailTo::EMAIL_REGEXP if not params[:email] =~ URI::MailTo::EMAIL_REGEXP
@ -598,10 +604,11 @@ helpers do
end end
def require_login def require_login
redirect '/login' unless current_user redirect "/login?r=#{request.path}" unless current_user
end end
def require_admin def require_admin
require_login
redirect '/' unless is_admin redirect '/' unless is_admin
end end

View file

@ -1,7 +1,10 @@
<h1 class="mb-5"><%= _("Login") %></h1> <h1 class="mb-5"><%= _("Login") %></h1>
<% if @error %> <% if @error %>
<p class="alert alert-warning mb-4"><%= @error %></p> <div class="alert alert-warning mb-4">
<p><%= @error %></p>
<p class="mb-0"><a href="/reset"><%= _("Reset password") %></a></p>
</div>
<% end %> <% end %>
<form action="/login" name="login" method="post" class="mb-5"> <form action="/login" name="login" method="post" class="mb-5">
@ -13,11 +16,11 @@
<label for="password" class="form-label"><%= _("Password") %></label> <label for="password" class="form-label"><%= _("Password") %></label>
<input type="password" name="password" class="form-control"> <input type="password" name="password" class="form-control">
</div> </div>
<button type="submit" class="btn btn-primary"><%= _("Login") %></button> <input type="hidden" name="r" value="<%= @params[:r] %>">
<input type="hidden" name="timezone" value="UTC"> <input type="hidden" name="timezone" value="UTC">
<button type="submit" class="btn btn-primary"><%= _("Login") %></button>
</form> </form>
<p><a href="/signup"><%= _("Create account") %></a></p> <p><a href="/signup"><%= _("Create account") %></a></p>
<p><a href="/reset"><%= _("Reset password") %></a></p>
<script> <script>
document.login.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone; document.login.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone;

View file

@ -28,5 +28,10 @@
<label for="password" class="form-label"><%= _("Password") %></label> <label for="password" class="form-label"><%= _("Password") %></label>
<input type="password" name="password" value="<%= params[:password] %>" class="form-control"> <input type="password" name="password" value="<%= params[:password] %>" class="form-control">
</div> </div>
<input type="hidden" name="timezone" value="UTC">
<button type="submit" class="btn btn-primary"><%= _("Create account") %></button> <button type="submit" class="btn btn-primary"><%= _("Create account") %></button>
</form> </form>
<script>
document.signup.timezone.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
</script>

View file

@ -14,6 +14,7 @@
<input type="password" name="password" class="form-control"> <input type="password" name="password" class="form-control">
</div> </div>
<button type="submit" class="btn btn-primary"><%= _("Login") %></button> <button type="submit" class="btn btn-primary"><%= _("Login") %></button>
<input type="hidden" name="r" value="votes/<%= @vote.secure_id %>">
<input type="hidden" name="timezone" value="UTC"> <input type="hidden" name="timezone" value="UTC">
</form> </form>