diff options
Diffstat (limited to 'controllers')
-rw-r--r-- | controllers/cartridges.rb | 2 | ||||
-rw-r--r-- | controllers/instance.rb | 8 | ||||
-rw-r--r-- | controllers/interfaces/cli.rb | 23 | ||||
-rw-r--r-- | controllers/interfaces/eval.rb | 4 | ||||
-rw-r--r-- | controllers/security.rb | 27 | ||||
-rw-r--r-- | controllers/session.rb | 12 |
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:) |