module GoogleApps module Atom class User attr_reader :document def initialize new_doc add_header end # new_user adds the nodes necessary to create a new # user in Google Apps. new_user requires a username, # first name, last name and password. You can also # provide an optional quota argument, this will override # the default quota in Google Apps. # # new_user 'username', 'first_name', 'last_name', 'password', 1024 # # new_user returns the full XML document. def new_user(user_name, first, last, password, quota=nil) set_values suspended: 'false', username: user_name, password: password, first_name: first, last_name: last, quota: quota end # TODO: Document def set_values(values = {}) # Don't want to create login_node if nothing has been specified. @document.root << login_node(values[:suspended], values[:username], values[:password]) @document.root << quota_node(values[:quota]) if values[:quota] @document.root << name_node(values[:first_name], values[:last_name]) if values[:first_name] or values[:last_name] @document end # login_node adds an apps:login attribute to @document. # login_node takes a username and password as arguments # it is also possible to specify that the account be # suspended. # # login_node suspended, 'username', 'password' # # login_node returns an 'apps:login' LibXML::XML::Node def login_node(suspended = "false", user_name = nil, password = nil) login = Atom::XML::Node.new('apps:login') login['userName'] = user_name unless user_name.nil? login['password'] = OpenSSL::Digest::SHA1.hexdigest password unless password.nil? login['hashFunctionName'] = Atom::HASH_FUNCTION unless password.nil? suspended.nil? ? login['suspended'] = 'false' : login['suspended'] = suspended login end # quota_node adds an apps:quota attribute to @document. # quota_node takes an integer value as an argument. This # argument translates to the number of megabytes available # on the Google side. # # quota_node 1024 # # quota_node returns an 'apps:quota' LibXML::XML::Node def quota_node(limit) quota = Atom::XML::Node.new('apps:quota') quota['limit'] = limit.to_s quota end # name_node adds an apps:name attribute to @document. # name_node takes the first and last names as arguments. # # name_node 'first name', 'last name' # # name_node returns an apps:name LibXML::XML::Node def name_node(first = nil, last = nil) name = Atom::XML::Node.new('apps:name') name['familyName'] = last if last name['givenName'] = first if first name end # to_s returns @document as a string def to_s @document.to_s end private # new_doc re-initializes the XML document. def new_doc @document = Atom::XML::Document.new end def add_header @document.root = Atom::XML::Node.new('atom:entry') Atom::XML::Namespace.new(@document.root, 'atom', 'http://www.w3.org/2005/Atom') Atom::XML::Namespace.new(@document.root, 'apps', 'http://schemas.google.com/apps/2006') category = Atom::XML::Node.new('atom:category') category.attributes['scheme'] = 'http://schemas.google.com/g/2005#kind' category.attributes['term'] = 'http://schemas.google.com/apps/2006#user' @document.root << category end end end end