hobby-auth 0.0.0
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 +7 -0
- data/.gitignore +1 -0
- data/Gemfile +3 -0
- data/lib/hobby/auth.rb +25 -0
- data/spec/helper.rb +3 -0
- data/spec/http/getter.yml +22 -0
- data/spec/http/poster.yml +16 -0
- data/spec/http_spec.rb +15 -0
- data/spec/seed_users.rb +23 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5496a07b70f304e210d3df33809f22fdf8e34210
|
4
|
+
data.tar.gz: 18d862103f80a6839f946df723937cf623a83eac
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8ab1798d251e0d244a59af1c00cc037641ea06d0875ef3c30510ea9d793717c883a12e708d1db41c52506d26cd7399af1a3a7c79892a858c186dc108393bd30c
|
7
|
+
data.tar.gz: 99e5028ac1329fc1b00e20bf10eb4f7331418d56fdc56b6369fcd24fdb28a20131671342cd8470e8d5098e7a82ebb94b50b22fc15b9ecea1c89357156f37271a
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/lib/hobby/auth.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Hobby
|
2
|
+
module Auth
|
3
|
+
def self.[] *user_models
|
4
|
+
Module.new do
|
5
|
+
define_singleton_method :included do |app|
|
6
|
+
user_models.each do |user_model|
|
7
|
+
app.define_singleton_method user_model.name.downcase do |route|
|
8
|
+
action = route.action
|
9
|
+
route.action = -> do
|
10
|
+
if user = (user_model.find_by_token env['HTTP_AUTHORIZATION'])
|
11
|
+
@user = user
|
12
|
+
instance_exec &action
|
13
|
+
else
|
14
|
+
response.status = 403
|
15
|
+
end
|
16
|
+
end
|
17
|
+
route
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
attr_reader :user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # Ends should be optional. Block nesting can be inferred from two-space indent.
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
- get:
|
2
|
+
path: /
|
3
|
+
|
4
|
+
response:
|
5
|
+
status: 403
|
6
|
+
|
7
|
+
- get:
|
8
|
+
path: /
|
9
|
+
headers:
|
10
|
+
Authorization: invalid token
|
11
|
+
|
12
|
+
response:
|
13
|
+
status: 403
|
14
|
+
|
15
|
+
- get:
|
16
|
+
path: /
|
17
|
+
headers:
|
18
|
+
Authorization: first valid getter token
|
19
|
+
|
20
|
+
response:
|
21
|
+
status: 200
|
22
|
+
body: oh my get
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- post:
|
2
|
+
path: /
|
3
|
+
headers:
|
4
|
+
Authorization: first valid getter token
|
5
|
+
|
6
|
+
response:
|
7
|
+
status: 403
|
8
|
+
|
9
|
+
- post:
|
10
|
+
path: /
|
11
|
+
headers:
|
12
|
+
Authorization: first valid poster token
|
13
|
+
|
14
|
+
response:
|
15
|
+
status: 200
|
16
|
+
body: the user's token is first valid poster token
|
data/spec/http_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
require_relative 'seed_users'
|
4
|
+
|
5
|
+
Hobby::Devtools::RSpec.describe do
|
6
|
+
app do
|
7
|
+
Class.new do
|
8
|
+
include Hobby
|
9
|
+
include Hobby::Auth[Getter, Poster]
|
10
|
+
|
11
|
+
getter get { 'oh my get' }
|
12
|
+
poster post { "the user's token is #{user.token}" }
|
13
|
+
end.new
|
14
|
+
end
|
15
|
+
end
|
data/spec/seed_users.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class User
|
2
|
+
@@all_users = []
|
3
|
+
def initialize token
|
4
|
+
@token = token
|
5
|
+
@@all_users << self
|
6
|
+
end
|
7
|
+
attr_reader :token
|
8
|
+
|
9
|
+
def self.find_by_token token
|
10
|
+
@@all_users.find { |user| user.token == token && user.is_a?(self) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Getter < User
|
15
|
+
end
|
16
|
+
|
17
|
+
class Poster < User
|
18
|
+
end
|
19
|
+
|
20
|
+
Getter.new 'first valid getter token'
|
21
|
+
Getter.new 'second valid getter token'
|
22
|
+
Poster.new 'first valid poster token'
|
23
|
+
Poster.new 'second valid poster token'
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hobby-auth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anatoly Chernow
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- ".gitignore"
|
20
|
+
- Gemfile
|
21
|
+
- lib/hobby/auth.rb
|
22
|
+
- spec/helper.rb
|
23
|
+
- spec/http/getter.yml
|
24
|
+
- spec/http/poster.yml
|
25
|
+
- spec/http_spec.rb
|
26
|
+
- spec/seed_users.rb
|
27
|
+
homepage:
|
28
|
+
licenses: []
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 2.5.2
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: Authorize Hobby routes
|
50
|
+
test_files: []
|