diff options
Diffstat (limited to 'chef/lib/chef/openid_registration.rb')
-rw-r--r-- | chef/lib/chef/openid_registration.rb | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/chef/lib/chef/openid_registration.rb b/chef/lib/chef/openid_registration.rb index f7bb9595d9..7af720cabd 100644 --- a/chef/lib/chef/openid_registration.rb +++ b/chef/lib/chef/openid_registration.rb @@ -6,9 +6,9 @@ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,18 +19,16 @@ require 'chef/config' require 'chef/mixin/params_validate' require 'chef/couchdb' -require 'chef/index_queue' require 'digest/sha1' require 'chef/json_compat' class Chef class OpenIDRegistration - + attr_accessor :name, :salt, :validated, :password, :couchdb_rev, :admin - + include Chef::Mixin::ParamsValidate - include Chef::IndexQueue::Indexable - + DESIGN_DOCUMENT = { "version" => 3, "language" => "javascript", @@ -77,7 +75,7 @@ class Chef }, }, } - + # Create a new Chef::OpenIDRegistration object. def initialize() @name = nil @@ -88,18 +86,18 @@ class Chef @couchdb_rev = nil @couchdb = Chef::CouchDB.new end - + def name=(n) @name = n.gsub(/\./, '_') end - + # Set the password for this object. - def set_password(password) + def set_password(password) @salt = generate_salt - @password = encrypt_password(@salt, password) + @password = encrypt_password(@salt, password) end - - # Serialize this object as a hash + + # Serialize this object as a hash def to_json(*a) attributes = Hash.new recipes = Array.new @@ -115,7 +113,7 @@ class Chef result["_rev"] = @couchdb_rev if @couchdb_rev result.to_json(*a) end - + # Create a Chef::Node from JSON def self.json_create(o) me = new @@ -127,7 +125,7 @@ class Chef me.couchdb_rev = o["_rev"] if o.has_key?("_rev") me end - + # List all the Chef::OpenIDRegistration objects in the CouchDB. If inflate is set to true, you will get # the full list of all registration objects. Otherwise, you'll just get the IDs def self.list(inflate=false) @@ -138,50 +136,50 @@ class Chef rs["rows"].collect { |r| r["key"] } end end - + def self.cdb_list(*args) list(*args) end - + # Load an OpenIDRegistration by name from CouchDB def self.load(name) Chef::CouchDB.new.load("openid_registration", name) end - + # Whether or not there is an OpenID Registration with this key. def self.has_key?(name) Chef::CouchDB.new.has_key?("openid_registration", name) end - + # Remove this OpenIDRegistration from the CouchDB def destroy @couchdb.delete("openid_registration", @name, @couchdb_rev) end - + # Save this OpenIDRegistration to the CouchDB def save results = @couchdb.store("openid_registration", @name, self) @couchdb_rev = results["rev"] end - + # Set up our CouchDB design document def self.create_design_document(couchdb=nil) couchdb ||= Chef::CouchDB.new couchdb.create_design_document("registrations", DESIGN_DOCUMENT) end - + protected - + def generate_salt salt = Time.now.to_s chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a 1.upto(30) { |i| salt << chars[rand(chars.size-1)] } salt end - + def encrypt_password(salt, password) Digest::SHA1.hexdigest("--#{salt}--#{password}--") end - + end end |