Module: HaveAPI::Server::ServerHelpers

Defined in:
lib/haveapi/server.rb

Instance Method Summary collapse

Instance Method Details

#access_controlObject



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/haveapi/server.rb', line 59

def access_control
  if 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
end

#api_versionObject



131
132
133
# File 'lib/haveapi/server.rb', line 131

def api_version
  @v
end

#authenticate!(v) ⇒ Object



47
48
49
# File 'lib/haveapi/server.rb', line 47

def authenticate!(v)
  require_auth! unless authenticated?(v)
end

#authenticated?(v) ⇒ Boolean

Returns:



51
52
53
54
55
56
57
# File 'lib/haveapi/server.rb', line 51

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

#base_urlObject



108
109
110
111
112
113
114
115
116
117
# File 'lib/haveapi/server.rb', line 108

def base_url
  if request.env['HTTP_X_FORWARDED_SSL'] == 'on'
    scheme = 'https'

  else
    scheme = request.env['rack.url_scheme']
  end

  "#{scheme}://#{request.env['HTTP_HOST']}"
end

#current_userObject



71
72
73
# File 'lib/haveapi/server.rb', line 71

def current_user
  @current_user
end

#doc(file) ⇒ Object



104
105
106
# File 'lib/haveapi/server.rb', line 104

def doc(file)
  markdown :"../../../doc/#{file}"
end

#hostObject



119
120
121
# File 'lib/haveapi/server.rb', line 119

def host
  request.env['HTTP_HOST'].split(':').first
end

#logout_urlObject



99
100
101
102
# File 'lib/haveapi/server.rb', line 99

def logout_url
  ret = url("#{root}_logout")
  ret.insert(ret.index('//') + 2, '_log:out@')
end

#pretty_format(obj) ⇒ Object



75
76
77
78
# File 'lib/haveapi/server.rb', line 75

def pretty_format(obj)
  ret = ''
  PP.pp(obj, ret)
end

#report_error(code, headers, msg) ⇒ Object



88
89
90
91
92
93
# File 'lib/haveapi/server.rb', line 88

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

#require_auth!Object



80
81
82
83
84
85
86
# File 'lib/haveapi/server.rb', line 80

def require_auth!
  report_error(
    401,
    {'WWW-Authenticate' => 'Basic realm="Restricted Area"'},
    'Action requires user to authenticate'
  )
end

#rootObject



95
96
97
# File 'lib/haveapi/server.rb', line 95

def root
  settings.api_server.root
end

#setup_formatterObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/haveapi/server.rb', line 35

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

#sort_hash(hash) ⇒ Object



127
128
129
# File 'lib/haveapi/server.rb', line 127

def sort_hash(hash)
  hash.sort { |a, b| a[0] <=> b[0] }
end

#urlescape(v) ⇒ Object



123
124
125
# File 'lib/haveapi/server.rb', line 123

def urlescape(v)
  CGI.escape(v)
end

#versionObject



135
136
137
# File 'lib/haveapi/server.rb', line 135

def version
  HaveAPI::VERSION
end