From a1aa173c51415ccd5f3f0ff2510f70f9274135ef Mon Sep 17 00:00:00 2001 From: Adam Cooke Date: Fri, 28 Apr 2017 17:01:11 +0100 Subject: [PATCH] add script to create an initial admin user --- Gemfile | 1 + Gemfile.lock | 2 ++ bin/postal | 5 +++++ lib/postal/user_creator.rb | 34 ++++++++++++++++++++++++++++++++++ script/make_user.rb | 9 +++++++++ 5 files changed, 51 insertions(+) create mode 100644 lib/postal/user_creator.rb create mode 100755 script/make_user.rb diff --git a/Gemfile b/Gemfile index 9f30a9b..c06d59b 100644 --- a/Gemfile +++ b/Gemfile @@ -33,6 +33,7 @@ gem 'moonrope', :git => 'https://github.com/adamcooke/moonrope', :branch => 'mas gem 'jwt' gem 'createsend', '~> 4.0' gem 'acme-client', :git => 'https://github.com/unixcharles/acme-client' +gem 'highline', :require => true group :development, :test do gem 'byebug' diff --git a/Gemfile.lock b/Gemfile.lock index 74071db..00f59ea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -106,6 +106,7 @@ GEM haml (4.0.7) tilt hashie (3.4.6) + highline (1.7.8) httparty (0.14.0) multi_xml (>= 0.5.2) i18n (0.8.1) @@ -230,6 +231,7 @@ DEPENDENCIES gelf haml hashie + highline jquery-rails jwt kaminari diff --git a/bin/postal b/bin/postal index 0f8a4a6..457dc8c 100755 --- a/bin/postal +++ b/bin/postal @@ -80,6 +80,10 @@ case "$1" in run "ruby script/auto_upgrade.rb" ;; + make-user) + run "bundle exec ruby script/make_user.rb" + ;; + bundle) if [ -n "$2" ]; then run "bundle install --path=$2 --without=development --jobs=4 --clean" @@ -111,5 +115,6 @@ case "$1" in echo -e " * \e[35mregister-lets-encrypt\e[0m - register the generated Let's Encrypt key" echo -e " * \e[35mupgrade\e[0m - upgrade the Postal installation" echo -e " * \e[35mbundle\e[0m - download & install all required Ruby dependencies" + echo -e " * \e[35mmake-user\e[0m - create a new admin user" echo esac diff --git a/lib/postal/user_creator.rb b/lib/postal/user_creator.rb new file mode 100644 index 0000000..9fa609d --- /dev/null +++ b/lib/postal/user_creator.rb @@ -0,0 +1,34 @@ +require 'highline' + +module Postal + module UserCreator + + def self.start(&block) + cli = HighLine.new + puts "\e[32mPostal User Creator\e[0m" + puts "Enter the information required to create a new Postal user." + puts "This tool is usually only used to create your initial admin user." + puts + user = User.new + user.email_address = cli.ask("E-Mail Address".ljust(20, ' ') + ": ") + user.first_name = cli.ask("First Name".ljust(20, ' ') + ": ") + user.last_name = cli.ask("Last Name".ljust(20, ' ') + ": ") + user.password = cli.ask("Initial Password:".ljust(20, ' ') + ": ") { |value| value.echo = '*' } + + block.call(user) if block_given? + if user.save + puts + puts "User has been created with e-mail address \e[32m#{user.email_address}\e[0m" + puts + else + puts + puts "\e[31mFailed to create user\e[0m" + for error in user.errors.full_messages + puts " * #{error}" + end + puts + end + + end + end +end diff --git a/script/make_user.rb b/script/make_user.rb new file mode 100755 index 0000000..ae893b9 --- /dev/null +++ b/script/make_user.rb @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +trap("INT") { puts ; exit } + +require_relative '../config/environment' +require 'postal/user_creator' + +Postal::UserCreator.start do |u| + u.admin = true +end