shogun 6.2.1 → 6.2.2
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/lib/shogun/version.rb +1 -1
- data/scaffold/generate/resource.rb +15 -0
- data/scaffold/generate/resource/create.rb +10 -0
- data/scaffold/generate/resource/create/authorizer.rb +21 -0
- data/scaffold/generate/resource/create/control.rb +27 -0
- data/scaffold/generate/resource/create/denormalizer.rb +31 -0
- data/scaffold/generate/resource/create/normalizer.rb +22 -0
- data/scaffold/generate/resource/create/validator.rb +14 -0
- data/scaffold/generate/resource/destroy.rb +11 -0
- data/scaffold/generate/resource/destroy/authorizer.rb +21 -0
- data/scaffold/generate/resource/destroy/control.rb +37 -0
- data/scaffold/generate/resource/destroy/denormalizer.rb +31 -0
- data/scaffold/generate/resource/destroy/normalizer.rb +28 -0
- data/scaffold/generate/resource/destroy/validator.rb +20 -0
- data/scaffold/generate/resource/endpoint.rb +16 -0
- data/scaffold/generate/resource/list.rb +10 -0
- data/scaffold/generate/resource/list/authorizer.rb +21 -0
- data/scaffold/generate/resource/list/control.rb +26 -0
- data/scaffold/generate/resource/list/denormalizer.rb +33 -0
- data/scaffold/generate/resource/list/normalizer.rb +58 -0
- data/scaffold/generate/resource/list/validator.rb +24 -0
- data/scaffold/generate/resource/model.rb +21 -0
- data/scaffold/generate/resource/null.rb +11 -0
- data/scaffold/generate/resource/presenter.rb +24 -0
- data/scaffold/generate/resource/show.rb +10 -0
- data/scaffold/generate/resource/show/authorizer.rb +21 -0
- data/scaffold/generate/resource/show/control.rb +31 -0
- data/scaffold/generate/resource/show/denormalizer.rb +18 -0
- data/scaffold/generate/resource/show/normalizer.rb +37 -0
- data/scaffold/generate/resource/show/validator.rb +21 -0
- data/scaffold/generate/resource/update.rb +11 -0
- data/scaffold/generate/resource/update/authorizer.rb +21 -0
- data/scaffold/generate/resource/update/control.rb +37 -0
- data/scaffold/generate/resource/update/denormalizer.rb +31 -0
- data/scaffold/generate/resource/update/normalizer.rb +37 -0
- data/scaffold/generate/resource/update/validator.rb +14 -0
- data/scaffold/new/project/Envfile +17 -0
- data/scaffold/new/project/Gemfile +18 -0
- data/scaffold/new/project/LICENSE +22 -0
- data/scaffold/new/project/Procfile +1 -0
- data/scaffold/new/project/README.md +32 -0
- data/scaffold/new/project/Rakefile +9 -0
- data/scaffold/new/project/config.ru +8 -0
- data/scaffold/new/project/config/puma.rb +167 -0
- data/scaffold/new/project/gitignore +39 -0
- data/scaffold/new/project/lib/namespace.rb +29 -0
- data/scaffold/new/project/lib/namespace/accounts.rb +15 -0
- data/scaffold/new/project/lib/namespace/accounts/create.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/create/control.rb +27 -0
- data/scaffold/new/project/lib/namespace/accounts/create/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/create/normalizer.rb +42 -0
- data/scaffold/new/project/lib/namespace/accounts/create/validator.rb +34 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/authorizer.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/control.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/normalizer.rb +28 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/validator.rb +20 -0
- data/scaffold/new/project/lib/namespace/accounts/endpoint.rb +16 -0
- data/scaffold/new/project/lib/namespace/accounts/list.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/list/control.rb +26 -0
- data/scaffold/new/project/lib/namespace/accounts/list/denormalizer.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/list/normalizer.rb +58 -0
- data/scaffold/new/project/lib/namespace/accounts/list/validator.rb +24 -0
- data/scaffold/new/project/lib/namespace/accounts/model.rb +49 -0
- data/scaffold/new/project/lib/namespace/accounts/null.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/presenter.rb +40 -0
- data/scaffold/new/project/lib/namespace/accounts/show.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/show/control.rb +31 -0
- data/scaffold/new/project/lib/namespace/accounts/show/denormalizer.rb +22 -0
- data/scaffold/new/project/lib/namespace/accounts/show/normalizer.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/show/validator.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/update.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/update/authorizer.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/update/control.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/update/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/update/normalizer.rb +52 -0
- data/scaffold/new/project/lib/namespace/accounts/update/validator.rb +47 -0
- data/scaffold/new/project/lib/namespace/errors.rb +8 -0
- data/scaffold/new/project/lib/namespace/errors/denormalizer.rb +24 -0
- data/scaffold/new/project/lib/namespace/errors/presenter.rb +16 -0
- data/scaffold/new/project/lib/namespace/server.rb +54 -0
- data/scaffold/new/project/lib/namespace/sessions.rb +11 -0
- data/scaffold/new/project/lib/namespace/sessions/create.rb +11 -0
- data/scaffold/new/project/lib/namespace/sessions/create/authorizer.rb +19 -0
- data/scaffold/new/project/lib/namespace/sessions/create/control.rb +26 -0
- data/scaffold/new/project/lib/namespace/sessions/create/denormalizer.rb +30 -0
- data/scaffold/new/project/lib/namespace/sessions/create/normalizer.rb +31 -0
- data/scaffold/new/project/lib/namespace/sessions/create/validator.rb +21 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy.rb +10 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/control.rb +32 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/denormalizer.rb +29 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/normalizer.rb +20 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/validator.rb +16 -0
- data/scaffold/new/project/lib/namespace/sessions/endpoint.rb +13 -0
- data/scaffold/new/project/lib/namespace/sessions/model.rb +25 -0
- data/scaffold/new/project/lib/namespace/sessions/presenter.rb +40 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/endpoint_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/presenters_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/server_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/endpoint_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace_spec.rb +7 -0
- data/scaffold/new/project/spec/spec_helper.rb +3 -0
- metadata +138 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require "oj"
|
|
2
|
+
require "jwt"
|
|
3
|
+
|
|
4
|
+
module {{namespace_module}}
|
|
5
|
+
class Server
|
|
6
|
+
include Shogun::Server
|
|
7
|
+
|
|
8
|
+
VERSION = "1.0.0"
|
|
9
|
+
ORIGIN_WHITELIST = [ENV["CLIENT_HOST"]]
|
|
10
|
+
DESERIALIZATION_MAP = {
|
|
11
|
+
"*/*" => Oj,
|
|
12
|
+
"application/vnd.{{namespace}}+json; version=#{VERSION}" => Oj,
|
|
13
|
+
"application/json" => Oj
|
|
14
|
+
}
|
|
15
|
+
SERIALIZATION_MAP = {
|
|
16
|
+
"application/vnd.{{namespace}}+json; version=#{VERSION}" => Oj
|
|
17
|
+
}
|
|
18
|
+
DEFAULT_SERIALIZER = Oj
|
|
19
|
+
ACCEPT_TYPES = [
|
|
20
|
+
"application/vnd.{{namespace}}+json; version=#{VERSION}",
|
|
21
|
+
"application/json"
|
|
22
|
+
]
|
|
23
|
+
ENDPOINTS = ->(router) do
|
|
24
|
+
Accounts::Endpoint.new(router: router)
|
|
25
|
+
Sessions::Endpoint.new(router: router)
|
|
26
|
+
end
|
|
27
|
+
BEARER = ->(token) do
|
|
28
|
+
begin
|
|
29
|
+
JWT.decode(token, ENV["APPLICATION_SESSION_SECRET"]).first
|
|
30
|
+
rescue JWT::DecodeError
|
|
31
|
+
{}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
CORS = ->(policy) do
|
|
35
|
+
policy.allow do
|
|
36
|
+
origins(ENV["SERVER_HOST"], ENV["CLIENT_HOST"])
|
|
37
|
+
resource("*", headers: :any, methods: [:get, :post, :patch, :post, :delete, :options, :head])
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def initialize(rack:, logger:)
|
|
42
|
+
@rack = rack
|
|
43
|
+
@logger = logger
|
|
44
|
+
|
|
45
|
+
ActiveSupport::Cache::Store.logger = logger
|
|
46
|
+
|
|
47
|
+
Oj.default_options = {
|
|
48
|
+
mode: :object
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
serve
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
NAMESPACE = "sessions"
|
|
4
|
+
|
|
5
|
+
require_relative "sessions/model"
|
|
6
|
+
require_relative "sessions/endpoint"
|
|
7
|
+
require_relative "sessions/presenter"
|
|
8
|
+
require_relative "sessions/create"
|
|
9
|
+
require_relative "sessions/destroy"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
require_relative "create/control"
|
|
5
|
+
require_relative "create/authorizer"
|
|
6
|
+
require_relative "create/denormalizer"
|
|
7
|
+
require_relative "create/normalizer"
|
|
8
|
+
require_relative "create/validator"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
class Authorizer
|
|
5
|
+
include Shogun::Authorizer
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
def initialize(resource:, password:)
|
|
9
|
+
@resource = resource
|
|
10
|
+
@password = password
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def allowed?
|
|
14
|
+
@resource.password == password
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
class Control
|
|
5
|
+
include Shogun::Control
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
def initialize(payload:)
|
|
9
|
+
@normalizer = Normalizer.new(raw: payload.to_hash)
|
|
10
|
+
@validator = Validator.new(data: @normalizer)
|
|
11
|
+
|
|
12
|
+
if @validator.valid?
|
|
13
|
+
@model = Model.create(@normalizer.to_hash)
|
|
14
|
+
@presenter = Presenter.new(resource: @model)
|
|
15
|
+
@denormalizer = Denormalizer.new(object: @presenter)
|
|
16
|
+
@status = OK
|
|
17
|
+
else
|
|
18
|
+
@presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
|
|
19
|
+
@denormalizer = Errors::Denormalizer.new(object: @presenters)
|
|
20
|
+
@status = UNPROCESSABLE_ENTITY
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
class Denormalizer
|
|
5
|
+
include Shogun::Denormalizer
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
MAPPING = {
|
|
9
|
+
"token" => "token",
|
|
10
|
+
"accounts" => "accounts",
|
|
11
|
+
"created_at" => "created_at",
|
|
12
|
+
"accounts" => "accounts"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
def initialize(object:)
|
|
16
|
+
@object = object
|
|
17
|
+
@meta = object.meta
|
|
18
|
+
@links = object.links
|
|
19
|
+
@linked = object.linked
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private def document
|
|
23
|
+
mapping.inject({}) do |hash, (field, name)|
|
|
24
|
+
hash.merge(field => @object.public_send(name))
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
class Normalizer
|
|
5
|
+
include Shogun::Normalizer
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
ATTRIBUTES = %w|account|
|
|
9
|
+
|
|
10
|
+
def initialize(raw:)
|
|
11
|
+
if raw[namespace]
|
|
12
|
+
@key = raw[namespace]["key"]
|
|
13
|
+
@secret = raw[namespace]["secret"]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def key
|
|
18
|
+
@key.strip if @key.is_a?(String)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def secret
|
|
22
|
+
@secret
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def account
|
|
26
|
+
Accounts::Model.find_by(email: key) || Accounts::Model.find_by(username: key) || Accounts::Null.new
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Create
|
|
4
|
+
class Validator
|
|
5
|
+
include Shogun::Validator
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
PASSWORD_RANGE = 8..1024
|
|
9
|
+
|
|
10
|
+
def initialize(data:)
|
|
11
|
+
@verifiers = [
|
|
12
|
+
Shogun::Verifier::Presence.new(data: data.key, name: "key"),
|
|
13
|
+
Shogun::Verifier::Presence.new(data: data.secret, name: "secret"),
|
|
14
|
+
Shogun::Verifier::Range.new(data: data.secret, name: "secret", range: PASSWORD_RANGE),
|
|
15
|
+
Shogun::Verifier::Match.new(data: data.secret, name: "secret", comparison: data.account.password)
|
|
16
|
+
]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Destroy
|
|
4
|
+
class Control
|
|
5
|
+
include Shogun::Control
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
def initialize(payload:)
|
|
9
|
+
@normalizer = Normalizer.new(raw: payload.to_hash)
|
|
10
|
+
@validator = Validator.new(data: @normalizer)
|
|
11
|
+
|
|
12
|
+
if @validator.valid?
|
|
13
|
+
@model = Model.find_by(id: @normalizer.id)
|
|
14
|
+
|
|
15
|
+
if @model
|
|
16
|
+
@model.destroy
|
|
17
|
+
@presenter = Presenter.new(resource: @model)
|
|
18
|
+
@denormalizer = Denormalizer.new(object: @presenter)
|
|
19
|
+
@status = OK
|
|
20
|
+
else
|
|
21
|
+
@status = NOT_FOUND
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
@presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
|
|
25
|
+
@denormalizer = Errors::Denormalizer.new(object: @presenters)
|
|
26
|
+
@status = UNPROCESSABLE_ENTITY
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Destroy
|
|
4
|
+
class Denormalizer
|
|
5
|
+
include Shogun::Denormalizer
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
MAPPING = {
|
|
9
|
+
"token" => "token",
|
|
10
|
+
"created_at" => "created_at",
|
|
11
|
+
"destroyed_at" => "destroyed_at"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
def initialize(object:)
|
|
15
|
+
@object = object
|
|
16
|
+
@meta = object.meta
|
|
17
|
+
@links = object.links
|
|
18
|
+
@linked = object.linked
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private def document
|
|
22
|
+
mapping.inject({}) do |hash, (field, name)|
|
|
23
|
+
hash.merge(field => @object.public_send(name))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Destroy
|
|
4
|
+
class Normalizer
|
|
5
|
+
include Shogun::Normalizer
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
def initialize(raw:)
|
|
9
|
+
if raw["rack.authentication"] && raw["rack.authentication"]["sessions"]
|
|
10
|
+
@id = raw["rack.authentication"]["sessions"]["id"]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def id
|
|
15
|
+
@id
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
module Destroy
|
|
4
|
+
class Validator
|
|
5
|
+
include Shogun::Validator
|
|
6
|
+
include Sessions
|
|
7
|
+
|
|
8
|
+
def initialize(data:)
|
|
9
|
+
@verifiers = [
|
|
10
|
+
Shogun::Verifier::Presence.new(data: data.id, name: "id")
|
|
11
|
+
]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
class Endpoint
|
|
4
|
+
include Shogun::Endpoint
|
|
5
|
+
include Sessions
|
|
6
|
+
|
|
7
|
+
def initialize(router:)
|
|
8
|
+
router.push route: route(verb: :post, control: Create::Control)
|
|
9
|
+
router.push route: route(verb: :delete, control: Destroy::Control)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
class Model < ActiveRecord::Base
|
|
4
|
+
include BCrypt
|
|
5
|
+
include Sessions
|
|
6
|
+
|
|
7
|
+
self.table_name = NAMESPACE
|
|
8
|
+
|
|
9
|
+
belongs_to :account, class_name: "{{namespace_module}}::Accounts::Model", foreign_key: "account_id"
|
|
10
|
+
|
|
11
|
+
def self.setup!
|
|
12
|
+
ActiveRecord::Migration.create_table table_name, force: true, id: :uuid do |table|
|
|
13
|
+
table.string :account_id, null: false
|
|
14
|
+
table.index :account_id
|
|
15
|
+
|
|
16
|
+
table.datetime :created_at
|
|
17
|
+
table.index :created_at
|
|
18
|
+
|
|
19
|
+
table.datetime :destroyed_at
|
|
20
|
+
table.index :destroyed_at
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module {{namespace_module}}
|
|
2
|
+
module Sessions
|
|
3
|
+
class Presenter
|
|
4
|
+
include Shogun::Presenter
|
|
5
|
+
include Sessions
|
|
6
|
+
|
|
7
|
+
ALGORITHM = "HS512"
|
|
8
|
+
|
|
9
|
+
def token
|
|
10
|
+
JWT.encode(payload, secret, ALGORITHM)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def accounts
|
|
14
|
+
{
|
|
15
|
+
"id" => source.account_id
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def created_at
|
|
20
|
+
source.created_at.to_datetime.rfc3339
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def destroyed_at
|
|
24
|
+
source.destroyed_at.to_datetime.rfc3339 if source.destroyed_at
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private def secret
|
|
28
|
+
ENV["APPLICATION_SESSION_SECRET"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private def payload
|
|
32
|
+
{
|
|
33
|
+
"sessions" => {
|
|
34
|
+
"id" => source.id
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "spec_helper"
|