session-validator-client 3.0.0 → 3.0.1

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
  SHA256:
3
- metadata.gz: 13134a5a0a3928a83545942f1ea04e16fdecea4e0fe181e2706c775867cc537c
4
- data.tar.gz: 6f4cd63ee8452f43e0668eb5d9f35de6f718c0e280f3c651eaa268f5814bed78
3
+ metadata.gz: f1816744639488cc1585a2086e282cc605336199ad25b15f37dbd9813c1eb2db
4
+ data.tar.gz: e6d8d97f3d41daa67723f0e052ec48cbdfe2f4add832f368085368f76d20e3b0
5
5
  SHA512:
6
- metadata.gz: ac98bcd42df4d231fd93c2ad26144411afdbcf8f7f456e06130b8def140a9877f1636124b3409808736354aa60c925d58dd530cbcb3ec126edcfdb13dd11a7e6
7
- data.tar.gz: d64be1fc130fb1ab0dce811d05aa54d5f6df53820547683dd222253366a4304f26403ae1c1e3136780cee08e197cae7c3eb1c53cd02b80e89044c20c689d0619
6
+ metadata.gz: b99f8eb8174d308b0aa05620bd7036ff8a693bf8ec37604a8ae69033e9ca27b9251276b6a5baa9d02e79b517ceba58f2f5b9a95895bb949417978a69af9633d0
7
+ data.tar.gz: 9c6363f1a4e1654f3b327f69d0a6dc294b0ef70dec3d81db8f29504c55716e767aa3b4f71bed858a6abad2e05fbd4a5325bb5176e9e7ca3f665049d66d2fd9b2
data/.env ADDED
@@ -0,0 +1,3 @@
1
+ SESSION_VALIDATOR_KEYID=''
2
+ SESSION_VALIDATOR_URL=''
3
+ KEY_POOL='[{"keyId":"","secret":"","acceptOnly":0}]'
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.0
5
+ - 2.4.0
6
+ script: "bundle exec rspec"
7
+ deploy:
8
+ provider: rubygems
9
+ api_key: ${RUBYGEMS_API_KEY}
10
+ gem: session-validator-client
11
+ gemspec: session-validator-client.gemspec
12
+ on:
13
+ tags: true
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # session-validator-client-ruby ![Build status](https://travis-ci.org/emartech/session-validator-client-ruby.svg?branch=master)
2
+
3
+ Ruby client for Emarsys session validator service.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ gem install session-validator-client
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ setup up the following environment variables:
14
+
15
+ * `KEY_POOL`
16
+ * `SESSION_VALIDATOR_KEYID`
17
+ * `SESSION_VALIDATOR_URL`
18
+
19
+ ```ruby
20
+ require "session_validator"
21
+
22
+ client = SessionValidator::Client.new
23
+ client.valid?("staging_int_5ad5f96f307cf9.61063404")
24
+ ```
25
+
26
+ ## Running tests
27
+
28
+ ```bash
29
+ rspec
30
+ ```
data/bin/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'session_validator'
5
+ require 'dotenv'
6
+
7
+ Dotenv.load
8
+
9
+ require 'irb'
10
+ IRB.start
@@ -0,0 +1,9 @@
1
+ module SessionValidator
2
+ autoload :Client, "session_validator/client"
3
+ autoload :CachedClient, "session_validator/cached_client"
4
+ autoload :InMemoryCache, "session_validator/in_memory_cache"
5
+
6
+ def self.base_url
7
+ ENV['SESSION_VALIDATOR_URL']
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module SessionValidator
2
+ class CachedClient
3
+ def initialize(client, cache)
4
+ @client = client
5
+ @cache = cache
6
+ end
7
+
8
+ def valid?(msid)
9
+ @cache.cleanup
10
+
11
+ cached_result = @cache.get msid
12
+ return cached_result if cached_result
13
+
14
+ @client.valid?(msid).tap do |result|
15
+ @cache.set msid, result if result
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,59 @@
1
+ require "uri"
2
+ require "escher-keypool"
3
+ require "faraday"
4
+ require "faraday_middleware"
5
+ require "faraday_middleware/escher"
6
+
7
+ class SessionValidator::Client
8
+ CREDENTIAL_SCOPE = "eu/session-validator/ems_request".freeze
9
+ ESCHER_AUTH_OPTIONS = {
10
+ algo_prefix: "EMS",
11
+ vendor_key: "EMS",
12
+ auth_header_name: "X-Ems-Auth",
13
+ date_header_name: "X-Ems-Date"
14
+ }.freeze
15
+ SERVICE_REQUEST_TIMEOUT = 2.freeze
16
+
17
+ def valid?(msid)
18
+ response_status = client.get("/sessions/#{msid}", nil, headers).status
19
+ (200..299).include?(response_status) || (500..599).include?(response_status)
20
+ rescue Faraday::TimeoutError
21
+ true
22
+ end
23
+
24
+ private
25
+
26
+ def client
27
+ Faraday.new(url) do |faraday|
28
+ faraday.options[:open_timeout] = SERVICE_REQUEST_TIMEOUT
29
+ faraday.options[:timeout] = SERVICE_REQUEST_TIMEOUT
30
+ faraday.use FaradayMiddleware::Escher::RequestSigner, escher_config
31
+ faraday.adapter Faraday.default_adapter
32
+ end
33
+ end
34
+
35
+ def url
36
+ uri.to_s
37
+ end
38
+
39
+ def host
40
+ uri.hostname
41
+ end
42
+
43
+ def uri
44
+ URI.parse(SessionValidator.base_url)
45
+ end
46
+
47
+ def escher_config
48
+ {
49
+ credential_scope: CREDENTIAL_SCOPE,
50
+ host: host,
51
+ options: ESCHER_AUTH_OPTIONS,
52
+ active_key: -> { ::Escher::Keypool.new.get_active_key("session_validator") }
53
+ }
54
+ end
55
+
56
+ def headers
57
+ { "content-type" => "application/json" }
58
+ end
59
+ end
@@ -0,0 +1,35 @@
1
+ module SessionValidator
2
+ class InMemoryCache
3
+ def initialize(ttl)
4
+ @ttl = ttl
5
+ @cache = {}
6
+ end
7
+
8
+ def get(key)
9
+ return nil unless @cache.key? key
10
+
11
+ data = @cache[key]
12
+ return nil if expired? data
13
+
14
+ data[:value]
15
+ end
16
+
17
+ def set(key, value)
18
+ @cache[key] = { value: value, expiry: Time.now.to_i + @ttl }
19
+ end
20
+
21
+ def cleanup
22
+ @cache.delete_if { |_, data| expired? data }
23
+ end
24
+
25
+ def empty?
26
+ @cache.length == 0
27
+ end
28
+
29
+ private
30
+
31
+ def expired?(data)
32
+ Time.now.to_i >= data[:expiry]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "session-validator-client"
3
+ s.version = "3.0.1"
4
+ s.summary = "Ruby client for Emarsys session validator service"
5
+ s.authors = ["Emarsys Technologies Ltd."]
6
+ s.email = "security@emarsys.com"
7
+ s.homepage = "https://github.com/emartech/session-validator-client-ruby"
8
+ s.licenses = ["MIT"]
9
+
10
+ s.required_ruby_version = ">= 1.9"
11
+
12
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
13
+ f.match(%r{^(test|spec|features)/})
14
+ end
15
+ s.require_paths = ['lib']
16
+
17
+ s.add_dependency "escher-keypool"
18
+ s.add_dependency "faraday"
19
+ s.add_dependency "faraday_middleware"
20
+ s.add_dependency "faraday_middleware-escher"
21
+
22
+ s.add_development_dependency "rspec"
23
+ s.add_development_dependency "webmock"
24
+ s.add_development_dependency "dotenv"
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: session-validator-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emarsys Technologies Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-17 00:00:00.000000000 Z
11
+ date: 2018-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escher-keypool
@@ -113,8 +113,20 @@ email: security@emarsys.com
113
113
  executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files: []
116
- files: []
117
- homepage: https://github.com/emartech/session-validator-client-ruby/
116
+ files:
117
+ - ".env"
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".travis.yml"
121
+ - Gemfile
122
+ - README.md
123
+ - bin/console
124
+ - lib/session_validator.rb
125
+ - lib/session_validator/cached_client.rb
126
+ - lib/session_validator/client.rb
127
+ - lib/session_validator/in_memory_cache.rb
128
+ - session-validator-client.gemspec
129
+ homepage: https://github.com/emartech/session-validator-client-ruby
118
130
  licenses:
119
131
  - MIT
120
132
  metadata: {}