arkaan 2.8.0 → 3.0.0
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/arkaan.rb +18 -16
- data/lib/arkaan/account.rb +22 -19
- data/lib/arkaan/authentication.rb +3 -1
- data/lib/arkaan/authentication/session.rb +10 -7
- data/lib/arkaan/campaign.rb +21 -19
- data/lib/arkaan/campaigns.rb +4 -2
- data/lib/arkaan/campaigns/invitation.rb +2 -2
- data/lib/arkaan/chatrooms.rb +7 -5
- data/lib/arkaan/chatrooms/base.rb +3 -1
- data/lib/arkaan/chatrooms/campaign.rb +3 -1
- data/lib/arkaan/chatrooms/conversation.rb +5 -1
- data/lib/arkaan/chatrooms/membership.rb +6 -2
- data/lib/arkaan/chatrooms/message.rb +5 -3
- data/lib/arkaan/concerns.rb +10 -8
- data/lib/arkaan/concerns/activable.rb +6 -4
- data/lib/arkaan/concerns/diagnosticable.rb +7 -5
- data/lib/arkaan/concerns/enumerable.rb +21 -9
- data/lib/arkaan/concerns/historizable.rb +7 -5
- data/lib/arkaan/concerns/mime_typable.rb +18 -10
- data/lib/arkaan/concerns/premiumable.rb +3 -1
- data/lib/arkaan/concerns/sluggable.rb +9 -8
- data/lib/arkaan/concerns/typable.rb +5 -3
- data/lib/arkaan/factories.rb +4 -2
- data/lib/arkaan/files.rb +6 -2
- data/lib/arkaan/files/document.rb +5 -3
- data/lib/arkaan/files/permission.rb +4 -2
- data/lib/arkaan/monitoring.rb +4 -2
- data/lib/arkaan/monitoring/route.rb +6 -3
- data/lib/arkaan/monitoring/service.rb +5 -3
- data/lib/arkaan/notification.rb +5 -2
- data/lib/arkaan/oauth.rb +6 -4
- data/lib/arkaan/oauth/access_token.rb +10 -8
- data/lib/arkaan/oauth/application.rb +17 -11
- data/lib/arkaan/oauth/authorization.rb +8 -6
- data/lib/arkaan/oauth/refresh_token.rb +7 -4
- data/lib/arkaan/permissions.rb +5 -3
- data/lib/arkaan/permissions/category.rb +4 -2
- data/lib/arkaan/permissions/group.rb +4 -2
- data/lib/arkaan/permissions/right.rb +8 -4
- data/lib/arkaan/ruleset.rb +6 -4
- metadata +2 -8
- data/lib/arkaan/decorators/errors.rb +0 -9
- data/lib/arkaan/decorators/errors/env_variable_missing.rb +0 -14
- data/lib/arkaan/decorators/gateway.rb +0 -109
- data/lib/arkaan/factories/errors.rb +0 -9
- data/lib/arkaan/factories/errors/gateway_not_found.rb +0 -14
- data/lib/arkaan/version.rb +0 -3
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Concerns
|
3
5
|
# Includes the diagnostic URL field, and the related validations.
|
@@ -9,14 +11,14 @@ module Arkaan
|
|
9
11
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
10
12
|
included do
|
11
13
|
# @!attribute [rw] diagnostic
|
12
|
-
# @return [String] the diagnostic URL to know the status of an
|
14
|
+
# @return [String] the diagnostic URL to know the status of an instance or a service.
|
13
15
|
field :diagnostic, type: String, default: '/status'
|
14
16
|
|
15
17
|
validates :diagnostic,
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
presence: { message: 'required' },
|
19
|
+
length: { minimum: 4, message: 'minlength' },
|
20
|
+
format: { with: %r{\A(\/[a-z]+)+\z}, message: 'pattern' }
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
22
|
-
end
|
24
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Concerns
|
3
5
|
# Defines enumerations for the Mongoid models. An enumeration is a field that can only use a given set of values.
|
@@ -8,7 +10,6 @@ module Arkaan
|
|
8
10
|
# Submodule holding all the static methods add to the current subclass.
|
9
11
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
10
12
|
module ClassMethods
|
11
|
-
|
12
13
|
# Creates the field with the given name, set of possible values, and options.
|
13
14
|
# @param field_name [String] the name of the enumerated field.
|
14
15
|
# @param values [Array<Symbol>] the possible values of the enumerated field.
|
@@ -16,18 +17,33 @@ module Arkaan
|
|
16
17
|
def enum_field(field_name, values, options = {})
|
17
18
|
returned = field :"enum_#{field_name}", type: Symbol, default: options[:default]
|
18
19
|
|
19
|
-
validates :"enum_#{field_name}", inclusion: {in: values.map(&:to_sym), message: 'inclusion'}
|
20
|
+
validates :"enum_#{field_name}", inclusion: { in: values.map(&:to_sym), message: 'inclusion' }
|
21
|
+
|
22
|
+
define_getter(field_name)
|
23
|
+
|
24
|
+
define_setter(field_name, values)
|
25
|
+
|
26
|
+
define_values_methods(field_name, values)
|
27
|
+
|
28
|
+
# This is to make enumerations historizable by
|
29
|
+
# returning the field object created by Mongoid.
|
30
|
+
returned
|
31
|
+
end
|
20
32
|
|
33
|
+
def define_getter(field_name)
|
21
34
|
define_method field_name do
|
22
35
|
return self["enum_#{field_name}"]
|
23
36
|
end
|
37
|
+
end
|
24
38
|
|
39
|
+
def define_setter(field_name, values)
|
25
40
|
define_method "#{field_name}=" do |value|
|
26
|
-
|
27
|
-
|
28
|
-
end
|
41
|
+
value = value.to_sym
|
42
|
+
self["enum_#{field_name}"] = value if values.include? value
|
29
43
|
end
|
44
|
+
end
|
30
45
|
|
46
|
+
def define_values_methods(field_name, values)
|
31
47
|
values.map(&:to_sym).each do |value|
|
32
48
|
define_method "#{field_name}_#{value}!" do
|
33
49
|
self["enum_#{field_name}"] = value
|
@@ -37,10 +53,6 @@ module Arkaan
|
|
37
53
|
self["enum_#{field_name}"] == value
|
38
54
|
end
|
39
55
|
end
|
40
|
-
|
41
|
-
# This is to make enumerations historizable by
|
42
|
-
# returning the field object created by Mongoid.
|
43
|
-
returned
|
44
56
|
end
|
45
57
|
end
|
46
58
|
end
|
@@ -35,20 +35,22 @@ module Arkaan
|
|
35
35
|
# Submodule holding all the static methods add to the current subclass.
|
36
36
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
37
37
|
module ClassMethods
|
38
|
-
|
39
38
|
# Takes the Mongoid declared field and creates the callbacks
|
40
39
|
# to intercept any value change and add it to the history.
|
41
40
|
# @field field [Mongoid::Fields::Standard] the Mongoid field to historize.
|
42
41
|
def historize(field)
|
42
|
+
embeds_many :history, class_name: 'Arkaan::Event' unless relations.key?('history')
|
43
|
+
historization_after_init(field)
|
44
|
+
historization_after_save(field)
|
45
|
+
end
|
43
46
|
|
44
|
-
|
45
|
-
embeds_many :history, class_name: 'Arkaan::Event'
|
46
|
-
end
|
47
|
-
|
47
|
+
def historization_after_init(field)
|
48
48
|
after_initialize do |doc|
|
49
49
|
add_history(field: field.name, from: nil, to: doc[field.name])
|
50
50
|
end
|
51
|
+
end
|
51
52
|
|
53
|
+
def historization_after_save(field)
|
52
54
|
after_save do |doc|
|
53
55
|
if doc.changed_attributes.key?(field.name)
|
54
56
|
from = doc.changed_attributes[field.name]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Concerns
|
3
5
|
# Includes the MIME type field to files to ensure only supported types are included.
|
@@ -11,32 +13,38 @@ module Arkaan
|
|
11
13
|
# Defines the MIME type attribute with the given possible MIME types.
|
12
14
|
# @param values [Array<String>] the possible MIME types, * can be used as wild cards.
|
13
15
|
def mime_type(values)
|
14
|
-
|
15
16
|
# @!attribute [rw] mime_type
|
16
17
|
# @return [String] the MIME type of the file, obtained from the uploaded file.
|
17
18
|
field :mime_type, type: String
|
18
|
-
|
19
|
-
validates :mime_type, presence: {message: 'required'}
|
19
|
+
|
20
|
+
validates :mime_type, presence: { message: 'required' }
|
20
21
|
|
21
22
|
validate :mime_type_validity, if: :mime_type?
|
22
23
|
|
24
|
+
mime_type_check(values)
|
25
|
+
end
|
26
|
+
|
27
|
+
def mime_type_check(values)
|
23
28
|
# Validates the validity of the MIME type by checking if it respects any of the given mime types.
|
24
29
|
# If it does not respect any MIME types possible, it adds an error to the mime_type field and invalidates.
|
25
30
|
define_method :mime_type_validity do
|
26
|
-
checked_types =
|
27
|
-
self.send(values) rescue []
|
28
|
-
else
|
29
|
-
values
|
30
|
-
end
|
31
|
+
checked_types = parse_values(values)
|
31
32
|
return true if checked_types.empty?
|
33
|
+
|
32
34
|
checked_types.each do |type|
|
33
35
|
type_regex = ::Regexp.new("^#{type.sub(/\*/, '(.+)')}$")
|
34
|
-
return true
|
36
|
+
return true unless type_regex.match(mime_type).nil?
|
35
37
|
end
|
36
38
|
errors.add(:mime_type, 'pattern')
|
37
39
|
end
|
38
40
|
end
|
41
|
+
|
42
|
+
def parse_values(values)
|
43
|
+
values.is_a?(Symbol) ? send(values) : values
|
44
|
+
rescue StandardError
|
45
|
+
[]
|
46
|
+
end
|
39
47
|
end
|
40
48
|
end
|
41
49
|
end
|
42
|
-
end
|
50
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Concerns
|
3
5
|
# Includes the slug field, always the same in all models.
|
@@ -9,19 +11,18 @@ module Arkaan
|
|
9
11
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
10
12
|
module ClassMethods
|
11
13
|
# Add the field and its validations in the model including it.
|
12
|
-
|
13
|
-
def make_sluggable(entity_type)
|
14
|
+
def make_sluggable
|
14
15
|
# @!attribute [rw] slug
|
15
|
-
# @return [String] the slug of the current entity
|
16
|
+
# @return [String] the slug of the current entity, in snake-case.
|
16
17
|
field :slug, type: String
|
17
18
|
|
18
19
|
validates :slug,
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
length: { minimum: 4, message: 'minlength', if: :slug? },
|
21
|
+
format: { with: /\A[a-z]+(_[a-z]+)*\z/, message: 'pattern', if: :slug? },
|
22
|
+
uniqueness: { message: 'uniq', if: :slug? },
|
23
|
+
presence: { message: 'required' }
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
27
|
-
end
|
28
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Concerns
|
3
5
|
# Concerns for the objects that can be activated or deactivated, included the corresponding scopes.
|
@@ -7,11 +9,11 @@ module Arkaan
|
|
7
9
|
|
8
10
|
included do
|
9
11
|
include Arkaan::Concerns::Enumerable
|
10
|
-
|
12
|
+
|
11
13
|
# @!attribute [rw] type
|
12
14
|
# @return [Symbol] the type of the instance, determining its way of being deployed, restarted, etc.
|
13
|
-
enum_field :type, [
|
15
|
+
enum_field :type, %i[heroku local unix], default: :heroku
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
17
|
-
end
|
19
|
+
end
|
data/lib/arkaan/factories.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
# Static factories are used to create decorated objects easily.
|
3
5
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
4
6
|
module Factories
|
5
7
|
autoload :Gateways, 'arkaan/factories/gateways'
|
6
|
-
autoload :Errors
|
8
|
+
autoload :Errors, 'arkaan/factories/errors'
|
7
9
|
end
|
8
|
-
end
|
10
|
+
end
|
data/lib/arkaan/files.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
4
|
+
# This module holds all logic for the files uploaded in a conversation.
|
5
|
+
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
2
6
|
module Files
|
3
|
-
autoload :Document
|
7
|
+
autoload :Document, 'arkaan/files/document'
|
4
8
|
autoload :Permission, 'arkaan/files/permission'
|
5
9
|
end
|
6
|
-
end
|
10
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Files
|
3
5
|
# a document is an uploaded file in the S3 clone application.
|
@@ -30,9 +32,9 @@ module Arkaan
|
|
30
32
|
# @return [Array<Arkaan::Files::Permission>] the permissions granted to access this file.
|
31
33
|
has_many :permissions, class_name: 'Arkaan::Files::Permission', inverse_of: :file
|
32
34
|
|
33
|
-
validates :name, :extension, :folder, :mime_type, presence: {message: 'required'}
|
35
|
+
validates :name, :extension, :folder, :mime_type, presence: { message: 'required' }
|
34
36
|
|
35
|
-
validates :folder, format: {without:
|
37
|
+
validates :folder, format: { without: %r{\/\/}, message: 'format' }
|
36
38
|
|
37
39
|
validate :filename_unicity
|
38
40
|
|
@@ -47,4 +49,4 @@ module Arkaan
|
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
50
|
-
end
|
52
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Files
|
3
5
|
# The permission granted to a user to access and/or delete a file.
|
@@ -9,7 +11,7 @@ module Arkaan
|
|
9
11
|
|
10
12
|
# @!attribute [rw] type
|
11
13
|
# @return [Symbol] the type of permission granted (is the user able to delete the file ?)
|
12
|
-
enum_field :type, [
|
14
|
+
enum_field :type, %i[read read_write]
|
13
15
|
|
14
16
|
# @!attribute [rw] file
|
15
17
|
# @return [Arkaan::Files::Document] the document the permission is linked to.
|
@@ -19,4 +21,4 @@ module Arkaan
|
|
19
21
|
belongs_to :account, class_name: 'Arkaan::Account', inverse_of: :permissions
|
20
22
|
end
|
21
23
|
end
|
22
|
-
end
|
24
|
+
end
|
data/lib/arkaan/monitoring.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
# The monitoring module holds all the logic about the services so they can be activated or deactivated.
|
3
5
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
4
6
|
module Monitoring
|
5
|
-
autoload :Route
|
7
|
+
autoload :Route, 'arkaan/monitoring/route'
|
6
8
|
autoload :Service, 'arkaan/monitoring/service'
|
7
9
|
end
|
8
|
-
end
|
10
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Monitoring
|
3
|
-
# A route is an endpoint accessible in a service. Each route has to have
|
5
|
+
# A route is an endpoint accessible in a service. Each route has to have
|
6
|
+
# an associated endpoint in the deployed instances.
|
4
7
|
# @param Vincent Courtois <courtois.vincent@outlook.com>
|
5
8
|
class Route
|
6
9
|
include Mongoid::Document
|
@@ -27,10 +30,10 @@ module Arkaan
|
|
27
30
|
has_and_belongs_to_many :groups, class_name: 'Arkaan::Permissions::Group', inverse_of: :groups
|
28
31
|
|
29
32
|
validates :path,
|
30
|
-
|
33
|
+
format: { with: %r{\A(\/|((\/:?[a-zA-Z0-9_]+)+))\z}, message: 'pattern', if: :path? }
|
31
34
|
|
32
35
|
validates :verb,
|
33
|
-
|
36
|
+
inclusion: { message: 'unknown', in: %w[get post put delete patch option] }
|
34
37
|
|
35
38
|
# Returns the complete path, enriched with the path of the service.
|
36
39
|
# @return [String] the complete path to access this route from the outside.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module Monitoring
|
3
5
|
# A service is the representation of one of the applications composing the API.
|
@@ -23,9 +25,9 @@ module Arkaan
|
|
23
25
|
# @return [Array<Arkaan::Monitoring::Route>] the routes associated to this service, accessible from the gateway.
|
24
26
|
has_many :routes, class_name: 'Arkaan::Monitoring::Route', inverse_of: :service
|
25
27
|
|
26
|
-
validates :key, uniqueness: {message: 'uniq'}
|
28
|
+
validates :key, uniqueness: { message: 'uniq' }
|
27
29
|
|
28
|
-
validates :path, format: {with:
|
30
|
+
validates :path, format: { with: %r{\A(\/:?[a-z]+)+\z}, message: 'pattern' }
|
29
31
|
end
|
30
32
|
end
|
31
|
-
end
|
33
|
+
end
|
data/lib/arkaan/notification.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
# A notification is a little something to warn a user that an action concerning him or her occurred.
|
3
5
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
@@ -12,11 +14,12 @@ module Arkaan
|
|
12
14
|
# @return [Boolean] TRUE if the notification has been read (seen by the user), FALSE otherwise.
|
13
15
|
field :read, type: Boolean, default: false
|
14
16
|
# @!attribute [rw] data
|
15
|
-
# @return [Hash] the custom data that can be attached to this notification,
|
17
|
+
# @return [Hash] the custom data that can be attached to this notification,
|
18
|
+
# for example for an invitation it can be the invited username.
|
16
19
|
field :data, type: Hash, default: {}
|
17
20
|
|
18
21
|
# @!attribute [rw] account
|
19
22
|
# @return [Arkaan::Account] the account concerned by this notification.
|
20
23
|
embedded_in :account, class_name: 'Arkaan::Account', inverse_of: :notifications
|
21
24
|
end
|
22
|
-
end
|
25
|
+
end
|
data/lib/arkaan/oauth.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
# This module holds the logic for the connection of an application to our API.
|
3
5
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
4
6
|
module OAuth
|
5
|
-
autoload :Application
|
7
|
+
autoload :Application, 'arkaan/oauth/application'
|
6
8
|
autoload :Authorization, 'arkaan/oauth/authorization'
|
7
|
-
autoload :AccessToken
|
8
|
-
autoload :RefreshToken
|
9
|
+
autoload :AccessToken, 'arkaan/oauth/access_token'
|
10
|
+
autoload :RefreshToken, 'arkaan/oauth/refresh_token'
|
9
11
|
end
|
10
|
-
end
|
12
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module OAuth
|
3
5
|
# An access token is the value assigned to the application
|
@@ -9,18 +11,18 @@ module Arkaan
|
|
9
11
|
|
10
12
|
# @!attribute [rw] value
|
11
13
|
# @return [String] the value of the token, returned to the application when built.
|
12
|
-
field :value, type: String, default: ->{ SecureRandom.hex }
|
14
|
+
field :value, type: String, default: -> { SecureRandom.hex }
|
13
15
|
# @!attribute [rw] expiration
|
14
|
-
# @return [Integer] the time, in seconds, after which the token is declared expired, and thus can't be used
|
15
|
-
field :expiration, type: Integer, default:
|
16
|
+
# @return [Integer] the time, in seconds, after which the token is declared expired, and thus can't be used.
|
17
|
+
field :expiration, type: Integer, default: 86_400
|
16
18
|
|
17
19
|
# @!attribute [rw] authorization
|
18
|
-
# @return [Arkaan::OAuth::Authorization] the authorization code that issued this token to the application
|
20
|
+
# @return [Arkaan::OAuth::Authorization] the authorization code that issued this token to the application.
|
19
21
|
belongs_to :authorization, class_name: 'Arkaan::OAuth::Authorization', inverse_of: :tokens
|
20
22
|
|
21
|
-
validates :value,
|
22
|
-
|
23
|
-
|
23
|
+
validates :value,
|
24
|
+
presence: { message: 'required' },
|
25
|
+
uniqueness: { message: 'uniq' }
|
24
26
|
|
25
27
|
# Checks if the current date is inferior to the creation date + expiration period
|
26
28
|
# @return [Boolean] TRUE if the token is expired, FALSE otherwise.
|
@@ -29,4 +31,4 @@ module Arkaan
|
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
32
|
-
end
|
34
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Arkaan
|
2
4
|
module OAuth
|
3
|
-
# An application is what is referred to in the OAuth2.0 RFC as a client,
|
5
|
+
# An application is what is referred to in the OAuth2.0 RFC as a client,
|
6
|
+
# wanting to access private informations about the user.
|
4
7
|
# @author Vincent Courtois <courtois.vincent@outlook.com>
|
5
8
|
class Application
|
6
9
|
include Mongoid::Document
|
@@ -11,9 +14,10 @@ module Arkaan
|
|
11
14
|
field :name, type: String
|
12
15
|
# @!attribute [rw] key
|
13
16
|
# @return [String] the unique key for the application, identifying it when requesting a token for the API.
|
14
|
-
field :application_key, type: String, default: ->{ SecureRandom.hex }
|
17
|
+
field :application_key, type: String, default: -> { SecureRandom.hex }
|
15
18
|
# @!attribute [rw] premium
|
16
|
-
# @return [Boolean] a value indicating whether the application should automatically receive a token
|
19
|
+
# @return [Boolean] a value indicating whether the application should automatically receive a token
|
20
|
+
# when an account is created, or not.
|
17
21
|
field :premium, type: Boolean, default: false
|
18
22
|
# @!attirbute [rw] redirect_uris
|
19
23
|
# @return [Array<String>] the redirection URIs used for this application.
|
@@ -23,17 +27,18 @@ module Arkaan
|
|
23
27
|
# @return [Arkaan::Account] the account that has created this application, considered its owner.
|
24
28
|
belongs_to :creator, class_name: 'Arkaan::Account', inverse_of: :applications
|
25
29
|
# @!attribute [rw] authorizations
|
26
|
-
# @return [Array<Arkaan::OAuth::Authorization>] the authorizations linked to the accounts
|
30
|
+
# @return [Array<Arkaan::OAuth::Authorization>] the authorizations linked to the accounts
|
31
|
+
# this application can get the data from.
|
27
32
|
has_many :authorizations, class_name: 'Arkaan::OAuth::Authorization', inverse_of: :application
|
28
33
|
|
29
34
|
validates :name,
|
30
|
-
|
31
|
-
|
32
|
-
|
35
|
+
presence: { message: 'required' },
|
36
|
+
length: { minimum: 6, message: 'minlength' },
|
37
|
+
uniqueness: { message: 'uniq' }
|
33
38
|
|
34
39
|
validates :application_key,
|
35
|
-
|
36
|
-
|
40
|
+
presence: { message: 'required' },
|
41
|
+
uniqueness: { message: 'uniq' }
|
37
42
|
|
38
43
|
validate :redirect_uris_values
|
39
44
|
|
@@ -41,11 +46,12 @@ module Arkaan
|
|
41
46
|
# - it is a string
|
42
47
|
# - it has a correct URL format.
|
43
48
|
def redirect_uris_values
|
49
|
+
regex = %r{\A(https?:\/\/)((([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*)|(localhost:[0-9]{2,4})\/?)\z}
|
44
50
|
redirect_uris.each do |uri|
|
45
51
|
if !uri.is_a? String
|
46
52
|
errors.add(:redirect_uris, 'type')
|
47
53
|
break
|
48
|
-
elsif uri.match(
|
54
|
+
elsif uri.match(regex).nil?
|
49
55
|
errors.add(:redirect_uris, 'format')
|
50
56
|
break
|
51
57
|
end
|
@@ -53,4 +59,4 @@ module Arkaan
|
|
53
59
|
end
|
54
60
|
end
|
55
61
|
end
|
56
|
-
end
|
62
|
+
end
|