From ed231cee871d7ac2beece003ce225bb427076db0 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 25 May 2013 15:16:42 +0800 Subject: [PATCH] [stormondemand|account] Add Account service and token APIs --- lib/fog/account.rb | 25 ++++++++ lib/fog/storm_on_demand/account.rb | 58 +++++++++++++++++++ .../storm_on_demand/models/account/token.rb | 23 ++++++++ .../storm_on_demand/models/account/tokens.rb | 20 +++++++ .../requests/account/create_token.rb | 16 +++++ .../requests/account/expire_token.rb | 16 +++++ 6 files changed, 158 insertions(+) create mode 100644 lib/fog/account.rb create mode 100644 lib/fog/storm_on_demand/account.rb create mode 100644 lib/fog/storm_on_demand/models/account/token.rb create mode 100644 lib/fog/storm_on_demand/models/account/tokens.rb create mode 100644 lib/fog/storm_on_demand/requests/account/create_token.rb create mode 100644 lib/fog/storm_on_demand/requests/account/expire_token.rb diff --git a/lib/fog/account.rb b/lib/fog/account.rb new file mode 100644 index 000000000..571d82025 --- /dev/null +++ b/lib/fog/account.rb @@ -0,0 +1,25 @@ +module Fog + module Account + + def self.[](provider) + self.new(:provider => provider) + end + + def self.new(attributes) + attributes = attributes.dup + provider = attributes.delete(:provider).to_s.downcase.to_sym + + if provider == :stormondemand + require 'fog/storm_on_demand/account' + Fog::Account::StormOnDemand.new(attributes) + else + raise ArgumentError.new("#{provider} has no account service") + end + end + + def self.providers + Fog.services[:account] + end + + end +end diff --git a/lib/fog/storm_on_demand/account.rb b/lib/fog/storm_on_demand/account.rb new file mode 100644 index 000000000..f41ef6f1e --- /dev/null +++ b/lib/fog/storm_on_demand/account.rb @@ -0,0 +1,58 @@ +require 'fog/storm_on_demand' +require 'fog/storm_on_demand/shared' +require 'fog/account' + +module Fog + module Account + + class StormOnDemand < Fog::Service + + requires :storm_on_demand_username, :storm_on_demand_password + recognizes :storm_on_demand_auth_url + + model_path 'fog/storm_on_demand/models/account' + model :token + collection :tokens + + request_path 'fog/storm_on_demand/requests/account' + request :create_token + request :expire_token + + class Mock + + def self.data + @data ||= Hash.new + end + + def self.reset + @data = nil + end + + def self.reset_data(keys=data.keys) + for key in [*keys] + data.delete(key) + end + end + + def initialize(options={}) + @storm_on_demand_username = options[:storm_on_demand_username] + end + + def data + self.class.data[@storm_on_demand_username] + end + + def reset_data + self.class.data.delete(@storm_on_demand_username) + end + + end + + class Real + + include Fog::StormOnDemand::RealShared + + end + end + end +end diff --git a/lib/fog/storm_on_demand/models/account/token.rb b/lib/fog/storm_on_demand/models/account/token.rb new file mode 100644 index 000000000..ec3d04c80 --- /dev/null +++ b/lib/fog/storm_on_demand/models/account/token.rb @@ -0,0 +1,23 @@ +require 'fog/core/model' + +module Fog + module Account + class StormOnDemand + + class Token < Fog::Model + attribute :token + attribute :expires + + def initialize(attributes={}) + super + end + + def expire + service.expire_token.body['expired'].to_i == 1 ? true : false + end + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/models/account/tokens.rb b/lib/fog/storm_on_demand/models/account/tokens.rb new file mode 100644 index 000000000..dd52966b5 --- /dev/null +++ b/lib/fog/storm_on_demand/models/account/tokens.rb @@ -0,0 +1,20 @@ +require 'fog/core/collection' +require 'fog/storm_on_demand/models/account/token' + +module Fog + module Account + class StormOnDemand + + class Tokens < Fog::Collection + model Fog::Account::StormOnDemand::Token + + def create(options={}) + t = service.create_token(options).body + new(t) + end + + end + + end + end +end diff --git a/lib/fog/storm_on_demand/requests/account/create_token.rb b/lib/fog/storm_on_demand/requests/account/create_token.rb new file mode 100644 index 000000000..8055f62d7 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/account/create_token.rb @@ -0,0 +1,16 @@ +module Fog + module Account + class StormOnDemand + class Real + + def create_token(options={}) + request( + :path => '/Account/Auth/token', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end diff --git a/lib/fog/storm_on_demand/requests/account/expire_token.rb b/lib/fog/storm_on_demand/requests/account/expire_token.rb new file mode 100644 index 000000000..24a8fb4a5 --- /dev/null +++ b/lib/fog/storm_on_demand/requests/account/expire_token.rb @@ -0,0 +1,16 @@ +module Fog + module Account + class StormOnDemand + class Real + + def expire_token(options={}) + request( + :path => '/Account/Auth/expireToken', + :body => Fog::JSON.encode(:params => options) + ) + end + + end + end + end +end