db2_session 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +186 -0
- data/Rakefile +20 -0
- data/app/controllers/db2_session/application_controller.rb +8 -0
- data/app/controllers/db2_session/sessions_controller.rb +25 -0
- data/app/queries/db2_session/application_query.rb +19 -0
- data/config/routes.rb +6 -0
- data/lib/db2_session.rb +13 -0
- data/lib/db2_session/connection.rb +28 -0
- data/lib/db2_session/db_client.rb +33 -0
- data/lib/db2_session/engine.rb +8 -0
- data/lib/db2_session/manager.rb +75 -0
- data/lib/db2_session/version.rb +5 -0
- metadata +200 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '039f272c992e4e9b8607c4bff79e97bd7dda2a00d9b7107179243924dd5939fc'
|
4
|
+
data.tar.gz: 10d194bbcdb32e25053e8b9f4d80f8d6e566a6d051a2f71ac7380178672b884a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a1d040ffb51ab21b8f82ecb4acee30466a0afe9b7d0adf3d2a9c0ac8ed3ea891a5eba5f838ca7852ebdf750064c8777e2e3440d0a2e012a14cd8e84f766edb7c
|
7
|
+
data.tar.gz: 5cb62c6e9733c5f34894561f68272c39f187f8a8bf121282ae283eb8c9f6b3f25cd67e7d114209f3065e84b36c2e714cdc98c5abfc8d1a9379de8b3f78bdb954
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2021 yohanes_o_lumentut
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
# Db2Session
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/db2_session.svg)](https://badge.fury.io/rb/db2_session)
|
4
|
+
|
5
|
+
A Rails 5 & Rails 6 plugin for managing queries by sessions of authenticated db2 (i-series) multi-users on a remote db2 server.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'db2_session'
|
12
|
+
```
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
```bash
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
```bash
|
21
|
+
$ gem install db2_session
|
22
|
+
```
|
23
|
+
## Usage
|
24
|
+
This plugin highly depends on [Db2Query](https://github.com/yohaneslumentut/db2_query). Where **Db2Query** is responsible to manage database queries and **Db2Session** is only responsible to manage user sessions in the controllers of each query.
|
25
|
+
|
26
|
+
Note: Please do the Db2Query [**Installation**](https://github.com/yohaneslumentut/db2_query#1-installation) & [**Initialization**](https://github.com/yohaneslumentut/db2_query#2-initialization) steps before move to the next section.
|
27
|
+
|
28
|
+
Rules:
|
29
|
+
> 1. **Queries** have to extend ApplicationQuery, an abstract query, which inherit all attributes and methods required from Db2Session::ApplicationQuery
|
30
|
+
> 2. **Controllers** have to extend Db2Controller, an abstract controller, which inherit all attributes and methods required from Db2Session::ApplicationController
|
31
|
+
|
32
|
+
### Mount Engine Authentication Path
|
33
|
+
To be able to use the **authentication** path, mount the engine at your application `config/routes.rb`
|
34
|
+
```ruby
|
35
|
+
Rails.application.routes.draw do
|
36
|
+
mount Db2Session::Engine => "/db2_session"
|
37
|
+
...
|
38
|
+
end
|
39
|
+
```
|
40
|
+
The `db2_session/login` and `db2_session/logout` path is now available at `rails routes`
|
41
|
+
|
42
|
+
```bash
|
43
|
+
$ rails routes
|
44
|
+
Prefix Verb URI Pattern Controller#Action
|
45
|
+
db2_session /db2_session Db2Session::Engine
|
46
|
+
...
|
47
|
+
Routes for Db2Session::Engine:
|
48
|
+
login POST /login(.:format) db2_session/sessions#new
|
49
|
+
logout GET /logout(.:format) db2_session/sessions#delete
|
50
|
+
...
|
51
|
+
```
|
52
|
+
|
53
|
+
### Query By User Session
|
54
|
+
**Db2Query** use only one user which is hardcoded at `config/db2query.yml`. Here, at Db2Session query, multi-user can make requests and queries by using their own db2 credential that is securely attached at connection client instance. The plugin will assign the connection to the related user on each request based on an attached token that was created during the `login` process.
|
55
|
+
|
56
|
+
Create an abstract query, here we use `ApplicationQuery` that extend `Db2Session::ApplicationQuery`. All of your query class have to extend this class.
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
class ApplicationQuery < Db2Session::ApplicationQuery
|
60
|
+
def self.inherited(subclass)
|
61
|
+
subclass.define_query_definitions
|
62
|
+
end
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Then create a `Db2ConnectionQuery` that inherit from `ApplicationQUery`
|
67
|
+
|
68
|
+
```bash
|
69
|
+
$ rails g query connection --defines status
|
70
|
+
```
|
71
|
+
```ruby
|
72
|
+
# app/queries/db2_connection_query.rb
|
73
|
+
class Db2ConnectionQuery < ApplicationQuery
|
74
|
+
def status_sql
|
75
|
+
"SELECT 1 AS CONNECTED FROM SYSIBM.SYSDUMMY1"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
```
|
79
|
+
Update the definitions:
|
80
|
+
```ruby
|
81
|
+
# app/queries/definitions/db2_connection_query_definitions.rb
|
82
|
+
module Definitions
|
83
|
+
class Db2ConnectionQueryDefinitions < Db2Query::Definitions
|
84
|
+
def describe
|
85
|
+
query_definition :status do |c|
|
86
|
+
c.connected :boolean
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
```
|
93
|
+
|
94
|
+
### Session Controller
|
95
|
+
|
96
|
+
Next, create a `Db2Controller` as a base controller and `Db2ConnectionController` that extend `Db2Controller` where we can render `Db2ConnectionQuery.status`.
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
# app/controllers/db2_controller.rb
|
100
|
+
class Db2Controller < Db2Session::ApplicationController
|
101
|
+
end
|
102
|
+
|
103
|
+
# app/controllers/db2_connection_controller.rb
|
104
|
+
class Db2ConnectionController < Db2Controller
|
105
|
+
def index
|
106
|
+
status = Db2ConnectionQuery.status
|
107
|
+
render json: {
|
108
|
+
data: {
|
109
|
+
user: Db2ConnectionQuery.connection.userid,
|
110
|
+
trx_time: Db2ConnectionQuery.connection.trx_time,
|
111
|
+
connected: status.connected
|
112
|
+
}
|
113
|
+
}
|
114
|
+
end
|
115
|
+
end
|
116
|
+
```
|
117
|
+
Add the route at `config/routes`:
|
118
|
+
```ruby
|
119
|
+
Rails.application.routes.draw do
|
120
|
+
mount Db2Session::Engine => "/db2_session"
|
121
|
+
get "/db2_connection", to: "db2_connection#index"
|
122
|
+
end
|
123
|
+
|
124
|
+
```
|
125
|
+
|
126
|
+
Then check whether the `db2_connection_path` already listed at application routes.
|
127
|
+
```bash
|
128
|
+
$ rails routes
|
129
|
+
Prefix Verb URI Pattern Controller#Action
|
130
|
+
db2_session /db2_session Db2Session::Engine
|
131
|
+
db2_connection GET /db2_connection(.:format) db2_connection#index
|
132
|
+
|
133
|
+
Routes for Db2Session::Engine:
|
134
|
+
login POST /login(.:format) db2_session/sessions#new
|
135
|
+
logout GET /logout(.:format) db2_session/sessions#delete
|
136
|
+
```
|
137
|
+
|
138
|
+
### Authenticate a Request
|
139
|
+
|
140
|
+
First, run your development server
|
141
|
+
```bash
|
142
|
+
$ rails s
|
143
|
+
```
|
144
|
+
Post a login request with Db2 `userid` and `password` data to get a token.
|
145
|
+
|
146
|
+
```bash
|
147
|
+
$ curl -XPOST -i -H "Content-Type: application/json" -d '{ "userid": "YOHANES", "password": "XXXXXX" }' http://localhost:3000/db2_session/login
|
148
|
+
```
|
149
|
+
The installation success if you see response as follow:
|
150
|
+
```bash
|
151
|
+
HTTP/1.1 200 OK
|
152
|
+
X-Frame-Options: SAMEORIGIN
|
153
|
+
X-Xss-Protection: 1; mode=block
|
154
|
+
X-Content-Type-Options: nosniff
|
155
|
+
X-Download-Options: noopen
|
156
|
+
X-Permitted-Cross-Domain-Policies: none
|
157
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
158
|
+
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJkYXRhIjp7InNlc3Npb25fa2V5Ijo0NzM0Mzg2MTIzNTE2MH19.KW5NZo43WT47QiKrXvVyRd2kovY1Y53fSabU2BIx5nc
|
159
|
+
Content-Type: application/json; charset=utf-8
|
160
|
+
Vary: Accept
|
161
|
+
Etag: W/"883b4f34583e448cb88bf7c2146dc445"
|
162
|
+
Cache-Control: max-age=0, private, must-revalidate
|
163
|
+
X-Request-Id: 9411f926-404d-4b6c-9b4e-349b02560cfa
|
164
|
+
X-Runtime: 0.259895
|
165
|
+
Server: WEBrick/1.4.2 (Ruby/2.6.4/2019-08-28)
|
166
|
+
Date: Fri, 13 Aug 2021 04:58:15 GMT
|
167
|
+
Content-Length: 35
|
168
|
+
Connection: Keep-Alive
|
169
|
+
|
170
|
+
{"message":"YOHANES are logged in."}
|
171
|
+
```
|
172
|
+
Copy the Authorization Bearer token, and use it to check connection status.
|
173
|
+
```bash
|
174
|
+
$ curl -XGET -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJkYXRhIjp7InNlc3Npb25fa2V5Ijo0NzM0Mzg2MTIzNTE2MH19.KW5NZo43WT47QiKrXvVyRd2kovY1Y53fSabU2BIx5nc" -H "Content-Type: application/json" http://localhost:3000/db2_connection
|
175
|
+
```
|
176
|
+
Note: Replace the token with your own token that generated during login process.
|
177
|
+
|
178
|
+
Then the response will be as follow:
|
179
|
+
```ruby
|
180
|
+
{"data":{"user":"YOHANES","trx_time":14556.481167844,"connected":true}}
|
181
|
+
```
|
182
|
+
|
183
|
+
Now the token can be use on each request to your application.
|
184
|
+
|
185
|
+
## License
|
186
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
|
5
|
+
APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
|
6
|
+
load "rails/tasks/engine.rake"
|
7
|
+
|
8
|
+
load "rails/tasks/statistics.rake"
|
9
|
+
|
10
|
+
require "bundler/gem_tasks"
|
11
|
+
|
12
|
+
require "rake/testtask"
|
13
|
+
|
14
|
+
Rake::TestTask.new(:test) do |t|
|
15
|
+
t.libs << "test"
|
16
|
+
t.pattern = "test/**/*_test.rb"
|
17
|
+
t.verbose = false
|
18
|
+
end
|
19
|
+
|
20
|
+
task default: :test
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Session
|
4
|
+
class SessionsController < ApplicationController
|
5
|
+
skip_around_action :authenticate!, only: [:new]
|
6
|
+
before_action :flush_idling_connections!, only: [:new]
|
7
|
+
|
8
|
+
def new
|
9
|
+
connection = create_new_connection
|
10
|
+
response.set_header("Authorization", "Bearer #{token(connection.object_id)}")
|
11
|
+
render json: { message: "#{params[:userid]} are logged in." }
|
12
|
+
rescue Db2Query::ConnectionError => e
|
13
|
+
render json: { message: e.message }, status: :unauthorized
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete
|
17
|
+
request_key.tap do |key|
|
18
|
+
connection = sessions.fetch(key)
|
19
|
+
connection.disconnect!
|
20
|
+
sessions.delete_pair(key, connection)
|
21
|
+
end
|
22
|
+
render json: { message: "You are logged out." }, status: :ok
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Session
|
4
|
+
class ApplicationQuery
|
5
|
+
include Db2Query::Config
|
6
|
+
include Db2Query::Helper
|
7
|
+
include Db2Query::DbConnection
|
8
|
+
include Db2Query::FieldType
|
9
|
+
include Db2Query::Core
|
10
|
+
|
11
|
+
def self.establish_connection
|
12
|
+
load_database_configurations
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.connection
|
16
|
+
Thread.current[:connection]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/config/routes.rb
ADDED
data/lib/db2_session.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "db2_query"
|
4
|
+
require "jwt"
|
5
|
+
require "securerandom"
|
6
|
+
require "db2_session/engine"
|
7
|
+
|
8
|
+
module Db2Session
|
9
|
+
autoload :Version, "db2_session/version"
|
10
|
+
autoload :Connection, "db2_session/connection"
|
11
|
+
autoload :DbClient, "db2_session/db_client"
|
12
|
+
autoload :Manager, "db2_session/manager"
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Session
|
4
|
+
class Connection < Db2Query::Connection
|
5
|
+
attr_accessor :trx_time, :userid
|
6
|
+
|
7
|
+
def initialize(config, userid, password)
|
8
|
+
super(config)
|
9
|
+
@userid = userid
|
10
|
+
singleton_class.define_method(:new_dbclient) do
|
11
|
+
DbClient.new(config, userid, password)
|
12
|
+
end
|
13
|
+
verify_db_connection
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_connection_pool
|
17
|
+
synchronize do
|
18
|
+
return @connection_pool if @connection_pool
|
19
|
+
@connection_pool = Pool.new(pool_config) { new_dbclient }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def verify_db_connection
|
25
|
+
with { |conn| true }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Session
|
4
|
+
class DbClient < Db2Query::DbClient
|
5
|
+
def initialize(config, userid, password)
|
6
|
+
@dsn = config[:dsn]
|
7
|
+
@idle_time_limit = config[:idle] || 5
|
8
|
+
define_authenticated_client(userid, password)
|
9
|
+
@client = authenticated_client
|
10
|
+
@last_transaction = Time.now
|
11
|
+
end
|
12
|
+
|
13
|
+
def define_authenticated_client(userid, password)
|
14
|
+
singleton_class.define_method(:authenticated_client) do
|
15
|
+
new_client(userid, password)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def new_client(userid, password)
|
20
|
+
ODBC.connect(dsn, userid, password).tap do |odbc_conn|
|
21
|
+
odbc_conn.use_time = true
|
22
|
+
odbc_conn.use_utc = is_utc?
|
23
|
+
end
|
24
|
+
rescue ::ODBC::Error => e
|
25
|
+
raise Db2Query::ConnectionError.new(e.message)
|
26
|
+
end
|
27
|
+
|
28
|
+
def reconnect!
|
29
|
+
disconnect!
|
30
|
+
@client = authenticated_client
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Session
|
4
|
+
module Manager
|
5
|
+
mattr_reader :sessions
|
6
|
+
@@sessions = Concurrent::Map.new
|
7
|
+
|
8
|
+
mattr_reader :hmac_secret
|
9
|
+
@@hmac_secret = SecureRandom.hex(64)
|
10
|
+
|
11
|
+
def db2_config
|
12
|
+
Db2Query::Base.config
|
13
|
+
end
|
14
|
+
|
15
|
+
def authenticate!
|
16
|
+
Thread.current[:connection] = current_connection
|
17
|
+
yield
|
18
|
+
rescue Exception => e
|
19
|
+
render json: { message: e.message }, status: :unauthorized
|
20
|
+
ensure
|
21
|
+
Thread.current[:connection] = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_new_connection
|
25
|
+
new_session_connection.tap do |connection|
|
26
|
+
sessions.fetch_or_store(connection.object_id, connection)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def flush_idling_connections!
|
31
|
+
sessions.each_pair do |key, conn|
|
32
|
+
sessions.delete_pair(key, conn) if idle_connection?(conn)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def payload(key)
|
38
|
+
{ data: { session_key: key } }
|
39
|
+
end
|
40
|
+
|
41
|
+
def token(key)
|
42
|
+
JWT.encode payload(key), hmac_secret, "HS256"
|
43
|
+
end
|
44
|
+
|
45
|
+
def request_token
|
46
|
+
request.authorization.split(" ").last
|
47
|
+
end
|
48
|
+
|
49
|
+
def decoded_token
|
50
|
+
JWT.decode request_token, hmac_secret, true, { algorithm: "HS256" }
|
51
|
+
end
|
52
|
+
|
53
|
+
def request_key
|
54
|
+
decoded_token.first["data"].transform_keys(&:to_sym)[:session_key]
|
55
|
+
end
|
56
|
+
|
57
|
+
def idle_connection?(conn)
|
58
|
+
current_time - conn.trx_time > 30 * 60
|
59
|
+
end
|
60
|
+
|
61
|
+
def new_session_connection
|
62
|
+
Db2Session::Connection.new(db2_config, params[:userid], params[:password])
|
63
|
+
end
|
64
|
+
|
65
|
+
def current_time
|
66
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
67
|
+
end
|
68
|
+
|
69
|
+
def current_connection
|
70
|
+
sessions.fetch(request_key).tap do |conn|
|
71
|
+
conn.trx_time = current_time
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: db2_session
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- yohanes_o_lumentut
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-08-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-progressbar
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop-performance
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faker
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: db2_query
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.3.2
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.3.2
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: jwt
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: securerandom
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: A Rails 5 & Rails 6 plugin for handling Db2 API request by using JWT
|
154
|
+
token.
|
155
|
+
email:
|
156
|
+
- yohanes.lumentut@gmail.com
|
157
|
+
executables: []
|
158
|
+
extensions: []
|
159
|
+
extra_rdoc_files: []
|
160
|
+
files:
|
161
|
+
- MIT-LICENSE
|
162
|
+
- README.md
|
163
|
+
- Rakefile
|
164
|
+
- app/controllers/db2_session/application_controller.rb
|
165
|
+
- app/controllers/db2_session/sessions_controller.rb
|
166
|
+
- app/queries/db2_session/application_query.rb
|
167
|
+
- config/routes.rb
|
168
|
+
- lib/db2_session.rb
|
169
|
+
- lib/db2_session/connection.rb
|
170
|
+
- lib/db2_session/db_client.rb
|
171
|
+
- lib/db2_session/engine.rb
|
172
|
+
- lib/db2_session/manager.rb
|
173
|
+
- lib/db2_session/version.rb
|
174
|
+
homepage: https://github.com/yohaneslumentut/db2_session
|
175
|
+
licenses:
|
176
|
+
- MIT
|
177
|
+
metadata:
|
178
|
+
homepage_uri: https://github.com/yohaneslumentut/db2_session
|
179
|
+
source_code_uri: https://github.com/yohaneslumentut/db2_session
|
180
|
+
changelog_uri: https://github.com/yohaneslumentut/db2_session
|
181
|
+
post_install_message:
|
182
|
+
rdoc_options: []
|
183
|
+
require_paths:
|
184
|
+
- lib
|
185
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubygems_version: 3.0.3
|
197
|
+
signing_key:
|
198
|
+
specification_version: 4
|
199
|
+
summary: Rails Db2 API session manager plugin
|
200
|
+
test_files: []
|