@@ -10,9 +10,40 @@ class ValidationError < StandardError; end
1010 field :openai_model , type : :string , default : ENV [ "OPENAI_MODEL" ]
1111 field :brand_fetch_client_id , type : :string , default : ENV [ "BRAND_FETCH_CLIENT_ID" ]
1212
13+ ONBOARDING_STATES = %w[ open closed invite_only ] . freeze
14+ DEFAULT_ONBOARDING_STATE = begin
15+ env_value = ENV [ "ONBOARDING_STATE" ] . to_s . presence || "open"
16+ ONBOARDING_STATES . include? ( env_value ) ? env_value : "open"
17+ end
18+
19+ field :onboarding_state , type : :string , default : DEFAULT_ONBOARDING_STATE
1320 field :require_invite_for_signup , type : :boolean , default : false
1421 field :require_email_confirmation , type : :boolean , default : ENV . fetch ( "REQUIRE_EMAIL_CONFIRMATION" , "true" ) == "true"
1522
23+ def self . validate_onboarding_state! ( state )
24+ return if ONBOARDING_STATES . include? ( state )
25+
26+ raise ValidationError , I18n . t ( "settings.hostings.update.invalid_onboarding_state" )
27+ end
28+
29+ class << self
30+ alias_method :raw_onboarding_state , :onboarding_state
31+ alias_method :raw_onboarding_state= , :onboarding_state=
32+
33+ def onboarding_state
34+ value = raw_onboarding_state
35+ return "invite_only" if value . blank? && require_invite_for_signup
36+
37+ value . presence || DEFAULT_ONBOARDING_STATE
38+ end
39+
40+ def onboarding_state = ( state )
41+ validate_onboarding_state! ( state )
42+ self . require_invite_for_signup = state == "invite_only"
43+ self . raw_onboarding_state = state
44+ end
45+ end
46+
1647 # Validates OpenAI configuration requires model when custom URI base is set
1748 def self . validate_openai_config! ( uri_base : nil , model : nil )
1849 # Use provided values or current settings
0 commit comments