arkaan 3.0.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/arkaan/account.rb +2 -0
- data/lib/arkaan/authentication.rb +1 -0
- data/lib/arkaan/authentication/device.rb +29 -0
- data/lib/arkaan/authentication/session.rb +20 -4
- data/lib/arkaan/oauth/application.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65f8289754a8004de723395b4b56b51c3a03298e12e2862bb93229a0b5a2628c
|
4
|
+
data.tar.gz: 784a148f4f3ceb643e5b2e644e0c79afd5207aaa8ed5c82c9dadd6b264a0ee6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4553b140636382535cfaa9157d711c4e96d42e79c6f52dc4665eead60c9d73f9b9eaea1ab6c1f8f9849d8ae1f57d7ec880baacd67e42981ed663dca68c7a91bf
|
7
|
+
data.tar.gz: af868a3f99aea837395fb859bb0c5fe056d5b4f2c109c524a5eca7f077f0c03965d22d006f99e5121ec0bb40a1f09c30ffd6a9d5c63ef7c6ecf81acae0967801
|
data/lib/arkaan/account.rb
CHANGED
@@ -4,6 +4,7 @@ module Arkaan
|
|
4
4
|
# This module holds the logic for user authentication to our frontend.
|
5
5
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
6
6
|
module Authentication
|
7
|
+
autoload :Device, 'arkaan/authentication/device'
|
7
8
|
autoload :Session, 'arkaan/authentication/session'
|
8
9
|
end
|
9
10
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Arkaan
|
4
|
+
module Authentication
|
5
|
+
# A device is a computer or mobile phone from which a user logs in.
|
6
|
+
# @pauthor Vincent Courtois <courtois.vincent@outlook.com>
|
7
|
+
class Device
|
8
|
+
include Mongoid::Document
|
9
|
+
include Mongoid::Timestamps
|
10
|
+
|
11
|
+
# @!attribute [rw] label
|
12
|
+
# @return [String] the label attached to the device, describing it in details.
|
13
|
+
field :label, type: String
|
14
|
+
# @!attribute [rw] user_agent
|
15
|
+
# @return [String] the string representation of the browser and OS of the user
|
16
|
+
field :user_agent, type: String
|
17
|
+
# @!attribute [rw] ip
|
18
|
+
# @return [String] the IP address of the user
|
19
|
+
field :ip, type: String
|
20
|
+
# @!attribute [rw] safe
|
21
|
+
# @return [Boolean] TRUE if the device is considered safe, FALSE otherwise
|
22
|
+
field :safe, type: Boolean, default: false
|
23
|
+
|
24
|
+
# @!attribute [rw] sessions
|
25
|
+
# @return [Array<Arkaan::Authentication::Session] the sessions this browser is linked to.
|
26
|
+
has_many :sessions, class_name: 'Arkaan::Authentication::Session', inverse_of: :device
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -12,20 +12,36 @@ module Arkaan
|
|
12
12
|
|
13
13
|
# @!attribute [rw] token
|
14
14
|
# @return [String] the unique token for this session, used to identify it and be sure the user is connected.
|
15
|
-
field :
|
15
|
+
field :session_id, type: String
|
16
16
|
# @!attribute [rw] websocket_id
|
17
17
|
# @return [String] the ID of the websocket the user is connected to.
|
18
18
|
# It's not an association because instances are embedded.
|
19
19
|
field :websocket_id, type: String, default: ''
|
20
|
+
# @!attribute [rw] duration
|
21
|
+
# @return [Integer] the duration of the session in seconds before it expires.
|
22
|
+
field :duration, type: Integer, default: 86_400
|
20
23
|
|
21
24
|
# @!attribute [rw] account
|
22
25
|
# @return [Arkaan::Account] the account connected to the application.
|
23
26
|
belongs_to :account, class_name: 'Arkaan::Account', inverse_of: :sessions
|
27
|
+
# @!attribute [rw] device
|
28
|
+
# @return [Arkaan::Authentication::Device] the device (computer/mobile) linked to this session
|
29
|
+
belongs_to :device, class_name: 'Arkaan::Authentication::Device', inverse_of: :sessions, optional: true
|
24
30
|
|
25
|
-
validates :
|
31
|
+
validates :session_id,
|
26
32
|
presence: { message: 'required' },
|
27
|
-
uniqueness: { message: 'uniq', if: :
|
28
|
-
length: { minimum: 10, message: 'minlength', if: :
|
33
|
+
uniqueness: { message: 'uniq', if: :session_id? },
|
34
|
+
length: { minimum: 10, message: 'minlength', if: :session_id? }
|
35
|
+
|
36
|
+
validates :duration,
|
37
|
+
numericality: { greater_than_or_equal_to: 0, message: 'minimum' },
|
38
|
+
presence: { message: 'required' }
|
39
|
+
|
40
|
+
# Checks if the session is expired (it has a duration, and the duration has passed)
|
41
|
+
# @return [Boolean] TRUE if the session is expired, FALSE otherwise.
|
42
|
+
def expired?
|
43
|
+
duration != 0 && created_at + duration.to_f < DateTime.now
|
44
|
+
end
|
29
45
|
end
|
30
46
|
end
|
31
47
|
end
|
@@ -14,7 +14,7 @@ module Arkaan
|
|
14
14
|
field :name, type: String
|
15
15
|
# @!attribute [rw] key
|
16
16
|
# @return [String] the unique key for the application, identifying it when requesting a token for the API.
|
17
|
-
field :
|
17
|
+
field :app_key, type: String, default: -> { SecureRandom.hex }
|
18
18
|
# @!attribute [rw] premium
|
19
19
|
# @return [Boolean] a value indicating whether the application should automatically receive a token
|
20
20
|
# when an account is created, or not.
|
@@ -36,7 +36,7 @@ module Arkaan
|
|
36
36
|
length: { minimum: 6, message: 'minlength' },
|
37
37
|
uniqueness: { message: 'uniq' }
|
38
38
|
|
39
|
-
validates :
|
39
|
+
validates :app_key,
|
40
40
|
presence: { message: 'required' },
|
41
41
|
uniqueness: { message: 'uniq' }
|
42
42
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arkaan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Courtois
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: database_cleaner
|
@@ -313,6 +313,7 @@ files:
|
|
313
313
|
- lib/arkaan.rb
|
314
314
|
- lib/arkaan/account.rb
|
315
315
|
- lib/arkaan/authentication.rb
|
316
|
+
- lib/arkaan/authentication/device.rb
|
316
317
|
- lib/arkaan/authentication/session.rb
|
317
318
|
- lib/arkaan/campaign.rb
|
318
319
|
- lib/arkaan/campaigns.rb
|