2017-11-23 07:22:20 -08:00
defmodule Mix.Tasks.GenerateConfig do
use Mix.Task
2018-11-02 01:32:48 -07:00
@moduledoc """
Generate a new config
## Usage
` ` mix generate_config ` `
This mix task is interactive , and will overwrite the config present at ` ` config / generated_config . exs ` ` .
"""
2017-11-23 07:22:20 -08:00
def run ( _ ) do
IO . puts ( " Answer a few questions to generate a new config \n " )
2017-12-03 15:01:45 -08:00
IO . puts ( " --- THIS WILL OVERWRITE YOUR config/generated_config.exs! --- \n " )
2018-03-30 06:01:53 -07:00
domain = IO . gets ( " What is your domain name? (e.g. pleroma.soykaf.com): " ) |> String . trim ( )
name = IO . gets ( " What is the name of your instance? (e.g. Pleroma/Soykaf): " ) |> String . trim ( )
email = IO . gets ( " What's your admin email address: " ) |> String . trim ( )
secret = :crypto . strong_rand_bytes ( 64 ) |> Base . encode64 ( ) |> binary_part ( 0 , 64 )
dbpass = :crypto . strong_rand_bytes ( 64 ) |> Base . encode64 ( ) |> binary_part ( 0 , 64 )
resultSql = EEx . eval_file ( " lib/mix/tasks/sample_psql.eex " , dbpass : dbpass )
2018-12-06 04:29:04 -08:00
{ web_push_public_key , web_push_private_key } = :crypto . generate_key ( :ecdh , :prime256v1 )
2018-03-30 06:01:53 -07:00
result =
EEx . eval_file (
" lib/mix/tasks/sample_config.eex " ,
domain : domain ,
email : email ,
name : name ,
secret : secret ,
2018-12-06 04:29:04 -08:00
dbpass : dbpass ,
web_push_public_key : Base . url_encode64 ( web_push_public_key , padding : false ) ,
web_push_private_key : Base . url_encode64 ( web_push_private_key , padding : false )
2018-03-30 06:01:53 -07:00
)
IO . puts (
" \n Writing config to config/generated_config.exs. \n \n Check it and configure your database, then copy it to either config/dev.secret.exs or config/prod.secret.exs "
)
2017-12-03 15:01:45 -08:00
File . write ( " config/generated_config.exs " , result )
2018-03-30 06:01:53 -07:00
IO . puts (
" \n Writing setup_db.psql, please run it as postgre superuser, i.e.: sudo su postgres -c 'psql -f config/setup_db.psql' "
)
2017-11-26 09:57:49 -08:00
File . write ( " config/setup_db.psql " , resultSql )
2017-11-23 07:22:20 -08:00
end
end