web47core 1.0.2 → 1.0.7
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/app/assets/javascript/clipboard.coffee +34 -0
- data/app/assets/stylesheets/clipboard.scss +13 -0
- data/app/helpers/core_link_helper.rb +1 -1
- data/lib/app/jobs/cron/job_tab.rb +1 -1
- data/lib/app/models/concerns/cipher_able.rb +51 -0
- data/lib/app/models/concerns/encrypted_password.rb +41 -0
- data/lib/web47core.rb +2 -0
- data/lib/web47core/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e47d367b65524e64ca9fdfe7a20cd32913601f00e65cde6dd64b123731de01c
|
4
|
+
data.tar.gz: 82673c3c6a38c473e6207d14cbd5c6a7f7795e4aca35ae334884e08a9a2e2690
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60930a3608223f8ddf7f93f51206c8f2a8ab7779b59a022dc32489edf02f838e91b7ec1f620b005bd784c2ae609c9d53d8028f1c2332f03f3ff587601920cbe0
|
7
|
+
data.tar.gz: 238254a8922918c08ea3074fb70af71b0c9e8f01ac9567b689a2d6d696655e220feff73e6c605e53102aa5422c4827040742d6a366b5338cdbc6e399262add81
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Enable copy capability to the machines copy/paste buffer
|
3
|
+
#
|
4
|
+
$(document).ready ->
|
5
|
+
if clipboardEnabled()
|
6
|
+
$('a.copy').on 'click', (e) ->
|
7
|
+
node = e.target
|
8
|
+
textField = document.createElement('textarea')
|
9
|
+
node.parentNode.insertBefore(textField, node)
|
10
|
+
try
|
11
|
+
textField.innerText = $(this).data('clipboard-text')
|
12
|
+
textField.select()
|
13
|
+
textField.focus()
|
14
|
+
if document.execCommand('copy')
|
15
|
+
M.toast({html: 'Copied!'}, 3000);
|
16
|
+
else
|
17
|
+
M.toast({html: 'Unable to copy text'}, 3000);
|
18
|
+
catch error
|
19
|
+
M.toast({html: 'Unable to copy text'}, 3000);
|
20
|
+
finally
|
21
|
+
textField.parentNode.removeChild(textField)
|
22
|
+
|
23
|
+
else
|
24
|
+
$('.copy').hide()
|
25
|
+
|
26
|
+
#
|
27
|
+
# Test that we can issue the execCommand for copy and that it returns
|
28
|
+
#
|
29
|
+
clipboardEnabled = ->
|
30
|
+
try
|
31
|
+
document.execCommand('copy')
|
32
|
+
true
|
33
|
+
catch error
|
34
|
+
false
|
@@ -17,7 +17,7 @@ module CoreLinkHelper
|
|
17
17
|
# Setup the text as copy text
|
18
18
|
#
|
19
19
|
def copy_tag(copy_text, options = {})
|
20
|
-
content_tag(:
|
20
|
+
content_tag(:div, class: 'clipboard') do
|
21
21
|
concat(content_tag(:span) { copy_text })
|
22
22
|
concat(copy_text_tag(copy_text, options))
|
23
23
|
concat(download_tag(options[:download_url], options)) if options[:download_url].present?
|
@@ -38,7 +38,7 @@ module Cron
|
|
38
38
|
def job_names
|
39
39
|
@job_names ||= all_jobs.collect do |job|
|
40
40
|
job_name = job.to_s
|
41
|
-
next if FRAMEWORK_CLASSES.include?(job_name) || job_name.end_with?('
|
41
|
+
next if FRAMEWORK_CLASSES.include?(job_name) || job_name.end_with?('_test') || job_name.start_with?('base_')
|
42
42
|
|
43
43
|
job_name.underscore
|
44
44
|
end.compact
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# A mixin to help with encrypting data in a secure way
|
3
|
+
#
|
4
|
+
module CipherAble
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
# Add to the model
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
#
|
10
|
+
# Fields
|
11
|
+
#
|
12
|
+
field :secret_key, type: BSON::Binary
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
#
|
17
|
+
# Encrypt the given text
|
18
|
+
#
|
19
|
+
def encrypt(text)
|
20
|
+
cipher.encrypt_and_sign(text)
|
21
|
+
rescue StandardError => error
|
22
|
+
App47Logger.log_error("Unable to encrypt text for #{inspect}", error)
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Decrypt the given text
|
28
|
+
#
|
29
|
+
def decrypt(text)
|
30
|
+
cipher.decrypt_and_verify(text)
|
31
|
+
rescue StandardError => error
|
32
|
+
App47Logger.log_warn("Unable to decrypt text for #{inspect}", error)
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# Get the cipher directly
|
38
|
+
#
|
39
|
+
def cipher
|
40
|
+
generate_key if secret_key.blank?
|
41
|
+
ActiveSupport::MessageEncryptor.new(secret_key.data)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def generate_key
|
47
|
+
len = ActiveSupport::MessageEncryptor.key_len
|
48
|
+
salt = SecureRandom.random_bytes(len)
|
49
|
+
set secret_key: BSON::Binary.new(ActiveSupport::KeyGenerator.new(id.to_s).generate_key(salt, len))
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# Hold onto a secure password supporting both storage (setting) and retrieval ()getting) the password.
|
3
|
+
#
|
4
|
+
# The security will lie in the key that is offered by the object. By default it will be the ID of the object
|
5
|
+
# however it should really use be combined with some other known value like account.id or something
|
6
|
+
#
|
7
|
+
module EncryptedPassword
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
#
|
10
|
+
# Base class extension
|
11
|
+
#
|
12
|
+
def self.included(base)
|
13
|
+
base.class_eval do
|
14
|
+
include CipherAble
|
15
|
+
#
|
16
|
+
# Fields
|
17
|
+
#
|
18
|
+
field :encrypted_password, type: String
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
# Retrieve the password
|
24
|
+
#
|
25
|
+
def password
|
26
|
+
cipher.decrypt_and_verify(encrypted_password)
|
27
|
+
rescue StandardError => error
|
28
|
+
App47Logger.log_warn("Unable to retrieve password for #{inspect}", error)
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Set the password
|
34
|
+
#
|
35
|
+
def password=(password)
|
36
|
+
set encrypted_password: cipher.encrypt_and_sign(password)
|
37
|
+
rescue StandardError => error
|
38
|
+
App47Logger.log_error("Unable to store password for #{inspect}", error)
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
end
|
data/lib/web47core.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'web47core/config'
|
2
2
|
require 'app/models/concerns/app47_logger'
|
3
|
+
require 'app/models/concerns/cipher_able'
|
3
4
|
require 'app/models/concerns/cdn_url'
|
4
5
|
require 'app/models/concerns/email_able'
|
5
6
|
require 'app/models/concerns/search_able'
|
@@ -10,6 +11,7 @@ require 'app/models/concerns/switchboard_able'
|
|
10
11
|
require 'app/models/concerns/core_system_configuration'
|
11
12
|
require 'app/models/concerns/core_account'
|
12
13
|
require 'app/models/concerns/secure_fields'
|
14
|
+
require 'app/models/concerns/encrypted_password'
|
13
15
|
require 'app/models/delayed_job'
|
14
16
|
require 'app/models/redis_configuration'
|
15
17
|
require 'app/models/notification'
|
data/lib/web47core/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web47core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Schroeder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -570,7 +570,9 @@ files:
|
|
570
570
|
- LICENSE
|
571
571
|
- README.md
|
572
572
|
- app/assets/images/1x1.png
|
573
|
+
- app/assets/javascript/clipboard.coffee
|
573
574
|
- app/assets/javascript/flash.coffee
|
575
|
+
- app/assets/stylesheets/clipboard.scss
|
574
576
|
- app/controllers/exceptions_controller.rb
|
575
577
|
- app/controllers/notifications_controller.rb
|
576
578
|
- app/controllers/status_controller.rb
|
@@ -631,9 +633,11 @@ files:
|
|
631
633
|
- lib/app/models/audit_log.rb
|
632
634
|
- lib/app/models/concerns/app47_logger.rb
|
633
635
|
- lib/app/models/concerns/cdn_url.rb
|
636
|
+
- lib/app/models/concerns/cipher_able.rb
|
634
637
|
- lib/app/models/concerns/core_account.rb
|
635
638
|
- lib/app/models/concerns/core_system_configuration.rb
|
636
639
|
- lib/app/models/concerns/email_able.rb
|
640
|
+
- lib/app/models/concerns/encrypted_password.rb
|
637
641
|
- lib/app/models/concerns/role_able.rb
|
638
642
|
- lib/app/models/concerns/search_able.rb
|
639
643
|
- lib/app/models/concerns/secure_fields.rb
|