koopa-admin-log/configs/decidim/bootstrap.rb

78 lines
3.1 KiB
Ruby

# 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: %(<link rel="stylesheet" href="/hacktivism.css"><script src="/hacktivism-consent.js"></script><link rel="icon" href="/hacktivism-favicon.svg">)
}
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 = %(<link rel="stylesheet" href="/hacktivism.css"><script src="/hacktivism-consent.js"></script><link rel="icon" href="/hacktivism-favicon.svg">)
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}"