micropub-server-rails 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0d1797707cb23260c584285b9b401db7e802902
4
- data.tar.gz: ef87798788f594ea0e26892207ed1a429a450bc8
3
+ metadata.gz: 3fc8a92467ed79dba67eb9424cedaaefd85ce092
4
+ data.tar.gz: a96aad15017c7aafbee089e8086faebdeb7e745e
5
5
  SHA512:
6
- metadata.gz: c44ee546e070a5e8025fc93c5ea116d439c96656349ac56a7f56ee1c154dfbf96dc2780829fa389b3ce3b8b5e2a7a0bf4c4b2cfb3ca322ba1769ec03fdc98465
7
- data.tar.gz: ca8916c1f7381db0199d13acd9ed6a0bbeb90c61971fcbcd18da6eedfa667d2f2da3a2165c3f95c68023eda7635367baa5455c3523bd9869dcf8c872bf1f13d9
6
+ metadata.gz: ad32670e1f9ac91e4de8e2254617624bde56a05226c63df2d9b46dcd9093f64b12466cf0a901c9ce81ffbe1b5f92b11aae4daa819d0459607f39f2e4ac71f550
7
+ data.tar.gz: 1d53540d13575eba42cf6efe68bdc6874d1f06aab6d1cfd42af39401d81aa8cb9a16fec220d5552c2c488815bc63f9484a9a9a1b7c6179097377f16cdf844e12
@@ -0,0 +1,15 @@
1
+ module Micropub::Homesteading
2
+ class Router
3
+ H_MAP = {
4
+ "entry" => "note"
5
+ }
6
+ attr_reader :as
7
+ def initialize(params={})
8
+ @as = params["as"] || h_map(params["h"])
9
+ end
10
+
11
+ def h_map(h)
12
+ H_MAP[h]
13
+ end
14
+ end
15
+ end
@@ -2,45 +2,66 @@ require 'micropub'
2
2
 
3
3
  module Micropub::Server::Rails
4
4
  class Middleware
5
+ class HTTPError < StandardError
6
+ def initialize(env, status, body="")
7
+ @env = env
8
+ @status = status
9
+ @body = body
10
+ end
11
+ end
12
+
5
13
  def initialize(app)
6
14
  @app = app
7
15
  end
8
16
 
9
17
  def call(env)
10
- if env["PATH_INFO"] == "/micropub"
11
- token = Micropub::Token.new(auth_token(env))
12
- token.valid? ? response : error_response
13
- else
14
- @app.call env
18
+ begin
19
+ @params = request(env).params
20
+ @headers = {"Content-Type" => "text/plain; charset=utf-8"}
21
+ if env["PATH_INFO"] == "/micropub"
22
+ check_token(env)
23
+ micropub_call env
24
+ else
25
+ @app.call env
26
+ end
27
+ rescue
28
+ error_response(401)
15
29
  end
16
30
  end
17
31
 
32
+ def check_token(env)
33
+ token = Micropub::Token.new(auth_token(env))
34
+ raise HTTPError.new env, 401 if !token.valid?
35
+ end
36
+
18
37
  def auth_token(env)
19
- input = env["HTTP_AUTHORIZATION"] || request(env).params["access_token"] || ""
38
+ input = env["HTTP_AUTHORIZATION"] || @params["access_token"] || ""
20
39
  input.split("Bearer ").last
21
40
  end
22
41
 
23
- def response
24
- [201, headers, body]
42
+ def micropub_call(env)
43
+ router = Micropub::Homesteading::Router.new(@params)
44
+ client = Micropub::Client.new(router.as, token: auth_token(env))
45
+ response = client.post(@params.except("access_token"))
46
+
47
+ raise HTTPError.new env, response.status if !response.successful?
48
+
49
+ @headers["Location"] = response.location
50
+
51
+ success_response
25
52
  end
26
53
 
27
- def error_response
28
- [401, {}, body]
54
+ def success_response
55
+ [201, @headers, [""]]
29
56
  end
30
57
 
31
- def body
32
- [""]
58
+ def error_response(status)
59
+ [status, {}, [""]]
33
60
  end
34
61
 
35
62
  def request(env)
36
63
  Rack::Request.new(env)
37
64
  end
38
65
 
39
- def headers
40
- {
41
- "Location" => "http://bookisworthy.com/posts/1",
42
- "Content-Type" => "text/plain; charset=utf-8"
43
- }
44
- end
45
66
  end
46
67
  end
@@ -1,7 +1,7 @@
1
1
  module Micropub
2
2
  module Server
3
3
  module Rails
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
6
6
  end
7
7
  end
@@ -1,4 +1,5 @@
1
1
  require "micropub/server/rails/version"
2
+ require "micropub/homesteading/router"
2
3
 
3
4
  module Micropub
4
5
  module Server
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec"
24
24
  spec.add_development_dependency "rack-test"
25
+ spec.add_development_dependency "webmock"
25
26
 
26
- spec.add_dependency "micropub", "~> 0.0.3"
27
+ spec.add_dependency "micropub", "~> 0.0.6"
27
28
  end
