mirror of
https://github.com/we-promise/sure.git
synced 2026-04-22 05:24:11 +00:00
Pre-fill login credentials in PikaPods demo site (#288)
* Gate demo credential prefills by host * Business logic in controller * Store demo config in Rails * Proper check for demo settings * Add demo banner * Support hosts array * Add demo.sure.am * Nice rescue addition by CodeRabbit --------- Co-authored-by: sokie <sokysrm@gmail.com>
This commit is contained in:
@@ -5,6 +5,22 @@ class SessionsController < ApplicationController
|
||||
layout "auth"
|
||||
|
||||
def new
|
||||
begin
|
||||
demo = Rails.application.config_for(:demo)
|
||||
@prefill_demo_credentials = demo_host_match?(demo)
|
||||
if @prefill_demo_credentials
|
||||
@email = params[:email].presence || demo["email"]
|
||||
@password = params[:password].presence || demo["password"]
|
||||
else
|
||||
@email = params[:email]
|
||||
@password = params[:password]
|
||||
end
|
||||
rescue RuntimeError, Errno::ENOENT, Psych::SyntaxError
|
||||
# Demo config file missing or malformed - disable demo credential prefilling
|
||||
@prefill_demo_credentials = false
|
||||
@email = params[:email]
|
||||
@password = params[:password]
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
@@ -75,4 +91,10 @@ class SessionsController < ApplicationController
|
||||
def set_session
|
||||
@session = Current.user.sessions.find(params[:id])
|
||||
end
|
||||
|
||||
def demo_host_match?(demo)
|
||||
return false unless demo.present? && demo["hosts"].present?
|
||||
|
||||
demo["hosts"].include?(request.host)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,10 +2,38 @@
|
||||
header_title t(".title")
|
||||
%>
|
||||
|
||||
<%= styled_form_with url: sessions_path, class: "space-y-4", data: { turbo: false } do |form| %>
|
||||
<%= form.email_field :email, label: t(".email"), autofocus: false, autocomplete: "email", required: "required", placeholder: t(".email_placeholder") %>
|
||||
<% if @prefill_demo_credentials %>
|
||||
<div class="mb-4 rounded-lg border bg-blue-50 text-blue-700 border-blue-200 theme-dark:bg-blue-900/20 theme-dark:text-blue-400 theme-dark:border-blue-800 p-4" role="status" aria-live="polite">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="shrink-0">
|
||||
<%= icon "info", size: "sm", color: "blue-600" %>
|
||||
</div>
|
||||
<div class="flex-1 text-sm">
|
||||
<h3 class="font-semibold mb-1">
|
||||
<%= t(".demo_banner_title") %>
|
||||
</h3>
|
||||
<p>
|
||||
<%= t(".demo_banner_message") %>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<%= form.password_field :password, label: t(".password"), required: "required", placeholder: t(".password_placeholder") %>
|
||||
<%= styled_form_with url: sessions_path, class: "space-y-4", data: { turbo: false } do |form| %>
|
||||
<%= form.email_field :email,
|
||||
label: t(".email"),
|
||||
autofocus: false,
|
||||
autocomplete: "email",
|
||||
required: "required",
|
||||
placeholder: t(".email_placeholder"),
|
||||
value: @email %>
|
||||
|
||||
<%= form.password_field :password,
|
||||
label: t(".password"),
|
||||
required: "required",
|
||||
placeholder: t(".password_placeholder"),
|
||||
value: @password %>
|
||||
|
||||
<%= form.submit t(".submit") %>
|
||||
<% end %>
|
||||
|
||||
Reference in New Issue
Block a user