# frozen_string_literal: true # Create system admin + organization + org admin. Idempotent. # Usage: bundle exec rails runner /code/lib/koopa_bootstrap.rb host = ENV.fetch("DECIDIM_HOST", "decidim.hacktivism.ch") sys_email = ENV.fetch("DECIDIM_SYSTEM_EMAIL") sys_password = ENV.fetch("DECIDIM_SYSTEM_PASSWORD") admin_email = ENV.fetch("DECIDIM_ADMIN_EMAIL") admin_password = ENV.fetch("DECIDIM_ADMIN_PASSWORD") admin_name = ENV.fetch("DECIDIM_ADMIN_NAME", "hacktivism") org_name = ENV.fetch("DECIDIM_APPLICATION_NAME", "hacktivism") sys = Decidim::System::Admin.find_or_initialize_by(email: sys_email) sys.password = sys_password sys.password_confirmation = sys_password sys.save! puts "system admin: #{sys.email}" org = Decidim::Organization.find_by(host: host) if org.nil? attrs = { host: host, default_locale: ENV.fetch("DECIDIM_DEFAULT_LOCALE", "en"), available_locales: ENV.fetch("DECIDIM_AVAILABLE_LOCALES", "en,de,fr").split(","), reference_prefix: "HCK", time_zone: "Europe/Zurich", users_registration_mode: "enabled", force_users_to_authenticate_before_access_organization: false, available_authorizations: [], tos_version: Time.current, colors: { "primary" => "#e8a838", "secondary" => "#3ecfbf", "tertiary" => "#3d3128", "success" => "#16a34a", "warning" => "#f0d090", "alert" => "#e7131a" }, header_snippets: %() } name_val = { "en" => org_name, "de" => org_name, "fr" => org_name } desc_val = { "en" => "hacktivism participatory platform", "de" => "hacktivism Partizipationsplattform", "fr" => "plateforme participative hacktivism" } begin org = Decidim::Organization.new(attrs.merge(name: name_val, description: desc_val)) org.save! rescue StandardError org = Decidim::Organization.new(attrs.merge(name: org_name, description: "hacktivism participatory platform")) org.save! end Decidim::System::CreateDefaultPages.call(org) if defined?(Decidim::System::CreateDefaultPages) Decidim::System::CreateDefaultContentBlocks.call(org) if defined?(Decidim::System::CreateDefaultContentBlocks) puts "organization created host=#{org.host}" else org.colors = { "primary" => "#e8a838", "secondary" => "#3ecfbf", "tertiary" => "#3d3128", "success" => "#16a34a", "warning" => "#f0d090", "alert" => "#e7131a" } org.header_snippets = %() org.save! puts "organization updated host=#{org.host}" end user = Decidim::User.find_or_initialize_by(email: admin_email, organization: org) user.name = admin_name user.nickname = admin_name.downcase.gsub(/[^a-z0-9_]/, "")[0, 20] user.password = admin_password user.password_confirmation = admin_password user.admin = true user.confirmed_at ||= Time.current user.tos_agreement = true user.accepted_tos_version = org.tos_version user.locale = org.default_locale user.save! puts "org admin: #{user.email}"