diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index eb290d37e..fed96b56e 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -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 diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index 5d5774349..336547490 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -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 %> +
+
+
+ <%= icon "info", size: "sm", color: "blue-600" %> +
+
+

+ <%= t(".demo_banner_title") %> +

+

+ <%= t(".demo_banner_message") %> +

+
+
+
+<% 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 %> diff --git a/config/demo.yml b/config/demo.yml new file mode 100644 index 000000000..330d57a20 --- /dev/null +++ b/config/demo.yml @@ -0,0 +1,15 @@ +default: &default + hosts: + - sure-demo.pikapod.net + - demo.sure.am + email: user@example.com + password: Password1! + +development: + <<: *default + +test: + <<: *default + +production: + <<: *default diff --git a/config/locales/views/sessions/en.yml b/config/locales/views/sessions/en.yml index 589f9f3cc..98a6ecd9a 100644 --- a/config/locales/views/sessions/en.yml +++ b/config/locales/views/sessions/en.yml @@ -19,3 +19,5 @@ en: password_placeholder: Enter your password openid_connect: Sign in with OpenID Connect google_auth_connect: Sign in with Google + demo_banner_title: "Demo Mode Active" + demo_banner_message: "This is a demonstration environment. Login credentials have been pre-filled for your convenience. Please do not enter real or sensitive information."