class Bosh::Director::Api::DatabaseUserManager

Public Instance Methods

authenticate(username, password) click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 10
def authenticate(username, password)
  # This is a dev-mode shortcut
  if Models::User.count == 0
    return username == "admin" && password == "admin"
  end

  user = find_by_name(username)
  BCrypt::Password.new(user.password) == password
rescue UserNotFound
  false
end
create_user(new_user) click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 26
def create_user(new_user)
  user = Models::User.new
  user.username = new_user.username
  if new_user.password
    user.password = BCrypt::Password.create(new_user.password).to_s
  end
  save_user(user)
  user
end
delete_user(username) click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 22
def delete_user(username)
  find_by_name(username).destroy
end
get_user_from_json(json_user) click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 43
def get_user_from_json(json_user)
  hash = JSON.parse(json_user)
  Models::User.new(:username => hash["username"],
    :password => hash["password"])
end
supports_api_update?() click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 6
def supports_api_update?
  true
end
update_user(updated_user) click to toggle source
# File lib/bosh/director/api/user/database_user_manager.rb, line 36
def update_user(updated_user)
  user = find_by_name(updated_user.username)
  user.password = BCrypt::Password.create(updated_user.password).to_s
  save_user(user)
  user
end

Private Instance Methods

find_by_name(name) click to toggle source

@param [String] name User name @return [Models::User] User

# File lib/bosh/director/api/user/database_user_manager.rb, line 53
def find_by_name(name)
  user = Models::User[:username => name]
  if user.nil?
    raise UserNotFound, "User '#{name}' doesn't exist"
  end
  user
end
save_user(user) click to toggle source

Saves user in DB and handles validation errors. @param [Models::User] @return [void]

# File lib/bosh/director/api/user/database_user_manager.rb, line 64
def save_user(user)
  user.save
rescue Sequel::ValidationFailed => e
  username_errors = e.errors.on(:username)
  if username_errors && username_errors.include?(:unique)
    raise UserNameTaken, "The username #{user.username} is already taken"
  end
  raise UserInvalid, "The user is invalid: #{e.errors.full_messages}"
end