auth_manager 0.0.5 → 0.0.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 +4 -4
- data/auth_manager.gemspec +4 -5
- data/lib/auth_manager/adder/adder.rb +20 -32
- data/lib/auth_manager/base.rb +47 -21
- data/lib/auth_manager/constants.rb +4 -0
- data/lib/auth_manager/deleter/deleter.rb +5 -13
- data/lib/auth_manager/finder/finder.rb +21 -7
- data/lib/auth_manager/updater/updater.rb +21 -16
- data/lib/auth_manager/validation.rb +84 -0
- data/lib/auth_manager/version.rb +1 -1
- data/lib/auth_manager.rb +6 -0
- data/spec/adder_spec.rb +17 -18
- data/spec/base_spec.rb +96 -0
- data/spec/deleter_spec.rb +8 -9
- data/spec/finder_spec.rb +9 -9
- data/spec/spec_helper.rb +8 -4
- data/spec/updater_spec.rb +9 -10
- data/spec/validation_spec.rb +30 -0
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8825b7ce1e7d3ac6011ecc4746e3e2e3df7f68e9
|
4
|
+
data.tar.gz: e37e2bf6e29e31cdb4d7d4a82c59c07440cdb2fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e23db54ef732fd37dfb709ead2eb234d9c0d8cab2cbf13adbfec1d5d89e86a5c9fc734e1326fd3aeaafd50a157dd8f0c28cb906e06c1f257b81293fbc486ca5
|
7
|
+
data.tar.gz: f896e2a4db283411384db63be883734e72e41dc6551bf9548307365fd658d4ef3dc60d4c601022bc6ae2f684f6f1ca87f8ba5a5f35581dc51e8cd9a2f3d357f2
|
data/auth_manager.gemspec
CHANGED
@@ -18,12 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "redis"
|
21
|
+
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "redis"
|
24
24
|
|
25
25
|
#(we added) development dependencies
|
26
26
|
spec.required_ruby_version = ">= 2.0"
|
27
|
-
spec.add_development_dependency "rspec"
|
28
|
-
|
27
|
+
spec.add_development_dependency "rspec"
|
29
28
|
end
|
@@ -1,44 +1,32 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
require_relative '../base.rb'
|
2
|
+
require_relative '../constants'
|
4
3
|
|
5
|
-
class AuthManager::Adder < AuthManager::
|
4
|
+
class AuthManager::Adder < AuthManager::Constants
|
6
5
|
|
7
|
-
def save?(given_user, option={user: true, app: false})
|
6
|
+
def self.save?(given_user, option={user: true, app: false})
|
8
7
|
user = option.fetch(:user) || false
|
9
8
|
app = option.fetch(:app) || false
|
10
|
-
|
11
|
-
|
9
|
+
response = {}
|
10
|
+
#section to allow new validation class to work with a hash
|
11
|
+
hash = hash_format_of(given_user, option)
|
12
|
+
#end of section
|
13
|
+
#hash for base redis_sadd
|
14
|
+
validation_mess = AuthManager::Validation.validate_param( hash )
|
15
|
+
hash_for_base = { object: hash[:object], list: 'users' } if hash[:option][:user]
|
16
|
+
hash_for_base = { object: hash[:object], list: 'applications' } if hash[:option][:app]
|
17
|
+
response = AuthManager::Base.redis_sadd(hash_for_base) if (validation_mess[:code] == 200)
|
18
|
+
response[:code] == 200 ? true : false
|
12
19
|
end
|
13
20
|
|
14
21
|
private ###################################
|
15
22
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
if param_json['login'] && login_exist?(member_json['login'], param_json['login'])
|
24
|
-
login_ok = false
|
25
|
-
break
|
26
|
-
end
|
27
|
-
end
|
28
|
-
login_ok
|
29
|
-
end
|
30
|
-
|
31
|
-
def login_exist?(wanted_login, login)
|
32
|
-
wanted_login == login
|
33
|
-
end
|
34
|
-
|
35
|
-
def save_this(liste, params)
|
36
|
-
@redis.sadd(liste, params)
|
37
|
-
end
|
38
|
-
|
39
|
-
def save(user, params)
|
40
|
-
liste = user ? USERS : APPS
|
41
|
-
save_this(liste, params)
|
23
|
+
def self.hash_format_of(given_user, option)
|
24
|
+
parsed = JSON.parse(given_user)
|
25
|
+
object = {}
|
26
|
+
object = { login: parsed['login'], password: parsed['password'] } if parsed['login']
|
27
|
+
object = { api_key: parsed['api_key'] } if parsed['api_key']
|
28
|
+
object[:deleted] = true if parsed['deleted']
|
29
|
+
{ object: object, option: option }
|
42
30
|
end
|
43
31
|
|
44
32
|
end
|
data/lib/auth_manager/base.rb
CHANGED
@@ -1,37 +1,63 @@
|
|
1
|
+
require 'redis'
|
2
|
+
|
1
3
|
class AuthManager::Base
|
2
|
-
attr_accessor :redis
|
3
4
|
|
4
|
-
|
5
|
-
|
5
|
+
def self.redis_sadd(hash)
|
6
|
+
validation = hash_of_pair(hash)
|
7
|
+
added = false
|
8
|
+
validation[:code] == 200 ? added = Redis.current.sadd(hash[:list], hash[:object].to_json) : (return validation)
|
9
|
+
added ? {code: 200, message: 'Param saved.'} : { code: 403, message: 'Sorry, This object already exists.' }
|
10
|
+
end
|
6
11
|
|
7
|
-
def
|
8
|
-
|
12
|
+
def self.redis_smembers(hash)
|
13
|
+
validation = hash_of_single(hash)
|
14
|
+
found = false
|
15
|
+
validation[:code] == 200 ? found = Redis.current.smembers(hash[:list]) : (return validation)
|
16
|
+
found.class == Array ? { code: 200, message: found } : { code: 404, message: 'Param not found!' }
|
9
17
|
end
|
10
18
|
|
11
|
-
|
19
|
+
def self.redis_sismember(hash)
|
20
|
+
validation = hash_of_pair(hash)
|
21
|
+
is_member = false
|
22
|
+
validation[:code] == 200 ? is_member = Redis.current.sismember(hash[:list], hash[:object].to_json) : (return validation)
|
23
|
+
is_member ? {code: 200, message: 'Param is a member of the given list.'} : { code: 404, message: 'Sorry, param not in the list' }
|
24
|
+
end
|
12
25
|
|
13
|
-
|
26
|
+
def self.redis_srem(hash)
|
27
|
+
validation = hash_of_pair(hash)
|
28
|
+
removed = false
|
29
|
+
validation[:code] == 200 ? removed = Redis.current.srem(hash[:list], hash[:object].to_json) : (return validation)
|
30
|
+
removed ? {code: 200, message: 'Param removed.'} : { code: 404, message: 'Sorry, param not in the list, thus not removed' }
|
31
|
+
end
|
14
32
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
33
|
+
def self.redis_del(hash)
|
34
|
+
validation = hash_of_single(hash)
|
35
|
+
deleted = 0
|
36
|
+
validation[:code] == 200 ? deleted = Redis.current.del(hash[:list]) : (return validation)
|
37
|
+
deleted != 0 ? {code: 200, message: 'Param deleted.'} : { code: 404, message: 'Sorry, param list not found' }
|
19
38
|
end
|
20
39
|
|
21
|
-
|
22
|
-
|
23
|
-
|
40
|
+
private #######################################
|
41
|
+
|
42
|
+
def self.hash_of_pair(hash)
|
43
|
+
to_return = {code: 400, message: 'Param is not a hash!'}
|
44
|
+
if (hash.class == Hash) && (hash.include?(:list) && hash.include?(:object))
|
45
|
+
to_return = {code: 200, message: 'Valid hash.'}
|
46
|
+
elsif (hash.class == Hash)
|
47
|
+
to_return = {code: 400, message:'Hash not well formed!'}
|
24
48
|
end
|
49
|
+
to_return
|
25
50
|
end
|
26
51
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
52
|
+
def self.hash_of_single(hash)
|
53
|
+
to_return = {code: 400, message: 'Param is not a hash!'}
|
54
|
+
if ((hash.class == Hash) && (hash.include?(:list)))
|
55
|
+
to_return = {code: 200, message: 'Valid hash.'}
|
56
|
+
elsif (hash.class == Hash)
|
57
|
+
to_return = {code: 400, message:'Hash not well formed!'}
|
30
58
|
end
|
59
|
+
to_return
|
31
60
|
end
|
32
61
|
|
33
|
-
def validate_option(option, user, app)
|
34
|
-
false unless option.instance_of?(Hash)
|
35
|
-
false if (user && app)
|
36
|
-
end
|
37
62
|
end
|
63
|
+
|
@@ -1,22 +1,14 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require 'redis'
|
3
|
-
require_relative '../base'
|
4
2
|
|
5
|
-
class AuthManager::Deleter
|
3
|
+
class AuthManager::Deleter
|
6
4
|
|
7
|
-
def delete?(obj_to_del, option)
|
8
|
-
|
9
|
-
fake_delete?(obj_to_del, new_obj, option)
|
5
|
+
def self.delete?(obj_to_del, option)
|
6
|
+
AuthManager::Updater.update(obj_to_del, format_new_obj(obj_to_del), option)
|
10
7
|
end
|
11
8
|
|
12
|
-
private
|
9
|
+
private ######################
|
13
10
|
|
14
|
-
def
|
15
|
-
updater = AuthManager::Updater.new
|
16
|
-
updater.update(obj_to_del, new_obj, option)
|
17
|
-
end
|
18
|
-
|
19
|
-
def format_new_obj(obj_to_del)
|
11
|
+
def self.format_new_obj(obj_to_del)
|
20
12
|
json_obj = JSON.parse(obj_to_del)
|
21
13
|
if json_obj['api_key']
|
22
14
|
{api_key: json_obj['api_key'], deleted: true }.to_json
|
@@ -1,14 +1,28 @@
|
|
1
|
-
|
2
|
-
require_relative '../base.rb'
|
1
|
+
class AuthManager::Finder < AuthManager::Constants
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
def find_object?( param, option )
|
3
|
+
def self.find_object?( param, option )
|
7
4
|
user = option.fetch(:user) || false
|
8
5
|
app = option.fetch(:app) || false
|
9
|
-
|
6
|
+
hash = hash_format_of(param, option)
|
7
|
+
AuthManager::Validation.validate_param( hash )
|
10
8
|
liste = user ? USERS : APPS
|
11
|
-
|
9
|
+
hash_for_base = { object: hash[:object], list: 'users' } if hash[:option][:user]
|
10
|
+
hash_for_base = { object: hash[:object], list: 'applications' } if hash[:option][:app]
|
11
|
+
response = {}
|
12
|
+
response = exist?(hash_for_base)
|
13
|
+
response[:code] == 200 ? true : false
|
12
14
|
end
|
13
15
|
|
16
|
+
private #############################
|
17
|
+
|
18
|
+
def self.hash_format_of(given_user, option)
|
19
|
+
object = JSON.parse(given_user)
|
20
|
+
object = { login: object['login'], password: object['password'] } if object['login']
|
21
|
+
object = { api_key: object['api_key'] } if object['api_key']
|
22
|
+
{ object: object, option: option }
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.exist?( hash_for_base )
|
26
|
+
AuthManager::Base.redis_sismember( hash_for_base )
|
27
|
+
end
|
14
28
|
end
|
@@ -1,31 +1,36 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require 'redis'
|
3
2
|
require_relative '../base'
|
3
|
+
require_relative '../constants'
|
4
4
|
|
5
|
-
class AuthManager::Updater < AuthManager::
|
5
|
+
class AuthManager::Updater < AuthManager::Constants
|
6
6
|
|
7
|
-
def update(old_obj, new_obj, option)
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
def self.update(old_obj, new_obj, option)
|
8
|
+
updated = false
|
9
|
+
if AuthManager::Finder.find_object?(old_obj, option)
|
10
|
+
if p AuthManager::Adder.save?(new_obj, option)
|
11
|
+
updated = delete_obj?(old_obj, option)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
updated
|
11
15
|
end
|
12
16
|
|
13
17
|
private ###########################
|
14
18
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
19
|
+
def self.hash_format_of(given_user, option)
|
20
|
+
object = JSON.parse(given_user)
|
21
|
+
object = { login: object['login'], password: object['password'] } if object['login']
|
22
|
+
object = { api_key: object['api_key'] } if object['api_key']
|
23
|
+
{ object: object, option: option }
|
18
24
|
end
|
19
25
|
|
20
|
-
def delete_obj?(old_obj, option)
|
26
|
+
def self.delete_obj?(old_obj, option)
|
21
27
|
user = option.fetch(:user) || false
|
22
28
|
liste = user ? USERS : APPS
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
adder.save?(new_obj, option)
|
29
|
+
hash = hash_format_of(old_obj, option)
|
30
|
+
hash_for_base = { object: hash[:object], list: 'users' } if hash[:option][:user]
|
31
|
+
hash_for_base = { object: hash[:object], list: 'applications' } if hash[:option][:app]
|
32
|
+
done = AuthManager::Base.redis_srem(hash_for_base)
|
33
|
+
done[:code] == 200 ? true : false
|
29
34
|
end
|
30
35
|
|
31
36
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class AuthManager::Validation
|
2
|
+
|
3
|
+
def self.validate_param(hash)
|
4
|
+
result = validate_format_of(hash)
|
5
|
+
result = validate_option(hash[:option]) if result[:code] == 200
|
6
|
+
return result if (result[:code] == 400)
|
7
|
+
return result = {code: 400, message: 'Bad object and option association'} unless validate_param_association(hash)
|
8
|
+
result = user_as_param(hash[:object]) if result[:code] && hash[:option][:user]
|
9
|
+
result = app_as_param(hash[:object]) if result[:code] && hash[:option][:app]
|
10
|
+
result
|
11
|
+
end
|
12
|
+
|
13
|
+
private ################################
|
14
|
+
|
15
|
+
def self.validate_param_association(hash)
|
16
|
+
good_association = true
|
17
|
+
good_association = false if (user_as_param(hash[:object])[:code] == 200) && (hash[:option][:app])
|
18
|
+
good_association = false if (app_as_param(hash[:object])[:code] == 200) && (hash[:option][:user])
|
19
|
+
good_association
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.user_as_param(object)
|
23
|
+
answer = {code: 400, message: 'Object not well formed'}
|
24
|
+
answer = {code: 400, message: 'Object is not a hash'} unless
|
25
|
+
object.is_a?(Hash)
|
26
|
+
answer = {code: 200, message: 'Object is valid'} if (object_has2keys(object) || object_has3keys(object)) && object_contains_string(object)
|
27
|
+
answer
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.app_as_param(object)
|
31
|
+
answer = {code: 400, message: 'Object not well formed'}
|
32
|
+
answer = {code: 400, message: 'Object is not a hash'} unless
|
33
|
+
object.is_a?(Hash)
|
34
|
+
answer = {code: 200, message: 'Object is valid'} if (object_has1key(object) || object_has2keys(object)) && object_is_string(object)
|
35
|
+
answer
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.object_has1key(object)
|
39
|
+
object.include?(:api_key) && (object.length == 1)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.object_is_string(object)
|
43
|
+
object[:api_key].is_a?(String) && !object[:api_key].empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.object_has2keys(object)
|
47
|
+
((object.include?(:login) && (object.include?(:password)))|| (object.include?(:api_key) && object.include?(:deleted))) && (object.length == 2)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.object_has3keys(object)
|
51
|
+
(object.include?(:login) && object.include?(:password) && object.include?(:deleted) && (object.length == 3))
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.object_contains_string(object)
|
55
|
+
object[:login].is_a?(String) && object[:password].is_a?(String) && !object[:login].empty? && !object[:password].empty?
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.validate_option(option)
|
59
|
+
answer = {code: 400, message: 'Option not well formed'}
|
60
|
+
answer = {code: 400, message: 'Option is not a hash'} unless
|
61
|
+
option.is_a?(Hash)
|
62
|
+
answer = {code: 200, message: 'Option is valid'} if option_has2keys(option) && option_keys_are_bools(option) && only_one_option(option)
|
63
|
+
answer
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.option_has2keys(option)
|
67
|
+
(option && option.include?(:user) && option.include?(:app) && (option.length == 2))
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.option_keys_are_bools(option)
|
71
|
+
option && (option[:user].is_a?(TrueClass) || option[:user].is_a?(FalseClass)) && (option[:app].is_a?(TrueClass) || option[:app].is_a?(FalseClass))
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.only_one_option(option)
|
75
|
+
(option && option[:user] && ! option[:app]) || (option && !option[:user] && option[:app])
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.validate_format_of(hash)
|
79
|
+
answer = {code: 400, message: 'Param not well formed!'}
|
80
|
+
answer = {code: 400, message: 'Param not a hash!'} unless hash.is_a?(Hash)
|
81
|
+
(answer = {code: 200, message: 'Param is valid.'}) if (hash.is_a?(Hash) && hash.include?(:object) && hash.include?(:option))
|
82
|
+
answer
|
83
|
+
end
|
84
|
+
end
|
data/lib/auth_manager/version.rb
CHANGED
data/lib/auth_manager.rb
CHANGED
@@ -3,9 +3,15 @@ require 'auth_manager/adder/adder'
|
|
3
3
|
require 'auth_manager/finder/finder'
|
4
4
|
require 'auth_manager/updater/updater'
|
5
5
|
require 'auth_manager/deleter/deleter'
|
6
|
+
require 'auth_manager/base'
|
7
|
+
require 'auth_manager/validation'
|
8
|
+
require 'auth_manager/constants'
|
6
9
|
|
7
10
|
module AuthManager
|
8
11
|
# Your code goes here...
|
12
|
+
class Constants
|
13
|
+
end
|
14
|
+
|
9
15
|
class Base
|
10
16
|
end
|
11
17
|
|
data/spec/adder_spec.rb
CHANGED
@@ -1,43 +1,42 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
3
|
describe AuthManager::Adder do
|
4
|
-
let(:adder) { AuthManager::Adder.new }
|
5
4
|
let(:user) { { login: 'nano', password: 'password' } }
|
6
5
|
let(:app) { { api_key: 'api_key' } }
|
7
6
|
let(:opt) { {user: false, app: false} }
|
8
7
|
|
9
|
-
describe '.
|
10
|
-
context 'When created' do
|
11
|
-
it { expect( adder.redis).to_not be_nil }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#save?' do
|
8
|
+
describe '.save?' do
|
16
9
|
#cleaning valid_user and or valid app before new save
|
17
10
|
before(:each) do
|
18
|
-
|
19
|
-
|
11
|
+
AuthManager::Base.redis_del({ list: 'users' })
|
12
|
+
AuthManager::Base.redis_del({ list: 'applications' })
|
20
13
|
end
|
21
14
|
#normal cases
|
22
15
|
context 'When saved a valid user' do
|
23
16
|
it {
|
24
17
|
swap_option_to('user')
|
25
|
-
expect(
|
18
|
+
expect( AuthManager::Adder.save?(user.to_json, opt)).to be_true
|
26
19
|
}
|
27
20
|
end
|
28
21
|
context 'When saved a valid app' do
|
29
22
|
it {
|
30
23
|
swap_option_to('app')
|
31
|
-
expect(
|
24
|
+
expect( AuthManager::Adder.save?(app.to_json, opt)).to be_true
|
32
25
|
}
|
33
26
|
end
|
34
27
|
context 'When saved with an existing login' do
|
35
|
-
it
|
36
|
-
|
37
|
-
expect(
|
38
|
-
user
|
39
|
-
|
40
|
-
|
28
|
+
it do
|
29
|
+
swap_option_to('user')
|
30
|
+
expect( AuthManager::Adder.save?(user.to_json, opt) ).to be_true
|
31
|
+
expect( AuthManager::Adder.save?(user.to_json, opt)).to be_false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
context 'When saving an existing api_key' do
|
35
|
+
it do
|
36
|
+
swap_option_to('app')
|
37
|
+
expect( AuthManager::Adder.save?(app.to_json, opt) ).to be_true
|
38
|
+
expect( AuthManager::Adder.save?(app.to_json, opt) ).to be_false
|
39
|
+
end
|
41
40
|
end
|
42
41
|
end
|
43
42
|
|
data/spec/base_spec.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative 'spec_helper'
|
4
|
+
|
5
|
+
describe AuthManager::Base do
|
6
|
+
before(:each)do
|
7
|
+
AuthManager::Base.redis_del({list: 'my_list'})
|
8
|
+
AuthManager::Base.redis_del({list: ''})
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '.redis_sadd' do
|
12
|
+
context 'When given an object different from a hash' do
|
13
|
+
it { expect(AuthManager::Base.redis_sadd(nil)[:code]).to eq(400) }
|
14
|
+
it { expect(AuthManager::Base.redis_sadd([])[:code]).to eq(400) }
|
15
|
+
it { expect(AuthManager::Base.redis_sadd('')[:code]).to eq(400) }
|
16
|
+
it { expect(AuthManager::Base.redis_sadd(1524)[:code]).to eq(400) }
|
17
|
+
it { expect(AuthManager::Base.redis_sadd(true)[:code]).to eq(400) }
|
18
|
+
end
|
19
|
+
context 'when given a bad hash' do
|
20
|
+
it { expect(AuthManager::Base.redis_sadd({})[:code]).to eq(400) }
|
21
|
+
it { expect(AuthManager::Base.redis_sadd({nest: ''})[:code]).to eq(400) }
|
22
|
+
it { expect(AuthManager::Base.redis_sadd({t: 12, a: 'fe', aa: true})[:code]).to eq(400) }
|
23
|
+
end
|
24
|
+
context 'When given a correct hash' do
|
25
|
+
it { expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(200) }
|
26
|
+
end
|
27
|
+
context 'When given another correct hash' do
|
28
|
+
it { expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(200) }
|
29
|
+
end
|
30
|
+
context 'When saving an existing object' do
|
31
|
+
it do
|
32
|
+
expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(200)
|
33
|
+
expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(403)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
context 'When given a random list and object in the hash' do
|
37
|
+
it { expect(AuthManager::Base.redis_sadd({list: g_rand_string, object: g_rand_string})[:code]).to eq(200) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '.redis_smembers' do
|
42
|
+
context 'When given an invalid hash' do
|
43
|
+
it { expect(AuthManager::Base.redis_smembers({})[:code]).to eq(400) }
|
44
|
+
it { expect(AuthManager::Base.redis_smembers({nest: ''})[:code]).to eq(400) }
|
45
|
+
it { expect(AuthManager::Base.redis_smembers({t: 12, a: 'fe', aa: true})[:code]).to eq(400) }
|
46
|
+
end
|
47
|
+
context 'when given list name in a hash' do
|
48
|
+
it { expect(AuthManager::Base.redis_smembers({list: 'my_list'})[:message].class).to eq(Array) }
|
49
|
+
end
|
50
|
+
context 'When the list is not in the DB, length is 0' do
|
51
|
+
it { expect(AuthManager::Base.redis_smembers({list: 'my_list'})[:message].length).to eq(0) }
|
52
|
+
end
|
53
|
+
context 'When the list has at least one element, lenght > 0' do
|
54
|
+
it do
|
55
|
+
expect(AuthManager::Base.redis_sadd({ list: 'my_list', object: 'my_object' })).to be_true
|
56
|
+
expect(AuthManager::Base.redis_smembers({ list: 'my_list' })[:message].length).to be > 0
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '.redis_sismember' do
|
62
|
+
context 'When the object is in the list' do
|
63
|
+
it 'expect sismember to return 200' do
|
64
|
+
expect( AuthManager::Base.redis_sadd({list: nil, object: nil})[:code] ).to eq(200)
|
65
|
+
expect( AuthManager::Base.redis_sismember({list: nil, object: nil})[:code]).to eq(200)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
context 'When object is not in the list' do
|
69
|
+
it { expect( AuthManager::Base.redis_sismember({list: '', object: ''})[:code] ).to eq(404) }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '.redis_srem' do
|
74
|
+
context 'When the object is removed' do
|
75
|
+
it do
|
76
|
+
expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(200)
|
77
|
+
expect( AuthManager::Base.redis_srem({list: 'my_list', object: 'my_object'})[:code] ).to eq(200)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
context 'When the object is not in the list' do
|
81
|
+
it { expect( AuthManager::Base.redis_srem({list: 'my_list', object: 'my_object'})[:code] ).to eq(404) }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '.redis_del' do
|
86
|
+
context 'When the list is deleted' do
|
87
|
+
it do
|
88
|
+
expect(AuthManager::Base.redis_sadd({list: 'my_list', object: 'my_object'})[:code]).to eq(200)
|
89
|
+
expect( AuthManager::Base.redis_del({list: 'my_list'})[:code] ).to eq(200)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
context 'When the list is not deleted' do
|
93
|
+
it { expect( AuthManager::Base.redis_del({list: 'my_list'})[:code] ).to eq(404) }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/spec/deleter_spec.rb
CHANGED
@@ -1,23 +1,22 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
3
|
describe AuthManager::Deleter do
|
4
|
-
let(:deleter) { AuthManager::Deleter.new }
|
5
4
|
let(:user) { {login: 'login', password: 'password'} }
|
6
5
|
let(:app) { {api_key: 'api_key'} }
|
7
6
|
let(:opt) { { user: false, app: true } }
|
8
7
|
describe '#delete' do
|
9
8
|
before(:each) do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
AuthManager::Base.redis_del({ list: 'users' })
|
10
|
+
AuthManager::Base.redis_del({ list: 'applications' })
|
11
|
+
AuthManager::Base.redis_sadd( { object: user, list: 'users'} )
|
12
|
+
AuthManager::Base.redis_sadd({ object: app, list: 'applications' })
|
14
13
|
end
|
15
14
|
|
16
15
|
context 'When deleted a user' do
|
17
16
|
it {
|
18
17
|
swap_option_to('user')
|
19
18
|
user[:login] = 'login'
|
20
|
-
expect(
|
19
|
+
expect( AuthManager::Deleter.delete?(user.to_json, opt)).to be_true
|
21
20
|
}
|
22
21
|
end
|
23
22
|
|
@@ -25,14 +24,14 @@ describe AuthManager::Deleter do
|
|
25
24
|
it {
|
26
25
|
swap_option_to('user')
|
27
26
|
user[:login] = 'not a login'
|
28
|
-
expect(
|
27
|
+
expect( AuthManager::Deleter.delete?(user.to_json, opt)).to be_false
|
29
28
|
}
|
30
29
|
end
|
31
30
|
context 'When deleted an app' do
|
32
31
|
it {
|
33
32
|
swap_option_to('app')
|
34
33
|
app[:api_key] = 'api_key'
|
35
|
-
expect(
|
34
|
+
expect( AuthManager::Deleter.delete?(app.to_json, opt)).to be_true
|
36
35
|
}
|
37
36
|
end
|
38
37
|
|
@@ -40,7 +39,7 @@ describe AuthManager::Deleter do
|
|
40
39
|
it {
|
41
40
|
swap_option_to('app')
|
42
41
|
app[:api_key] = 'not an api_key'
|
43
|
-
expect(
|
42
|
+
expect( AuthManager::Deleter.delete?(app.to_json, opt)).to be_false
|
44
43
|
}
|
45
44
|
end
|
46
45
|
end
|
data/spec/finder_spec.rb
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require_relative 'spec_helper'
|
2
3
|
|
3
4
|
describe AuthManager::Finder do
|
4
|
-
let(:finder) { AuthManager::Finder.new }
|
5
5
|
let(:user) { { login: 'login', password: 'password' }}
|
6
6
|
let(:app) { { api_key: 'api_key' } }
|
7
7
|
let(:opt) { { user: true, app: false } }
|
8
8
|
describe '#find_object?' do
|
9
9
|
before(:each) do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
AuthManager::Base.redis_del({ list: 'users' })
|
11
|
+
AuthManager::Base.redis_del({ list: 'applications' })
|
12
|
+
AuthManager::Base.redis_sadd( { object: user, list: 'users'} )
|
13
|
+
AuthManager::Base.redis_sadd({ object: app, list: 'applications' })
|
14
14
|
end
|
15
15
|
context 'When user is found' do
|
16
16
|
it {
|
17
17
|
swap_option_to('user')
|
18
|
-
expect(
|
18
|
+
expect( AuthManager::Finder.find_object?(user.to_json, opt ) ).to be_true
|
19
19
|
}
|
20
20
|
end
|
21
21
|
context 'When user is not found' do
|
22
22
|
it {
|
23
23
|
swap_option_to('user')
|
24
24
|
user[:login] = 'not a login'
|
25
|
-
expect(
|
25
|
+
expect( AuthManager::Finder.find_object?( user.to_json, opt ) ).to be_false
|
26
26
|
}
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'When app is found' do
|
30
30
|
it {
|
31
31
|
swap_option_to('app')
|
32
|
-
expect(
|
32
|
+
expect( AuthManager::Finder.find_object?(app.to_json, opt ) ).to be_true
|
33
33
|
}
|
34
34
|
end
|
35
35
|
context 'When app is not found' do
|
36
36
|
it {
|
37
37
|
swap_option_to('app')
|
38
38
|
app[:api_key] = 'not an api_key'
|
39
|
-
expect(
|
39
|
+
expect( AuthManager::Finder.find_object?( app.to_json, opt ) ).to be_false
|
40
40
|
}
|
41
41
|
end
|
42
42
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
require_relative './fixtures/environment'
|
2
2
|
|
3
|
+
def g_rand_string
|
4
|
+
a = []
|
5
|
+
('32'..'127').to_a.each { |e| a << e.to_i.chr }
|
6
|
+
(0..10).map{ [rand(a.length)] }.join
|
7
|
+
end
|
3
8
|
|
4
9
|
def swap_option_to(list)
|
5
|
-
|
6
|
-
when 'user'
|
10
|
+
if list == 'user'
|
7
11
|
opt[:user] = true
|
8
12
|
opt[:app] = false
|
9
13
|
else
|
@@ -13,8 +17,8 @@ def swap_option_to(list)
|
|
13
17
|
end
|
14
18
|
|
15
19
|
def new_object_from(object)
|
16
|
-
|
17
|
-
|
20
|
+
if object.include?(:login)
|
21
|
+
object[:login] = 'new login'
|
18
22
|
object[:password] = 'new password'
|
19
23
|
else
|
20
24
|
object[:api_key] = 'new api_key'
|
data/spec/updater_spec.rb
CHANGED
@@ -2,41 +2,40 @@
|
|
2
2
|
require_relative 'spec_helper'
|
3
3
|
|
4
4
|
describe AuthManager::Updater do
|
5
|
-
let(:updater) { AuthManager::Updater.new }
|
6
5
|
let(:app) { { api_key: 'api_key' } }
|
7
6
|
let(:user) { { login: 'login', password: 'password' }}
|
8
7
|
let(:opt) { { user: true, app: false } }
|
9
8
|
describe '#update' do
|
10
9
|
before(:each) do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
AuthManager::Base.redis_del({ list: 'users' })
|
11
|
+
AuthManager::Base.redis_del({ list: 'applications' })
|
12
|
+
AuthManager::Base.redis_sadd( { object: user, list: 'users'} )
|
13
|
+
AuthManager::Base.redis_sadd({ object: app, list: 'applications' })
|
15
14
|
end
|
16
15
|
context 'When user object is updated' do
|
17
16
|
it {
|
18
17
|
swap_option_to('user')
|
19
|
-
expect(
|
18
|
+
expect(AuthManager::Updater.update(user.to_json, new_object_from(user).to_json, opt)).to be_true
|
20
19
|
}
|
21
20
|
end
|
22
21
|
context 'When app object is updated' do
|
23
22
|
it {
|
24
23
|
swap_option_to('app')
|
25
|
-
expect(
|
24
|
+
expect(AuthManager::Updater.update(app.to_json, new_object_from(app).to_json, opt)).to be_true
|
26
25
|
}
|
27
26
|
end
|
28
27
|
context 'When user object is not updated' do
|
29
28
|
it {
|
30
29
|
swap_option_to('user')
|
31
|
-
user[:login] = 'not a login'
|
32
|
-
expect(
|
30
|
+
user[:login] = 'this is not a login'
|
31
|
+
expect(AuthManager::Updater.update(user.to_json, new_object_from(user).to_json, opt)).to be_false
|
33
32
|
}
|
34
33
|
end
|
35
34
|
context 'When app object is not updated' do
|
36
35
|
it {
|
37
36
|
swap_option_to('app')
|
38
37
|
app[:api_key] = 'not an api_key'
|
39
|
-
expect(
|
38
|
+
expect(AuthManager::Updater.update(app.to_json, new_object_from(app).to_json, opt)).to be_false
|
40
39
|
}
|
41
40
|
end
|
42
41
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe AuthManager::Validation do
|
4
|
+
describe '.validate_param' do
|
5
|
+
context 'When given something different from a hash' do
|
6
|
+
it { expect(AuthManager::Validation.validate_param(nil)[:code]).to eq(400) }
|
7
|
+
it { expect(AuthManager::Validation.validate_param('')[:code]).to eq(400) }
|
8
|
+
it { expect(AuthManager::Validation.validate_param([])[:code]).to eq(400) }
|
9
|
+
it { expect(AuthManager::Validation.validate_param(152)[:code]).to eq(400) }
|
10
|
+
end
|
11
|
+
context 'When given a bad formed hash' do
|
12
|
+
it { expect(AuthManager::Validation.validate_param({})[:code]).to eq(400) }
|
13
|
+
it { expect(AuthManager::Validation.validate_param({ob: ''})[:code]).to eq(400) }
|
14
|
+
it { expect(AuthManager::Validation.validate_param({ob: '', op: ''})[:code]).to eq(400) }
|
15
|
+
it { expect(AuthManager::Validation.validate_param({object: '', op: ''})[:code]).to eq(400) }
|
16
|
+
it { expect(AuthManager::Validation.validate_param({object: nil, option: nil})[:code]).to eq(400) }
|
17
|
+
it { expect(AuthManager::Validation.validate_param({object: {name: nil}, option: {user: nil}})[:code]).to eq(400) }
|
18
|
+
it { expect(AuthManager::Validation.validate_param({object: {login: '', password: ''}, option: {user: true, app: true}})[:code]).to eq(400) }
|
19
|
+
it { expect(AuthManager::Validation.validate_param({object: {login: '', password: ''}, option: {user: true, app: false}})[:code]).to eq(400) }
|
20
|
+
it { expect(AuthManager::Validation.validate_param({object: {api_key: ''}, option: {user: true, app: false}})[:code]).to eq(400) }
|
21
|
+
it { expect(AuthManager::Validation.validate_param({object: {api_key: ''}, option: {user: false, app: true}})[:code]).to eq(400) }
|
22
|
+
it { expect(AuthManager::Validation.validate_param({object: {login: 'my_login', password: 'my_password'}, option: { user: false, app: true }})[:code]).to eq(400) }
|
23
|
+
it { expect(AuthManager::Validation.validate_param({object: {api_key: 'api_key'}, option: { user: true, app: false }})[:code]).to eq(400) }
|
24
|
+
end
|
25
|
+
context 'When given a well formed hash' do
|
26
|
+
it { expect(AuthManager::Validation.validate_param({object: {api_key: 'api_key'}, option: { user: false, app: true }})[:code]).to eq(200) }
|
27
|
+
it { expect(AuthManager::Validation.validate_param({object: {login: 'my_login', password: 'my_password'}, option: { user: true, app: false }})[:code]).to eq(200) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
metadata
CHANGED
@@ -1,77 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auth_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- atacraft && fabira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: redis
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.0'
|
48
45
|
- - ">="
|
49
46
|
- !ruby/object:Gem::Version
|
50
|
-
version:
|
47
|
+
version: '0'
|
51
48
|
type: :development
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
54
51
|
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '3.0'
|
58
52
|
- - ">="
|
59
53
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
54
|
+
version: '0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
56
|
name: rspec
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
61
|
+
version: '0'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
68
|
+
version: '0'
|
75
69
|
description: '"Authenticate developpers and applications."'
|
76
70
|
email:
|
77
71
|
- atacraft@gmail.com, fabira90@gmail.com
|
@@ -91,17 +85,21 @@ files:
|
|
91
85
|
- lib/auth_manager.rb
|
92
86
|
- lib/auth_manager/adder/adder.rb
|
93
87
|
- lib/auth_manager/base.rb
|
88
|
+
- lib/auth_manager/constants.rb
|
94
89
|
- lib/auth_manager/deleter/deleter.rb
|
95
90
|
- lib/auth_manager/finder/finder.rb
|
96
91
|
- lib/auth_manager/updater/updater.rb
|
92
|
+
- lib/auth_manager/validation.rb
|
97
93
|
- lib/auth_manager/version.rb
|
98
94
|
- spec/adder_spec.rb
|
95
|
+
- spec/base_spec.rb
|
99
96
|
- spec/deleter_spec.rb
|
100
97
|
- spec/feed/populate.rb
|
101
98
|
- spec/finder_spec.rb
|
102
99
|
- spec/fixtures/environment.rb
|
103
100
|
- spec/spec_helper.rb
|
104
101
|
- spec/updater_spec.rb
|
102
|
+
- spec/validation_spec.rb
|
105
103
|
homepage: ''
|
106
104
|
licenses:
|
107
105
|
- MIT
|
@@ -128,9 +126,11 @@ specification_version: 4
|
|
128
126
|
summary: '"Module auth_manager"'
|
129
127
|
test_files:
|
130
128
|
- spec/adder_spec.rb
|
129
|
+
- spec/base_spec.rb
|
131
130
|
- spec/deleter_spec.rb
|
132
131
|
- spec/feed/populate.rb
|
133
132
|
- spec/finder_spec.rb
|
134
133
|
- spec/fixtures/environment.rb
|
135
134
|
- spec/spec_helper.rb
|
136
135
|
- spec/updater_spec.rb
|
136
|
+
- spec/validation_spec.rb
|