Class: Micropub::Server::Rails::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/micropub/server/rails/middleware.rb

Defined Under Namespace

Classes: HTTPError

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



13
14
15
# File 'lib/micropub/server/rails/middleware.rb', line 13

def initialize(app)
  @app = app
end

Instance Method Details

#auth_token(env) ⇒ Object



37
38
39
40
# File 'lib/micropub/server/rails/middleware.rb', line 37

def auth_token(env)
  input = env["HTTP_AUTHORIZATION"] || @params["access_token"] || ""
  input.split("Bearer ").last
end

#call(env) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/micropub/server/rails/middleware.rb', line 17

def call(env)
  begin
    @params = request(env).params
    @headers = {"Content-Type" => "text/plain; charset=utf-8"}
    if env["PATH_INFO"] == "/micropub"
      check_token(env)
      micropub_call env
    else
      @app.call env
    end
  rescue
    error_response(401)
  end
end

#check_token(env) ⇒ Object



32
33
34
35
# File 'lib/micropub/server/rails/middleware.rb', line 32

def check_token(env)
  token = Micropub::Token.new(auth_token(env))
  raise HTTPError.new env, 401 if !token.valid?
end

#error_response(status) ⇒ Object



58
59
60
# File 'lib/micropub/server/rails/middleware.rb', line 58

def error_response(status)
  [status, {}, [""]]
end

#micropub_call(env) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/micropub/server/rails/middleware.rb', line 42

def micropub_call(env)
  router = Micropub::Homesteading::Router.new(@params)
  client = Micropub::Client.new(router.as, token: auth_token(env))
  response = client.post(@params.except("access_token"))

  raise HTTPError.new env, response.status if !response.successful?

  @headers["Location"] = response.location

  success_response
end

#request(env) ⇒ Object



62
63
64
# File 'lib/micropub/server/rails/middleware.rb', line 62

def request(env)
  Rack::Request.new(env)
end

#success_responseObject



54
55
56
# File 'lib/micropub/server/rails/middleware.rb', line 54

def success_response
  [201, @headers, [""]]
end