Project

General

Profile

Download (5.25 KB) Statistics
| Branch: | Tag: | Revision:
a9b44a39 Marc Dequènes (Duck)
#--
# LdapShadows, a Medium-level LDAP Access Library and Tool.
bc2c2691 Marc Dequènes (Duck)
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
a9b44a39 Marc Dequènes (Duck)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++

require 'active_support'
aa4e021c Marc Dequènes (Duck)
require 'ldap_shadows/manipulation_helper'
a9b44a39 Marc Dequènes (Duck)
bbb82941 Marc Dequènes (Duck)
module LdapShadows
a9b44a39 Marc Dequènes (Duck)
module Translator
I18n.default_locale = :en

def self.translate_object_name(obj_hdl)
I18n.t(obj_hdl, :scope => 'objects', :default => "Object '#{obj_hdl}'")
end

def self.translate_field_name(field_name)
if field_name.index(":")
type, key = field_name.split(":")
case type
when 'rel'
I18n.t(key, :scope => 'relations', :default => field_name)
else
raise "Cannot translate unknown data key type"
end
else
att = ActiveLdap::Base.schema.attribute(field_name)
I18n.t(att.human_attribute_name, :scope => 'attribute_types', :default => att.human_attribute_description)
end
end

def self.translate_aspect_name(aspect_name)
I18n.t(aspect_name, :scope => 'aspects', :default => "Aspect '#{aspect_name}'")
end
end

bbb82941 Marc Dequènes (Duck)
module Display
aa4e021c Marc Dequènes (Duck)
def self.display_fields(shadow, attr_data, options = {})
3fcc773e Marc Dequènes (Duck)
str_lines = []
bbb82941 Marc Dequènes (Duck)
attr_data.each_pair do |key, val|
af19cdc5 Marc Dequènes (Duck)
next if val[:expert] and not options[:expert]
b52f0f7d Marc Dequènes (Duck)
next if val[:admin] and not options[:admin]
f7217dcd Marc Dequènes (Duck)
a9b44a39 Marc Dequènes (Duck)
field_name = Translator.translate_field_name(key)
f7217dcd Marc Dequènes (Duck)
str = field_name
str += " [#{key}]" if options[:handles]
bc31521d Marc Dequènes (Duck)
if val[:value].nil?
str += " -> not set"
elsif val[:binary] and options[:skip_binary]
f7217dcd Marc Dequènes (Duck)
str += " -> #{val[:value].size} file(s) available"
else
aa4e021c Marc Dequènes (Duck)
str += ": " + (val[:multiple] ?
val[:value].sort.collect{|v| LdapShadows::Manipulation.interpret_field_value(shadow, val[:syntax], v).to_s }.join(", ") :
LdapShadows::Manipulation.interpret_field_value(shadow, val[:syntax], val[:value]).to_s)
f7217dcd Marc Dequènes (Duck)
end

3fcc773e Marc Dequènes (Duck)
str_lines << str
bbb82941 Marc Dequènes (Duck)
end
3fcc773e Marc Dequènes (Duck)
puts str_lines.sort.join("\n")
bbb82941 Marc Dequènes (Duck)
end

def self.display_item(item, options = {})
c331fe49 Marc Dequènes (Duck)
obj_human_name = Translator.translate_object_name(item.class.handle)
bbb82941 Marc Dequènes (Duck)
name = item.human_name
38e5c5db Marc Dequènes (Duck)
name += " [#{item.full_handle}]" if options[:handles]
bbb82941 Marc Dequènes (Duck)
puts "=== #{obj_human_name}: #{name} ==="

if options[:debug]
puts item.to_s
puts "--- Detected Info ---"
20a8dbf9 Marc Dequènes (Duck)
puts "aspects: " + item.aspects.keys.sort.join(", ")
bbb82941 Marc Dequènes (Duck)
puts "--- Relations ---"
item.relations.each do |rel|
3d58e226 Marc Dequènes (Duck)
rel_data = item.send(rel)
if rel_data.is_a? Enumerable
next if rel_data.empty?
rel_value = rel_data.collect{|g| g.name }.join(", ")
else
a987d14b Marc Dequènes (Duck)
# the exists? method also ensure the object is loaded
next unless rel_data.exists?
3d58e226 Marc Dequènes (Duck)
rel_value = rel_data.name
end
puts "#{rel}: " + rel_value
bbb82941 Marc Dequènes (Duck)
end
c30d4613 Marc Dequènes (Duck)
66ccfd46 Marc Dequènes (Duck)
if options[:show_family_members]
puts "--- Family ---"
puts "parent: " + item.family_parent_dn.to_s
puts "siblings: " + item.family_siblings_dn.join(", ")
puts "children: " + item.family_children_dn.join(", ")
end
bbb82941 Marc Dequènes (Duck)
else
f7217dcd Marc Dequènes (Duck)
obj_info, obj_aspects = item.organized_data
bbb82941 Marc Dequènes (Duck)
aa4e021c Marc Dequènes (Duck)
display_fields(item.class.shadow, obj_info, options)
bbb82941 Marc Dequènes (Duck)
obj_aspects.each_pair do |aspect_name, aspect_data|
7b2c50a8 Marc Dequènes (Duck)
name = Translator.translate_aspect_name(aspect_name)
name += " [#{aspect_name}]" if options[:handles]
puts "--- #{name} ---"
aa4e021c Marc Dequènes (Duck)
display_fields(item.class.shadow, aspect_data, options)
bbb82941 Marc Dequènes (Duck)
end
c30d4613 Marc Dequènes (Duck)
66ccfd46 Marc Dequènes (Duck)
if options[:show_family_members]
puts "--- Family ---"
738ce2f6 Marc Dequènes (Duck)
puts "parent: " + LdapShadows::Manipulation.raw_item_info(item.class.shadow, item.family_parent)[:name]
puts "siblings: " + item.family_siblings.collect{|raw_item| LdapShadows::Manipulation.raw_item_info(item.class.shadow, raw_item)[:name] }.join(", ")
puts "children: " + item.family_children.collect{|raw_item| LdapShadows::Manipulation.raw_item_info(item.class.shadow, raw_item)[:name] }.join(", ")
66ccfd46 Marc Dequènes (Duck)
end
bbb82941 Marc Dequènes (Duck)
end
end

af19cdc5 Marc Dequènes (Duck)
def self.display_item_list(title, item_list, options)
a24bc5b1 Marc Dequènes (Duck)
puts "=== #{title} (#{item_list.size}) ==="
item_list.each do |item|
str = item.human_name
38e5c5db Marc Dequènes (Duck)
str += " [#{item.full_handle}]" if options[:handles]
378df927 Marc Dequènes (Duck)
str += ": #{item.human_description}" unless item.human_description.empty?
a9b44a39 Marc Dequènes (Duck)
puts str
end
end

bbb82941 Marc Dequènes (Duck)
def self.display_hash_tree(tree, level)
tree.keys.sort.each do |key|
str = ""
str += " " + "| " * (level -1) + "+-- " if level > 0
str += "<#{key}>"
puts str

display_hash_tree(tree[key], level + 1) if tree[key]
end
end
end
end