78 lines
3.1 KiB
Ruby
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}"
|