From 492cfb06a3e0557956b600f0877cf36aff4e2961 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Tue, 18 Aug 2015 18:44:27 -0700 Subject: [PATCH] List tokens via GET /token --- lib/vmpooler/api/reroute.rb | 4 ++++ lib/vmpooler/api/v1.rb | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lib/vmpooler/api/reroute.rb b/lib/vmpooler/api/reroute.rb index e318a19..4f574a3 100644 --- a/lib/vmpooler/api/reroute.rb +++ b/lib/vmpooler/api/reroute.rb @@ -15,6 +15,10 @@ module Vmpooler call env.merge("PATH_INFO" => "/api/v#{api_version}/summary/#{params[:route]}/#{params[:key]}") end + get '/token/?' do + call env.merge("PATH_INFO" => "/api/v#{api_version}/token") + end + post '/token/?' do call env.merge("PATH_INFO" => "/api/v#{api_version}/token") end diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index 5a6c757..12eaaff 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -162,6 +162,40 @@ module Vmpooler JSON.pretty_generate(result) end + get "#{api_prefix}/token/?" do + content_type :json + + status 404 + result = { 'ok' => false } + + if Vmpooler::API.settings.config[:auth] + status 401 + + need_auth! + + backend.keys('vmpooler__token__*').each do |key| + data = backend.hgetall(key) + + if data['user'] == Rack::Auth::Basic::Request.new(request.env).username + token = key.split('__').last + + result[token] ||= {} + result[token]['created'] = data['timestamp'] + + result['ok'] = true + end + end + + if result['ok'] + status 200 + else + status 404 + end + end + + JSON.pretty_generate(result) + end + get "#{api_prefix}/token/:token/?" do content_type :json