67 lines
1.7 KiB
Ruby
67 lines
1.7 KiB
Ruby
require "json"
|
|
require 'sinatra/base'
|
|
require "sinatra/json"
|
|
require "db/mongo/models/statistic"
|
|
|
|
module Devops
|
|
module API3
|
|
module Helpers
|
|
|
|
include Sinatra::JSON
|
|
|
|
def create_response msg, obj=nil, rstatus=200
|
|
logger.info(msg)
|
|
status rstatus
|
|
obj = {} if obj.nil?
|
|
obj[:message] = msg
|
|
json(obj)
|
|
end
|
|
|
|
def halt_response msg, rstatus=400
|
|
obj = {:message => msg}
|
|
halt(rstatus, json(obj))
|
|
end
|
|
|
|
def check_provider provider
|
|
list = ::Provider.providers
|
|
halt_response("Invalid provider '#{provider}', available providers: '#{list.join("', '")}'", 400) unless list.include?(provider)
|
|
end
|
|
|
|
def check_provider_account provider, account
|
|
halt_response("Provider acount '#{account}' not found", 400) if ::Provider.get_connector(provider, account).nil?
|
|
end
|
|
|
|
def check_policy policy
|
|
return unless policy
|
|
user = request.env['USER']
|
|
user.check_policy(policy)
|
|
end
|
|
|
|
# Save information about requests with methods POST, PUT, DELETE
|
|
def insert_statistic msg=nil
|
|
unless request.get?
|
|
return if response.status == 401 and request.env['REMOTE_USER'].nil?
|
|
# parse body
|
|
request.body.rewind
|
|
raw_body = request.body.read
|
|
body = begin
|
|
::JSON.parse(raw_body)
|
|
rescue ::JSON::ParserError
|
|
raw_body
|
|
end
|
|
|
|
Devops::Model::Statistic.create({
|
|
user: request.env['REMOTE_USER'],
|
|
path: request.path,
|
|
method: request.request_method,
|
|
body: body,
|
|
response_code: response.status
|
|
})
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|