class Fusebox::Cli

These methods are executed via the ‘bin/fusebox` executable @todo

* Allow specification of group admin username-part instead of 'postmaster' (via yaml? fuseboxrc?)
* Exit codes
* Flags for simple, non-table output for report methods (to allow piping)

Public Instance Methods

add(username, password, first_name, last_name) click to toggle source
# File lib/fusebox/cli.rb, line 15
def add (username, password, first_name, last_name)
  group_parent = username.gsub /.*(@.*)/, 'postmaster\1'
  response = Fusebox::Request.new.order(:account_type => 'group_subaccount', :group_parent => group_parent, :user => username, :password => password, :first_name => first_name, :last_name => last_name)
  say response.detail
end
alias_add(username, *aliases) click to toggle source
# File lib/fusebox/cli.rb, line 22
def alias_add(username, *aliases)
  response = Fusebox::Request.new.modify(:user => username, :alias => aliases)
  say response.detail
end
alias_ls(username) click to toggle source
# File lib/fusebox/cli.rb, line 28
def alias_ls (username)
  response = Fusebox::Request.new.reportmail(:user => username, :report_type => 'alias')
  if response.success?
    response.records.sort { |x,y| x[:email_name] <=> y[:email_name]}.each { |a| say a[:email_name] }
  else
    warn response.detail
  end
end
alias_rm(username, alias_address) click to toggle source
# File lib/fusebox/cli.rb, line 38
def alias_rm (username, alias_address)
  response = Fusebox::Request.new.removealias(:user => username, :alias => alias_address)
  say response.detail
end
domain_add(username, domain) click to toggle source
# File lib/fusebox/cli.rb, line 44
def domain_add (username, domain)
  username = "postmaster@#{username}" unless username =~ /@/
  response = Fusebox::Request.new.adddomain(:user => username, :domain => domain)
  say response.detail
end
domain_rm(domain) click to toggle source
# File lib/fusebox/cli.rb, line 52
def domain_rm (domain)
  if options[:force] || yes?("Are you sure you want to remove domain: #{domain}? [y/N]")
    response = Fusebox::Request.new.removedomain(:domain => domain, :confirm => true)
    say response.detail
  end
end
enable(username) click to toggle source
# File lib/fusebox/cli.rb, line 60
def enable (username)
  response = Fusebox::Request.new.enable(:user => username)
  say response.detail
end
get(username) click to toggle source

@todo Display account metadata from ‘report`

# File lib/fusebox/cli.rb, line 67
def get (username)
  username = "postmaster@#{username}" unless username =~ /@/
  response = Fusebox::Request.new.reportmail(:user => username)
  if response.success?
    say response.records.sort { |x,y| x[:email_name] <=> y[:email_name]}.to_ascii_table [:username, :internal_account_id, :email_type, :email_name, :email_destination], %w(Username ID Type Name Destination)
  else
    warn response.detail
  end
end
group_add(username, password = nil) click to toggle source
# File lib/fusebox/cli.rb, line 78
def group_add (username, password = nil)
  username = "postmaster@#{username}" unless username =~ /@/
  last, first = username.split /@/
  password ||= ActiveSupport::SecureRandom.hex
  response = Fusebox::Request.new.order(:account_type => 'standard', :user => username, :password => password, :first_name => first, :last_name => last)
  say response.detail
end
ls(username = 'all') click to toggle source

@todo add flag for ignoring terminated accounts

# File lib/fusebox/cli.rb, line 89
def ls (username = 'all')
  username = "postmaster@#{username}" unless username =~ /@/ || username == 'all'
  recursive = options[:recursive] || (username == 'all' ? false : true)
  response = Fusebox::Request.new.report(:user => username, :group_subaccount => recursive, :report_type => 'extended')
  if response.success?
    say response.records.sort { |x,y| x[:username] <=> y[:username]}.to_ascii_table([:username, :creation_date, :internal_account_id, :status, :disk_usage], %w(Username Created ID Status Disk))
  else
    warn response.detail
  end
end
passwd(username, password = nil) click to toggle source
# File lib/fusebox/cli.rb, line 101
def passwd (username, password = nil)
  password = ask "New Password:" unless password
  response = Fusebox::Request.new.modify(:user => username, :password => password)
  say response.detail
end
rename(old_username, new_username) click to toggle source
# File lib/fusebox/cli.rb, line 108
def rename (old_username, new_username)
  response = Fusebox::Request.new.changeusername(:user => old_username, :newuser => new_username)
  say response.detail
end
rm(username) click to toggle source
# File lib/fusebox/cli.rb, line 116
def rm (username)
  if options[:force] || yes?("Are you sure you want to remove user: #{username}? [y/N]")
    response = Fusebox::Request.new.terminate(:user => username, :purge => options[:purge])
    say response.detail
  else
    say "No action taken."
  end
end
suspend(username) click to toggle source
# File lib/fusebox/cli.rb, line 126
def suspend (username)
  response = Fusebox::Request.new.suspend(:user => username)
  say response.detail
end