class Fog::Scaleway::Account::Mock
Constants
- ORGANIZATION
- ORGANIZATION_QUOTAS
- TIME_FORMAT
- TOKEN_PERMISSIONS
Public Class Methods
data()
click to toggle source
# File lib/fog/scaleway/account.rb, line 185 def self.data @data ||= Hash.new do |hash, token| hash[token] = { organizations: { ORGANIZATION['id'] => ORGANIZATION }, organization_quotas: Hash.new(ORGANIZATION_QUOTAS), tokens: {}, token_permissions: Hash.new(TOKEN_PERMISSIONS), users: { ORGANIZATION['users'][0]['id'] => ORGANIZATION['users'][0] } } end end
new(options)
click to toggle source
# File lib/fog/scaleway/account.rb, line 197 def initialize(options) @token = options[:scaleway_token] @email = options[:scaleway_email] end
reset()
click to toggle source
# File lib/fog/scaleway/account.rb, line 202 def self.reset @data = nil end
Public Instance Methods
create_token(options = {})
click to toggle source
# File lib/fog/scaleway/requests/account/create_token.rb, line 21 def create_token(options = {}) if @email.nil? raise ArgumentError, 'email is required to create a token' end body = { email: @email } body.merge!(options) body = jsonify(body) user = data[:users].values.find do |u| u['email'] == body['email'] end raise_invalid_auth('Invalid credentials') unless user expires = nil if body['expires'] != false expires = (Time.now + 30 * 60).utc.strftime(TIME_FORMAT) end token = { 'user_id' => user['id'], 'description' => body['description'] || '', 'roles' => { 'organization' => nil, 'role' => nil }, 'expires' => expires, 'creation_date' => now, 'inherits_user_perms' => true, 'id' => Fog::UUID.uuid } data[:tokens][token['id']] = token response(status: 201, body: { 'token' => token }) end
delete_token(token_id)
click to toggle source
# File lib/fog/scaleway/requests/account/delete_token.rb, line 11 def delete_token(token_id) token = lookup(:tokens, token_id) data[:tokens].delete(token['id']) response(status: 204) end
get_organization(organization_id)
click to toggle source
# File lib/fog/scaleway/requests/account/get_organization.rb, line 11 def get_organization(organization_id) organization = lookup(:organizations, organization_id) response(status: 200, body: { 'organization' => organization }) end
get_organization_quotas(organization_id)
click to toggle source
# File lib/fog/scaleway/requests/account/get_organization_quotas.rb, line 11 def get_organization_quotas(organization_id) organization = lookup(:organizations, organization_id) quotas = lookup(:organization_quotas, organization['id']) response(status: 200, body: { 'quotas' => quotas }) end
get_token(token_id)
click to toggle source
# File lib/fog/scaleway/requests/account/get_token.rb, line 11 def get_token(token_id) token = lookup(:tokens, token_id) response(status: 200, body: { 'token' => token }) end
get_token_permission(token_id)
click to toggle source
# File lib/fog/scaleway/requests/account/get_token_permissions.rb, line 11 def get_token_permission(token_id) token = lookup(:tokens, token_id) permissions = lookup(:token_permissions, token['id']) response(status: 200, body: { 'permissions' => permissions }) end
get_user(user_id)
click to toggle source
# File lib/fog/scaleway/requests/account/get_user.rb, line 11 def get_user(user_id) user = lookup(:users, user_id) response(status: 200, body: { 'user' => user }) end
list_organizations()
click to toggle source
# File lib/fog/scaleway/requests/account/list_organizations.rb, line 11 def list_organizations organizations = data[:organizations].values response(status: 200, body: { 'organizations' => organizations }) end
list_tokens()
click to toggle source
# File lib/fog/scaleway/requests/account/list_tokens.rb, line 11 def list_tokens tokens = data[:tokens].values response(status: 200, body: { 'tokens' => tokens }) end
update_token(token_id, options = {})
click to toggle source
# File lib/fog/scaleway/requests/account/update_token.rb, line 14 def update_token(token_id, options = {}) options = jsonify(options) token = lookup(:tokens, token_id) token['description'] = options['description'] unless options['description'].nil? token['expires'] = (Time.now + 30 * 60).utc.strftime(TIME_FORMAT) response(status: 200, body: { 'token' => token }) end
update_user(user_id, options = {})
click to toggle source
# File lib/fog/scaleway/requests/account/update_user.rb, line 14 def update_user(user_id, options = {}) options = jsonify(options) user = lookup(:users, user_id) %w[firstname lastname].each do |attr| user[attr] = options[attr] if options.key?(attr) end user['fullname'] = [user['firstname'], user['lastname']].compact.join(' ') if (ssh_public_keys = options['ssh_public_keys']) user['ssh_public_keys'] = ssh_public_keys.map do |key| { 'key' => key['key'], 'fingerprint' => generate_fingerprint(key['key']) } end end response(status: 200, body: { 'user' => user }) end
Private Instance Methods
data()
click to toggle source
# File lib/fog/scaleway/account.rb, line 208 def data self.class.data[@token] end
decode_body(response)
click to toggle source
# File lib/fog/scaleway/account.rb, line 242 def decode_body(response) body = response.body content_type = response.headers['Content-Type'] if !body.nil? && !body.empty? && content_type =~ %r{application/json.*}i Fog::JSON.decode(body) else body end end
decode_public_key(key)
click to toggle source
# File lib/fog/scaleway/account.rb, line 290 def decode_public_key(key) type, *nums = unpack_public_key(key) [type] + nums.map { |n| OpenSSL::BN.new(n, 2) } end
encode_body(params)
click to toggle source
# File lib/fog/scaleway/account.rb, line 229 def encode_body(params) body = params[:body] content_type = params[:headers]['Content-Type'] if body.nil? || body.is_a?(String) body elsif content_type =~ %r{application/json.*}i Fog::JSON.encode(body) else body.to_s end end
generate_fingerprint(ssh_public_key)
click to toggle source
# File lib/fog/scaleway/account.rb, line 273 def generate_fingerprint(ssh_public_key) require 'base64' require 'digest/md5' type, key, comment = ssh_public_key.split(' ', 3) unless type == 'ssh-rsa' raise ArgumentError, "Unsupported public key format: #{type}" end size = decode_public_key(Base64.decode64(key)).last.num_bytes * 8 fingerprint = Digest::MD5.hexdigest(Base64.decode64(key)).scan(/../).join(':') "#{size} #{fingerprint} #{comment} (RSA)" end
jsonify(value)
click to toggle source
# File lib/fog/scaleway/account.rb, line 269 def jsonify(value) Fog::JSON.decode(Fog::JSON.encode(value)) end
lookup(type, id)
click to toggle source
# File lib/fog/scaleway/account.rb, line 212 def lookup(type, id) data[type][id] || raise_unknown_resource(id) end
now()
click to toggle source
# File lib/fog/scaleway/account.rb, line 265 def now Time.now.utc.strftime(TIME_FORMAT) end
raise_invalid_auth(message)
click to toggle source
# File lib/fog/scaleway/account.rb, line 257 def raise_invalid_auth(message) raise Fog::Scaleway::Account::InvalidAuth, message end
raise_invalid_request_error(message)
click to toggle source
# File lib/fog/scaleway/account.rb, line 253 def raise_invalid_request_error(message) raise Fog::Scaleway::Account::InvalidRequestError, message end
raise_unknown_resource(id)
click to toggle source
# File lib/fog/scaleway/account.rb, line 261 def raise_unknown_resource(id) raise Fog::Scaleway::Account::UnknownResource, "\"#{id}\" not found" end
response(params)
click to toggle source
# File lib/fog/scaleway/account.rb, line 216 def response(params) params[:headers] ||= {} params[:headers]['Content-Type'] ||= 'application/json' params[:body] = encode_body(params) response = Excon::Response.new(params) response.body = decode_body(response) response end
unpack_public_key(key)
click to toggle source
# File lib/fog/scaleway/account.rb, line 295 def unpack_public_key(key) vs = [] until key.empty? n, key = key.unpack('Na*') v, key = key.unpack("a#{n}a*") vs << v end vs end