mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
commit
9ae19e0d4d
3 changed files with 31 additions and 14 deletions
|
|
@ -15,7 +15,11 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_token(backend)
|
def validate_token(backend)
|
||||||
return if valid_token?(backend)
|
if valid_token?(backend)
|
||||||
|
backend.hset('vmpooler__token__' + request.env['HTTP_X_AUTH_TOKEN'], 'last', Time.now)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
content_type :json
|
content_type :json
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,6 @@ module Vmpooler
|
||||||
Vmpooler::API.settings.config[:pools]
|
Vmpooler::API.settings.config[:pools]
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_valid_token?
|
|
||||||
valid_token?(backend)
|
|
||||||
end
|
|
||||||
|
|
||||||
def need_auth!
|
def need_auth!
|
||||||
validate_auth(backend)
|
validate_auth(backend)
|
||||||
end
|
end
|
||||||
|
|
@ -180,7 +176,9 @@ module Vmpooler
|
||||||
token = key.split('__').last
|
token = key.split('__').last
|
||||||
|
|
||||||
result[token] ||= {}
|
result[token] ||= {}
|
||||||
result[token]['created'] = data['timestamp']
|
|
||||||
|
result[token]['created'] = data['created']
|
||||||
|
result[token]['last'] = data['last'] || 'never'
|
||||||
|
|
||||||
result['ok'] = true
|
result['ok'] = true
|
||||||
end
|
end
|
||||||
|
|
@ -255,7 +253,7 @@ module Vmpooler
|
||||||
result['token'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
result['token'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
||||||
|
|
||||||
backend.hset('vmpooler__token__' + result['token'], 'user', @auth.username)
|
backend.hset('vmpooler__token__' + result['token'], 'user', @auth.username)
|
||||||
backend.hset('vmpooler__token__' + result['token'], 'timestamp', Time.now)
|
backend.hset('vmpooler__token__' + result['token'], 'created', Time.now)
|
||||||
|
|
||||||
status 200
|
status 200
|
||||||
result['ok'] = true
|
result['ok'] = true
|
||||||
|
|
@ -307,7 +305,9 @@ module Vmpooler
|
||||||
backend.hset('vmpooler__active__' + key, vm, Time.now)
|
backend.hset('vmpooler__active__' + key, vm, Time.now)
|
||||||
backend.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
|
backend.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
|
||||||
|
|
||||||
if Vmpooler::API.settings.config[:auth] and has_valid_token?
|
if Vmpooler::API.settings.config[:auth] and has_token?
|
||||||
|
validate_token(backend)
|
||||||
|
|
||||||
backend.hset('vmpooler__vm__' + vm, 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
backend.hset('vmpooler__vm__' + vm, 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
||||||
backend.hset('vmpooler__vm__' + vm, 'token:user',
|
backend.hset('vmpooler__vm__' + vm, 'token:user',
|
||||||
backend.hget('vmpooler__token__' + request.env['HTTP_X_AUTH_TOKEN'], 'user')
|
backend.hget('vmpooler__token__' + request.env['HTTP_X_AUTH_TOKEN'], 'user')
|
||||||
|
|
@ -352,17 +352,17 @@ module Vmpooler
|
||||||
content_type :json
|
content_type :json
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
request = {}
|
payload = {}
|
||||||
|
|
||||||
params[:template].split('+').each do |template|
|
params[:template].split('+').each do |template|
|
||||||
request[template] ||= 0
|
payload[template] ||= 0
|
||||||
request[template] = request[template] + 1
|
payload[template] = payload[template] + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
available = 1
|
available = 1
|
||||||
|
|
||||||
request.keys.each do |template|
|
payload.keys.each do |template|
|
||||||
if backend.scard('vmpooler__ready__' + template) < request[template]
|
if backend.scard('vmpooler__ready__' + template) < payload[template]
|
||||||
available = 0
|
available = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -382,6 +382,19 @@ module Vmpooler
|
||||||
backend.hset('vmpooler__active__' + template, vm, Time.now)
|
backend.hset('vmpooler__active__' + template, vm, Time.now)
|
||||||
backend.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
|
backend.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
|
||||||
|
|
||||||
|
if Vmpooler::API.settings.config[:auth] and has_token?
|
||||||
|
validate_token(backend)
|
||||||
|
|
||||||
|
backend.hset('vmpooler__vm__' + vm, 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
|
||||||
|
backend.hset('vmpooler__vm__' + vm, 'token:user',
|
||||||
|
backend.hget('vmpooler__token__' + request.env['HTTP_X_AUTH_TOKEN'], 'user')
|
||||||
|
)
|
||||||
|
|
||||||
|
if config['vm_lifetime_auth'].to_i > 0
|
||||||
|
backend.hset('vmpooler__vm__' + vm, 'lifetime', config['vm_lifetime_auth'].to_i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
result[template] ||= {}
|
result[template] ||= {}
|
||||||
|
|
||||||
if result[template]['hostname']
|
if result[template]['hostname']
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ describe Vmpooler::API::V1 do
|
||||||
|
|
||||||
it 'returns a list of tokens if authed' do
|
it 'returns a list of tokens if authed' do
|
||||||
expect(redis).to receive(:keys).with('vmpooler__token__*').and_return(["vmpooler__token__abc"])
|
expect(redis).to receive(:keys).with('vmpooler__token__*').and_return(["vmpooler__token__abc"])
|
||||||
expect(redis).to receive(:hgetall).with('vmpooler__token__abc').and_return({"user" => "admin", "timestamp" => "now"})
|
expect(redis).to receive(:hgetall).with('vmpooler__token__abc').and_return({"user" => "admin", "created" => "now"})
|
||||||
|
|
||||||
authorize 'admin', 's3cr3t'
|
authorize 'admin', 's3cr3t'
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue