lib/chef-api/resources/user.rb in chef-api-0.2.0 vs lib/chef-api/resources/user.rb in chef-api-0.2.1

- old
+ new

@@ -1,11 +1,82 @@ module ChefAPI class Resource::User < Resource::Base collection_path '/users' schema do - attribute :name, type: String, primary: true, required: true + flavor :enterprise do + attribute :username, type: String, primary: true, required: true + + # "Vanity" attributes + attribute :first_name, type: String + attribute :middle_name, type: String + attribute :last_name, type: String + attribute :display_name, type: String + attribute :email, type: String + attribute :city, type: String + attribute :country, type: String + attribute :twitter_account, type: String + end + + flavor :open_source do + attribute :name, type: String, primary: true, required: true + end + attribute :admin, type: Boolean, default: false attribute :public_key, type: String + attribute :private_key, type: [String, Boolean], default: false + end + + has_many :organizations + + class << self + # + # @see Base.each + # + def each(prefix = {}, &block) + users = collection(prefix) + + # HEC/EC returns a slightly different response than OSC/CZ + if users.is_a?(Array) + users.each do |info| + name = URI.escape(info['user']['username']) + response = connection.get("/users/#{name}") + result = from_json(response, prefix) + + block.call(result) if block + end + else + users.each do |_, path| + response = connection.get(path) + result = from_json(response, prefix) + + block.call(result) if block + end + end + end + + # + # Authenticate a user with the given +username+ and +password+. + # + # @note Requires Enterprise Chef + # + # @example Authenticate a user + # User.authenticate(username: 'user', password: 'pass') + # #=> { "status" => "linked", "user" => { ... } } + # + # @param [Hash] options + # the list of options to authenticate with + # + # @option options [String] username + # the username to authenticate with + # @option options [String] password + # the plain-text password to authenticate with + # + # @return [Hash] + # the parsed JSON response from the server + # + def authenticate(options = {}) + connection.post('/authenticate_user', options) + end end end end