micropub 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1707513fbda748e1c7e715c635ae7aefda40960
4
- data.tar.gz: 03ab0ba09479296f4f4914c46d311b18cf6b084c
3
+ metadata.gz: 84b70a92a9926bd8f8142b17204cbbc9f59cc962
4
+ data.tar.gz: 34546caa3bec8a6f2d209f0e9978780113d8c8ce
5
5
  SHA512:
6
- metadata.gz: c3b1447bab9380b45aa225642fa058677dc4808b5746c1fb80c4400d0638a346d9db71224533bf0c56cdb52aa1aa258ce5da2cdf319d862ed4173db09fabcfeb
7
- data.tar.gz: aa94b60d86c98eac99eddf528f42959df7bf2b0825a971bd24a365cbdf6e97551773f8a49de7b5cf377f2a4a2804c797ab4b248b165685f2c31dc595d1688601
6
+ metadata.gz: 5c97ae53cd79c89b22caab696419a7e03a5de10f4a02dbc906408074e96867b0f618ac90b953e3e51fa1dc2aa805652c3bca8a5e6a3bea438119e08b12232070
7
+ data.tar.gz: e1da3bf25030af7226d0a516ae0f836763208a3c3644e8f60ab1847f4715ed2ac3c3648440728bcff06c9aa6b8cb7cf6937aaa415c534711695356a9a72a000e
data/.travis.yml ADDED
@@ -0,0 +1,2 @@
1
+ notifications:
2
+ email: false
data/README.md CHANGED
@@ -22,6 +22,12 @@ Or install it yourself as:
22
22
 
23
23
  TODO: Write usage instructions here
24
24
 
25
+ ## TODO
26
+
27
+ - Clean up specs
28
+ - Add error handling
29
+ - Clean up Token
30
+
25
31
  ## Contributing
26
32
 
