1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

Handle host specification on database users

This commit is contained in:
Evan Light 2014-08-13 14:22:23 -04:00
parent 1a934826f6
commit fc242385f6
5 changed files with 35 additions and 8 deletions

View file

@ -23,14 +23,12 @@ module Fog
def grant_access_for(user)
requires :identity, :instance
user_name = user.respond_to?(:name) ? user.name : user
service.grant_user_access(instance.identity, user_name, name)
service.grant_user_access(instance.identity, user, name)
end
def revoke_access_for(user)
requires :identity, :instance
user_name = user.respond_to?(:name) ? user.name : user
service.revoke_user_access(instance.identity, user_name, name)
service.revoke_user_access(instance.identity, user, name)
end

View file

@ -8,6 +8,11 @@ module Fog
attribute :password
attribute :databases
attribute :host
def initialize(params = {})
super
end
def save
requires :identity, :instance, :password

View file

@ -15,6 +15,8 @@ module Fog
def get(user_name)
data = retrieve_users.find { |database| database['name'] == user_name }
require 'pry'
binding.pry
data && new(data)
end

View file

@ -2,7 +2,18 @@ module Fog
module Rackspace
class Databases
class Real
def grant_user_access(instance_id, user_name, *databases)
def grant_user_access(instance_id, user, *databases)
user =
if user.respond_to?(:name) && user.respond_to?(:host)
if user.host == '%'
user.name
else
"#{user.name}@#{user.host}"
end
else
user
end
data = { :databases => [] }
databases.each do |db_name|
data[:databases] << { :name => db_name }
@ -12,7 +23,7 @@ module Fog
:body => Fog::JSON.encode(data),
:expects => 202,
:method => 'PUT',
:path => "instances/#{instance_id}/users/#{user_name}/databases"
:path => "instances/#{instance_id}/users/#{user}/databases"
)
end
end

View file

@ -2,11 +2,22 @@ module Fog
module Rackspace
class Databases
class Real
def revoke_user_access(instance_id, user_name, database)
def revoke_user_access(instance_id, user, database)
user =
if user.respond_to?(:name) && user.respond_to?(:host)
if user.host == '%'
user.name
else
"#{user.name}@#{user.host}"
end
else
user
end
request(
:expects => 202,
:method => 'DELETE',
:path => "instances/#{instance_id}/users/#{user_name}/databases/#{database}"
:path => "instances/#{instance_id}/users/#{user}/databases/#{database}"
)
end
end