Add onboarding state selector for self-hosted signup (#251)

* Add onboarding modes to self-hosted signup

* Style form consistently

* Configure ONBOARDING_STATE via ENV
This commit is contained in:
Juan José Mata
2025-10-27 21:52:37 +01:00
committed by GitHub
parent dcb674835c
commit 72e7d7736b
16 changed files with 121 additions and 23 deletions

View File

@@ -10,9 +10,40 @@ class Setting < RailsSettings::Base
field :openai_model, type: :string, default: ENV["OPENAI_MODEL"]
field :brand_fetch_client_id, type: :string, default: ENV["BRAND_FETCH_CLIENT_ID"]
ONBOARDING_STATES = %w[open closed invite_only].freeze
DEFAULT_ONBOARDING_STATE = begin
env_value = ENV["ONBOARDING_STATE"].to_s.presence || "open"
ONBOARDING_STATES.include?(env_value) ? env_value : "open"
end
field :onboarding_state, type: :string, default: DEFAULT_ONBOARDING_STATE
field :require_invite_for_signup, type: :boolean, default: false
field :require_email_confirmation, type: :boolean, default: ENV.fetch("REQUIRE_EMAIL_CONFIRMATION", "true") == "true"
def self.validate_onboarding_state!(state)
return if ONBOARDING_STATES.include?(state)
raise ValidationError, I18n.t("settings.hostings.update.invalid_onboarding_state")
end
class << self
alias_method :raw_onboarding_state, :onboarding_state
alias_method :raw_onboarding_state=, :onboarding_state=
def onboarding_state
value = raw_onboarding_state
return "invite_only" if value.blank? && require_invite_for_signup
value.presence || DEFAULT_ONBOARDING_STATE
end
def onboarding_state=(state)
validate_onboarding_state!(state)
self.require_invite_for_signup = state == "invite_only"
self.raw_onboarding_state = state
end
end
# Validates OpenAI configuration requires model when custom URI base is set
def self.validate_openai_config!(uri_base: nil, model: nil)
# Use provided values or current settings