@@ -0,0 +1,15 @@
1
+ require "micropub/homesteading/router"
2
+
3
+ describe Micropub::Homesteading::Router do
4
+ describe "#as" do
5
+ it "uses the as attr to set as" do
6
+ router = Micropub::Homesteading::Router.new("as" => "note")
7
+ expect(router.as).to eq "note"
8
+ end
9
+
10
+ it "can use h to convert the type" do
11
+ router = Micropub::Homesteading::Router.new("h" => "entry")
12
+ expect(router.as).to eq "note"
13
+ end
14
+ end
15
+ end
@@ -1,6 +1,10 @@
1
1
  require "micropub/server/rails/middleware"
2
+ require 'webmock/rspec'
2
3
  require "rack/test"
3
4
 
5
+ # How do we determine what host to hit?
6
+ # Where does the code go which tells the mapping how to notes to work?
7
+
4
8
  Micropub.configure do |c|
5
9
  c.token_endpoint = "https://tokens.indieauth.com/token"
6
10
  c.me = "http://bookisworthy.com"
@@ -25,21 +29,50 @@ describe Micropub::Server::Rails::Middleware do
25
29
  before do
26
30
  expect(Micropub::Token).to receive(:new).with("1234").and_return(token)
27
31
  end
32
+
33
+ context "when publisher returns 401" do
34
+ let(:request) { post "/micropub", {content: "Blah Blah", "as" => "note"}, "HTTP_AUTHORIZATION" => "Bearer 1234" }
35
+ let(:token) { double("Token", valid?: true) }
36
+
37
+ before do
38
+ stub_request(:post, "http://bookisworthy.com/notes").with(
39
+ body: {content: "Blah Blah", as: "note"},
40
+ headers: { 'Authorization' => "Bearer 1234" })
41
+ .to_return(status: 401, body: "", headers: {})
42
+ end
43
+
44
+ it "returns a 401" do
45
+ request
46
+ expect(last_response.status).to eq 401
47
+ end
48
+ end
49
+
28
50
  context "when given a valid token" do
29
51
  let(:token) { double("Token", valid?: true) }
30
52
 
53
+ # params "as" stands for "activity stream"
54
+ # this is the experimental value to indicate the post type
55
+ let(:request) { post "/micropub", {content: "Blah Blah", "as" => "note"}, "HTTP_AUTHORIZATION" => "Bearer 1234" }
56
+
57
+ before do
58
+ stub_request(:post, "http://bookisworthy.com/notes").with(
59
+ body: {content: "Blah Blah", as: "note"},
60
+ headers: { 'Authorization' => "Bearer 1234" })
61
+ .to_return(status: 201, body: "http://bookisworthy.com/notes/1", headers: {"Location" => "http://bookisworthy.com/notes/1"})
62
+ end
63
+
31
64
  it "returns a 201" do
32
- post "/micropub", {}, "HTTP_AUTHORIZATION" => "Bearer 1234"
65
+ request
33
66
  expect(last_response.status).to eq 201
34
67
  end
35
68
 
36
69
  it "returns a Location header" do
37
- post "/micropub", {}, "HTTP_AUTHORIZATION" => "Bearer 1234"
38
- expect(last_response.header["Location"]).to eq "http://bookisworthy.com/posts/1"
70
+ request
71
+ expect(last_response.header["Location"]).to eq "http://bookisworthy.com/notes/1"
39
72
  end
40
73
 
41
74
  it "with params access_token returns a 201" do
42
- post "/micropub", {access_token: 1234}
75
+ post "/micropub", {content: "Blah Blah", access_token: 1234, as: "note"}
43
76
  expect(last_response.status).to eq 201
44
77
  end
45
78
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: micropub-server-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Becker
@@ -67,20 +67,34 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: webmock
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: micropub
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - "~>"
75
89
  - !ruby/object:Gem::Version
76
- version: 0.0.3
90
+ version: 0.0.6
77
91
  type: :runtime
78
92
  prerelease: false
79
93
  version_requirements: !ruby/object:Gem::Requirement
80
94
  requirements:
81
95
  - - "~>"
82
96
  - !ruby/object:Gem::Version
83
- version: 0.0.3
97
+ version: 0.0.6
84
98
  description: Micropub Railtie
85
99
  email:
86
100
  - veganstraightedge@gmail.com
@@ -99,11 +113,13 @@ files:
99
113
  - Rakefile
100
114
  - bin/console
101
115
  - bin/setup
116
+ - lib/micropub/homesteading/router.rb
102
117
  - lib/micropub/server/rails.rb
103
118
  - lib/micropub/server/rails/middleware.rb
104
119
  - lib/micropub/server/rails/railtie.rb
105
120
  - lib/micropub/server/rails/version.rb
106
121
  - micropub-server-rails.gemspec
122
+ - spec/lib/micropub/homesteading/router_spec.rb
107
123
  - spec/lib/micropub/server/rails/middleware_spec.rb
108
124
  homepage:
109
125
  licenses:
@@ -130,4 +146,5 @@ signing_key:
130
146
  specification_version: 4
131
147
  summary: Micropub Railtie
132
148
  test_files:
149
+ - spec/lib/micropub/homesteading/router_spec.rb
133
150
  - spec/lib/micropub/server/rails/middleware_spec.rb