Class: Socialcast::CommandLine::ProvisionUser

Inherits:
Object
  • Object
show all
Includes:
Provisioner
Defined in:
lib/socialcast/command_line/provision_user.rb

Constant Summary

Constants included from Provisioner

Socialcast::CommandLine::Provisioner::DEFAULT_OUTPUT_FILE

Instance Method Summary collapse

Methods included from Provisioner

#initialize

Instance Method Details

#each_user_hashObject



11
12
13
14
15
16
17
# File 'lib/socialcast/command_line/provision_user.rb', line 11

def each_user_hash
  each_ldap_connector do |connector|
    connector.each_user_hash do |user_hash|
      yield user_hash
    end
  end
end

#fetch_user_hash(identifier, options = {}) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/socialcast/command_line/provision_user.rb', line 19

def fetch_user_hash(identifier, options = {})
  each_ldap_connector do |connector|
    user_hash = connector.fetch_user_hash(identifier, options)
    return user_hash if user_hash
  end
  nil
end

#provisionObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/socialcast/command_line/provision_user.rb', line 27

def provision
  user_whitelist = Set.new
  output_file = File.join Dir.pwd, @options[:output]
  params = http_config.merge(:external_system => !!@options[:external_system])

  Zlib::GzipWriter.open(output_file) do |gz|
    xml = Builder::XmlMarkup.new(:target => gz, :indent => 1)
    xml.instruct!
    xml.export do |export|
      export.users(:type => "array") do |users|
        each_user_hash do |user_hash|
          users << user_hash.to_xml(:skip_instruct => true, :root => 'user')
          user_whitelist << [user_hash['contact_info'][LDAPConnector::EMAIL_ATTRIBUTE], user_hash[LDAPConnector::UNIQUE_IDENTIFIER_ATTRIBUTE], user_hash['employee_number']]
        end
      end # users
    end # export
  end # gzip

  if user_whitelist.empty? && !@options[:force]
    raise ProvisionError.new "Skipping upload to Socialcast since no users were found"
  else
    puts "Uploading dataset to Socialcast..."
    resource = Socialcast::CommandLine.resource_for_path '/api/users/provision', params
    begin
      File.open(output_file, 'r') do |file|
        request_params = {:file => file}
        request_params[:skip_emails] = 'true' if (@ldap_config.fetch('options', {})["skip_emails"] || @options[:skip_emails])
        request_params[:test] = 'true' if (@ldap_config.fetch('options', {})["test"] || @options[:test])
        resource.post request_params, :accept => :json
      end
    rescue RestClient::Unauthorized => e
      raise ProvisionError.new "Authenticated user either does not have administration privileges or the community is not configured to allow provisioning. Please contact Socialcast support to if you need help." if e.http_code == 401
    end
    puts "Finished"
  end
  File.delete(output_file) if (@ldap_config.fetch('options', {})['delete_users_file'] || @options[:delete_users_file])
end