27
33
  1. Fork it ( https://github.com/[my-github-username]/micropub/fork )
@@ -0,0 +1,10 @@
1
+ module Micropub
2
+ class Configuration
3
+ attr_accessor :token_endpoint, :allowed_scopes
4
+ attr_reader :me
5
+
6
+ def me=(uri)
7
+ @me = URI.parse(uri)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,55 @@
1
+ require 'httpclient'
2
+ require 'cgi'
3
+
4
+ module Micropub
5
+ class ValidationError < StandardError;end
6
+
7
+ class Token
8
+ def initialize(token)
9
+ @token = token
10
+ end
11
+
12
+ def valid?
13
+ begin
14
+ valid_host? &&
15
+ valid_scope?
16
+ rescue ValidationError
17
+ false
18
+ end
19
+ end
20
+
21
+ def valid_scope?
22
+ (config.allowed_scopes & scope).any?
23
+ end
24
+
25
+ def valid_host?
26
+ me.host == config.me.host
27
+ end
28
+
29
+ def scope
30
+ response["scope"].split(",").map(&:to_sym)
31
+ end
32
+
33
+ def me
34
+ begin
35
+ URI.parse(response["me"])
36
+ rescue URI::InvalidURIError
37
+ raise ValidationError, "The token endpoint did not contain a valid 'me' URI"
38
+ end
39
+ end
40
+
41
+ def response
42
+ @response ||= begin
43
+ URI::decode_www_form(request.body).to_h
44
+ end
45
+ end
46
+
47
+ def request
48
+ HTTPClient.get(config.token_endpoint, {}, {'Authorization' => "Bearer #{@token}"})
49
+ end
50
+
51
+ def config
52
+ Micropub.configuration
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,3 @@
1
1
  module Micropub
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/micropub.rb CHANGED
@@ -1,5 +1,14 @@
1
1
  require "micropub/version"
2
-
2
+ require "micropub/token"
3
+ require "micropub/configuration"
3
4
  module Micropub
4
- # Your code goes here...
5
+ class << self
6
+ def configure
7
+ yield configuration
8
+ end
9
+
10
+ def configuration
11
+ @configuration ||= Configuration.new
12
+ end
13
+ end
5
14
  end
data/micropub.gemspec CHANGED
@@ -20,4 +20,8 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "webmock"
25
+
26
+ spec.add_dependency "httpclient"
23
27
  end
@@ -0,0 +1,69 @@
1
+ require "spec_helper"
2
+
3
+ describe Micropub::Token do
4
+ let(:token) { Micropub::Token.new("1234") }
5
+
6
+ describe ".initialize" do
7
+ it "requires a string token" do
8
+ expect { Micropub::Token.new }.to raise_error ArgumentError
9
+ end
10
+ end
11
+
12
+ describe "making requests" do
13
+ let(:endpoint) { "https://tokens.indieauth.com/token" }
14
+ let(:raw_response) { "me=https://person.com/&client_id=https://ownyourgram.com&scope=post,patch&issued_at=1399155608&nonce=501884823" }
15
+ before do
16
+ Micropub.configure do |c|
17
+ c.token_endpoint = endpoint
18
+ c.me = "http://person.com"
19
+ c.allowed_scopes = [:post]
20
+ end
21
+ stub_request(:get, endpoint).with(headers: {"Authorization" => "Bearer 1234"}).to_return(body: raw_response)
22
+ end
23
+
24
+ describe "#valid?" do
25
+ context "with valid params" do
26
+ it "accepts multiple scopes" do
27
+ expect(token.valid?).to eq true
28
+ end
29
+ end
30
+ context "fails with invalid params" do
31
+ it "with wrong scope" do
32
+ Micropub.configure {|c| c.allowed_scopes = [:delete] }
33
+ expect(token.valid?).to eq false
34
+ end
35
+
36
+ it "with wrong host" do
37
+ Micropub.configure {|c| c.me = "http://blah.com" }
38
+ expect(token.valid?).to eq false
39
+ end
40
+ end
41
+
42
+ context "when no me in token server" do
43
+ let(:raw_response) { "client_id=https://ownyourgram.com&scope=post,patch&issued_at=1399155608&nonce=501884823" }
44
+ it "returns false" do
45
+ expect(token.valid?).to eq false
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "#me" do
51
+ let(:raw_response) { "client_id=https://ownyourgram.com&scope=post,patch&issued_at=1399155608&nonce=501884823" }
52
+ it "raises an error when token server me is not present" do
53
+ expect { token.me }.to raise_error Micropub::ValidationError
54
+ end
55
+ end
56
+
57
+ describe "#response" do
58
+ it "returns a hash" do
59
+ response = {
60
+ "me" => "https://person.com/",
61
+ "client_id" => "https://ownyourgram.com",
62
+ "scope" => "post,patch",
63
+ "issued_at" => "1399155608",
64
+ "nonce" => "501884823"}
65
+ expect(token.response).to eq(response)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,16 @@
1
+ require "spec_helper"
2
+
3
+ describe Micropub do
4
+ describe ".configure" do
5
+ let(:endpoint) { "https://tokens.indieauth.com/token" }
6
+ before do
7
+ Micropub.configure do |c|
8
+ c.token_endpoint = endpoint
9
+ end
10
+ end
11
+
12
+ it "sets a token endpoint" do
13
+ expect(Micropub.configuration.token_endpoint).to eq endpoint
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ require 'rspec'
2
+ require 'webmock/rspec'
3
+ require 'micropub'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: micropub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Becker
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-01 00:00:00.000000000 Z
12
+ date: 2015-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -39,6 +39,48 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: webmock
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: httpclient
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
42
84
  description: Ruby implementation of Micropub.
43
85
  email:
44
86
  - veganstraightedge@gmail.com
@@ -48,13 +90,19 @@ extensions: []
48
90
  extra_rdoc_files: []
49
91
  files:
50
92
  - ".gitignore"
93
+ - ".travis.yml"
51
94
  - Gemfile
52
95
  - LICENSE.txt
53
96
  - README.md
54
97
  - Rakefile
55
98
  - lib/micropub.rb
99
+ - lib/micropub/configuration.rb
100
+ - lib/micropub/token.rb
56
101
  - lib/micropub/version.rb
57
102
  - micropub.gemspec
103
+ - spec/lib/micropub/token_spec.rb
104
+ - spec/lib/micropub_spec.rb
105
+ - spec/spec_helper.rb
58
106
  homepage: https://github.com/homesteading/micropub
59
107
  licenses:
60
108
  - Public Domain (CC0)
@@ -75,9 +123,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
123
  version: '0'
76
124
  requirements: []
77
125
  rubyforge_project:
78
- rubygems_version: 2.4.6
126
+ rubygems_version: 2.4.5
79
127
  signing_key:
80
128
  specification_version: 4
81
129
  summary: Ruby implementation of Micropub.
82
- test_files: []
83
- has_rdoc:
130
+ test_files:
131
+ - spec/lib/micropub/token_spec.rb
132
+ - spec/lib/micropub_spec.rb
133
+ - spec/spec_helper.rb