module HaveAPI::Server::ServerHelpers
def access_control
def access_control return unless request.env['HTTP_ORIGIN'] && request.env['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] halt 200, { 'access-control-allow-origin' => '*', 'access-control-allow-methods' => 'GET,POST,OPTIONS,PATCH,PUT,DELETE', 'access-control-allow-credentials' => 'false', 'access-control-allow-headers' => settings.api_server.allowed_headers, 'access-control-max-age' => (60 * 60).to_s }, '' end
def api_version
def api_version @v end
def authenticate!(v)
def authenticate!(v) require_auth! unless authenticated?(v) end
def authenticated?(v)
def authenticated?(v) return @current_user if @current_user @current_user = settings.api_server.send(:do_authenticate, v, request) settings.api_server.call_hooks_for(:post_authenticated, args: [@current_user]) @current_user end
def base_url
def base_url scheme = if request.env['HTTP_X_FORWARDED_SSL'] == 'on' 'https' else request.env['rack.url_scheme'] end "#{scheme}://#{request.env['HTTP_HOST']}" end
def current_user
def current_user @current_user end
def doc(file)
def doc(file) markdown :"../../../doc/#{file}" end
def host
def host request.env['HTTP_HOST'].split(':').first end
def logout_url
def logout_url ret = url("#{root}_logout") ret.insert(ret.index('//') + 2, '_log:out@') end
def pretty_format(obj)
def pretty_format(obj) ret = '' PP.pp(obj, ret) end
def report_error(code, headers, msg)
def report_error(code, headers, msg) @halted = true content_type @formatter.content_type, charset: 'utf-8' halt code, headers, @formatter.format(false, nil, msg, version: false) end
def require_auth!
def require_auth! report_error( 401, { 'www-authenticate' => 'Basic realm="Restricted Area"' }, 'Action requires user to authenticate' ) end
def root
def root settings.api_server.root end
def setup_formatter
def setup_formatter return if @formatter @formatter = OutputFormatter.new unless @formatter.supports?(request.accept) @halted = true halt 406, "Not Acceptable\n" end content_type @formatter.content_type, charset: 'utf-8' end
def sort_hash(hash)
def sort_hash(hash) hash.sort { |a, b| a[0] <=> b[0] } end
def urlescape(v)
def urlescape(v) CGI.escape(v) end
def version
def version HaveAPI::VERSION end