summaryrefslogtreecommitdiff
path: root/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'controllers')
-rw-r--r--controllers/cartridges.rb2
-rw-r--r--controllers/instance.rb8
-rw-r--r--controllers/interfaces/cli.rb23
-rw-r--r--controllers/interfaces/eval.rb4
-rw-r--r--controllers/security.rb27
-rw-r--r--controllers/session.rb12
6 files changed, 64 insertions, 12 deletions
diff --git a/controllers/cartridges.rb b/controllers/cartridges.rb
index 151cc46..fe0d56e 100644
--- a/controllers/cartridges.rb
+++ b/controllers/cartridges.rb
@@ -39,7 +39,7 @@ module NanoBot
rescue StandardError => _e
end
- cartridges.sort_by { |cartridge| cartridge[:meta][:name] }
+ cartridges = cartridges.sort_by { |cartridge| cartridge[:meta][:name] }
cartridges.prepend(
{ system: { id: '-' }, meta: { name: 'Default', symbol: 'šŸ¤–' } }
diff --git a/controllers/instance.rb b/controllers/instance.rb
index a982261..d4e0c1b 100644
--- a/controllers/instance.rb
+++ b/controllers/instance.rb
@@ -13,14 +13,16 @@ require_relative './session'
module NanoBot
module Controllers
class Instance
- def initialize(cartridge_path:, stream:, state: nil)
+ def initialize(cartridge_path:, stream:, state: nil, environment: {})
@stream = stream
load_cartridge!(cartridge_path)
- provider = Components::Provider.new(@cartridge[:provider])
+ provider = Components::Provider.new(@cartridge[:provider], environment:)
- @session = Session.new(provider:, cartridge: @cartridge, state:, stream: @stream)
+ @session = Session.new(
+ provider:, cartridge: @cartridge, state:, stream: @stream, environment:
+ )
end
def cartridge
diff --git a/controllers/interfaces/cli.rb b/controllers/interfaces/cli.rb
index da027f7..ae066cd 100644
--- a/controllers/interfaces/cli.rb
+++ b/controllers/interfaces/cli.rb
@@ -12,6 +12,28 @@ module NanoBot
when 'version'
puts NanoBot::GEM[:version]
exit
+ when 'security'
+ result = NanoBot.security.check
+
+ if result[:encryption]
+ puts "\nāœ… Encryption is enabled and properly working."
+ puts ' This means that your data is stored in an encrypted format on your disk.'
+ else
+ puts "\nāŒ Encryption is not being utilized to store your content."
+ puts ' This means that your data can be easily read because it is stored in plaintext.'
+ end
+
+ if result[:password]
+ puts "\nāœ… A password is being used for the encrypted content."
+ puts ' This means that only those who possess the password can decrypt your data.'
+ else
+ puts "\nāŒ No custom password is being used for the encrypted content."
+ puts ' This means that anyone can easily decrypt your data.'
+ end
+
+ puts ''
+
+ exit
when 'help', '', nil
puts ''
puts "Nano Bots #{NanoBot::GEM[:version]}"
@@ -34,6 +56,7 @@ module NanoBot
puts ' nb - STATE-KEY state'
puts ' nb cartridge.yml STATE-KEY state'
puts ''
+ puts ' nb security'
puts ' nb version'
puts ' nb help'
puts ''
diff --git a/controllers/interfaces/eval.rb b/controllers/interfaces/eval.rb
index 5f472ad..9613b28 100644
--- a/controllers/interfaces/eval.rb
+++ b/controllers/interfaces/eval.rb
@@ -1,9 +1,5 @@
# frozen_string_literal: true
-require 'pry'
-require 'rainbow'
-
-require_relative '../../logic/helpers/hash'
require_relative '../../logic/cartridge/affixes'
module NanoBot
diff --git a/controllers/security.rb b/controllers/security.rb
new file mode 100644
index 0000000..8f066a5
--- /dev/null
+++ b/controllers/security.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require_relative '../components/crypto'
+
+module NanoBot
+ module Controllers
+ module Security
+ def self.decrypt(content)
+ Components::Crypto.decrypt(content)
+ end
+
+ def self.check
+ password = ENV.fetch('NANO_BOTS_ENCRYPTION_PASSWORD', nil)
+ password = 'UNSAFE' unless password && password != ''
+
+ {
+ encryption: (
+ Components::Crypto.encrypt('SAFE') != 'SAFE' &&
+ Components::Crypto.encrypt('SAFE') != Components::Crypto.encrypt('SAFE') &&
+ Components::Crypto.decrypt(Components::Crypto.encrypt('SAFE')) == 'SAFE'
+ ),
+ password: password != 'UNSAFE'
+ }
+ end
+ end
+ end
+end
diff --git a/controllers/session.rb b/controllers/session.rb
index 270b623..4694911 100644
--- a/controllers/session.rb
+++ b/controllers/session.rb
@@ -9,6 +9,7 @@ require_relative '../logic/cartridge/streaming'
require_relative '../logic/cartridge/interaction'
require_relative '../components/storage'
require_relative '../components/adapter'
+require_relative '../components/crypto'
module NanoBot
module Controllers
@@ -17,7 +18,7 @@ module NanoBot
class Session
attr_accessor :stream
- def initialize(provider:, cartridge:, state: nil, stream: $stdout)
+ def initialize(provider:, cartridge:, state: nil, stream: $stdout, environment: {})
@stream = stream
@provider = provider
@cartridge = cartridge
@@ -28,8 +29,9 @@ module NanoBot
@state = { history: [] }
else
@state_path = Components::Storage.build_path_and_ensure_state_file!(
- state.strip, @cartridge
+ state.strip, @cartridge, environment:
)
+
@state = load_state
end
end
@@ -39,11 +41,13 @@ module NanoBot
end
def load_state
- @state = Logic::Helpers::Hash.symbolize_keys(JSON.parse(File.read(@state_path)))
+ @state = Logic::Helpers::Hash.symbolize_keys(JSON.parse(
+ Components::Crypto.decrypt(File.read(@state_path))
+ ))
end
def store_state!
- File.write(@state_path, JSON.generate(@state))
+ File.write(@state_path, Components::Crypto.encrypt(JSON.generate(@state)))
end
def boot(mode:)