reedb 0.10.rc1

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.
@@ -0,0 +1,101 @@
1
+ # ====================================================
2
+ # Copyright 2015 Lonely Robot (see @author)
3
+ # @author: Katharina Sabel | www.2rsoftworks.de
4
+ #
5
+ # Distributed under the GNU Lesser GPL Version 3
6
+ # (See accompanying LICENSE file or get a copy at
7
+ # https://www.gnu.org/licenses/lgpl.html)
8
+ # ====================================================
9
+
10
+ require_relative 'utilities'
11
+
12
+ module Reedb
13
+ class Version1
14
+ attr_reader :timestamp, :revision
15
+
16
+ def initialize(existing = nil)
17
+
18
+ # If a version is created from an existing pattern
19
+ if existing != nil
20
+ existing["R"] = "" if existing[0] == "R"
21
+ data = existing.split('::')
22
+ @revision = data[0].to_i
23
+ @timestamp = data[1].to_i
24
+ return self
25
+ end
26
+
27
+ # This creates a new version
28
+ @revision = 1
29
+ @timestamp = DateTime.now.strftime('%Q')
30
+ end
31
+
32
+ def update
33
+ @revision += 1
34
+ @timestamp = DateTime.now.strftime('%Q')
35
+ end
36
+
37
+ # This formatting is actually used in the dataset
38
+ def to_s
39
+ return "R#{@revision}::#{@timestamp}"
40
+ end
41
+ end
42
+
43
+ # Has been depreciated in version 0.9.9 (of Reedb, not the class)
44
+ # Too specific and broad usecase. Was replaced with the new Version
45
+ # DO NOT USE!
46
+ #
47
+ class Version_spec
48
+
49
+ attr_reader :host, :timestamp, :numeral
50
+
51
+ def initialize(existing = nil)
52
+ puts "DO NOT USE! Use 'Reedb::Version' INSTEAD!"
53
+ if existing
54
+ data = existing.split('_')
55
+ @host = data[0]
56
+
57
+ # Hack to make the version numeral work.
58
+ @numeral = data[1].split('.')
59
+ @numeral[0] = @numeral[0].to_i
60
+ @numeral[1] = @numeral[1].to_i
61
+
62
+ @timestamp = data[2]
63
+ @timestamp = @timestamp.to_i
64
+ return self
65
+ end
66
+ @host = Reedb::Utilities::parse_host
67
+ @timestamp = DateTime.now.strftime('%Q')
68
+ @numeral = [0, 0]
69
+ @timestamp = @timestamp.to_i
70
+ end
71
+
72
+ def update
73
+ @timestamp = DateTime.now.strftime('%Q')
74
+ @host == Reedb::Utilities::parse_host ? incr_last : incr_first
75
+ @host = Reedb::Utilities::parse_host
76
+ end
77
+
78
+ # def greater(other)
79
+ # if @timestamp > other.timestamp
80
+ # puts "This is greater"
81
+ # else
82
+ # puts "Other is greater"
83
+ # end
84
+ # end
85
+
86
+ def to_s
87
+ return [@host, @numeral.join('.'), @timestamp].join('_')
88
+ end
89
+
90
+ private
91
+
92
+ def incr_first
93
+ @numeral[0] += 1
94
+ @numeral[-1] = 0
95
+ end
96
+
97
+ def incr_last
98
+ @numeral[-1] += 1
99
+ end
100
+ end
101
+ end
data/reedb.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('./lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require_relative 'lib/reedb/constants'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "reedb"
8
+ spec.version = Reedb::VERSION
9
+ spec.authors = ["Lonely Robot", "Katharina Sabel"]
10
+ spec.email = ["sabel.katharina@gmail.com"]
11
+ spec.summary = %q{Ruby storage containers/ database that uses completely encrpypted files for maximum security.}
12
+ spec.description = %q{Ruby storage containers/ database. Uses Rinjdael, Twofish, ... to keep your data safe. Made for native and local application development. Spawns a system daemon that manages vaults that applications can talk to.}
13
+ spec.homepage = "https://github.com/tr-lonelyrobot/reedb/wiki"
14
+ spec.license = "LGPL v3.0"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency 'aes', '~> 0.5'
25
+ spec.add_dependency 'twofish', '~> 1.0'
26
+ spec.add_dependency 'digest-tiger', '~> 1.0'
27
+ spec.add_dependency 'json', '~> 1.8'
28
+ spec.add_dependency 'daemons', '~> 1.2'
29
+ spec.add_dependency 'sinatra', '~> 1.4'
30
+ spec.add_dependency 'hashids', '~> 1.0'
31
+ end
@@ -0,0 +1,27 @@
1
+ # this is my_daemons.rb
2
+ require 'daemons'
3
+ require_relative '../../lib/reedb/utils/logger'
4
+ require_relative '../../lib/reedb/utils/utilities'
5
+
6
+ puts "Output 1"
7
+
8
+ # Initialize the app while we're not a daemon
9
+ Reedb::DaemonLogger.setup("/home/spacekookie/Desktop")
10
+ # server = TCPServer.open(2000)
11
+
12
+ puts "Init done"
13
+
14
+
15
+ # Become a daemon
16
+ Daemons.daemonize
17
+
18
+ Reedb::DaemonLogger.write("Daemon created")
19
+
20
+ # The server loop
21
+ loop do
22
+ # puts "Loop!"
23
+ # client = server.accept
24
+ # params = JSON.parse(client.gets)
25
+ Reedb::DaemonLogger.write("Still alive")
26
+ sleep(1)
27
+ end
data/tests/layout.rb ADDED
@@ -0,0 +1,24 @@
1
+ module Reedb
2
+
3
+ module Config
4
+ module Master
5
+ class << self
6
+ def config
7
+ puts "Master Config"
8
+ end
9
+ end
10
+ end
11
+
12
+ module Vault
13
+ class << self
14
+ def config
15
+ puts "Vault Config"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+ Reedb::Config::Master::config
24
+ Reedb::Config::Vault::config
@@ -0,0 +1,14 @@
1
+ require 'socket'
2
+ require 'json'
3
+
4
+ host = 'localhost'
5
+ port = 2000
6
+
7
+ s = TCPSocket.open(host, port)
8
+
9
+ data = {'body'=>{"who's the boss?"=>"ME BITCHES!!!"}}
10
+
11
+ request = data.to_json
12
+ s.print(request)
13
+
14
+ s.close
@@ -0,0 +1,14 @@
1
+ require 'socket'
2
+ require 'json'
3
+ require 'daemons'
4
+
5
+ server = TCPServer.open(2000)
6
+
7
+ Daemons.daemonize
8
+
9
+ loop {
10
+ client = server.accept
11
+ params = JSON.parse(client.gets)
12
+ puts params
13
+ # raise params.inspect
14
+ }
data/tests/play.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'aes'
2
+
3
+ k = AES.key
4
+ data = AES.encrypt(k, "this_is_my_mega_secure_penis_i_mean_password_yo_bitch")
5
+ File.open("readme", "wb").write(Base64.encode64(data))
@@ -0,0 +1,49 @@
1
+ require 'json'
2
+ require 'yaml'
3
+ require 'aes'
4
+
5
+ data = {}
6
+ data['header'] = {}
7
+ data['header']['header'] =
8
+ data['header']['name'] = "Entry name"
9
+ data['header']['url'] = "www.entry.com"
10
+ data['header']['version'] = "1.1"
11
+
12
+ data['content'] = {}
13
+
14
+ data['content']['1.0'] = {}
15
+ data['content']['1.0']['username'] = 'spacekookie'
16
+ data['content']['1.0']['password'] = 'blume123'
17
+
18
+ data['content']['1.1'] = {}
19
+ data['content']['1.1']['reason'] = 'My reason to edit this entry was BEWBS!'
20
+ data['content']['1.1']['note'] = 'This is an example note'
21
+ data['content']['1.1']['password'] = '123brei'
22
+
23
+ @key = AES.key
24
+
25
+ rounds = 10
26
+
27
+ start_json = Time.now
28
+
29
+ rounds.times do |x|
30
+ json_data = data.to_json
31
+ encrypted_json = AES.encrypt(json_data, @key)
32
+ File.open("json#{x}.ree", "wb").write(Base64.encode64("#{encrypted_json}")) # => Using ASCII Armour
33
+ end
34
+ end_json = Time.now
35
+ puts "JSON ==> #{((end_json - start_json)) * 1000} ms"
36
+
37
+ start_yaml = Time.now
38
+
39
+ rounds.times do |x|
40
+ yaml_data = data.to_yaml
41
+ encrypted_yaml = AES.encrypt(yaml_data, @key)
42
+ File.open("yaml#{x}.ree", "wb").write(Base64.encode64("#{encrypted_yaml}")) # => Using ASCII Armour
43
+ end
44
+ end_yaml = Time.now
45
+ puts "YAML ==> #{((end_yaml - start_yaml)) * 1000} ms"
46
+
47
+ #
48
+ # JSON IS A CLEAR!!! Winner!
49
+ #
data/tests/tests.rb ADDED
@@ -0,0 +1,64 @@
1
+
2
+ # user_pw = "1234567890123"
3
+
4
+ # Reedb.init(:unix, 12) # => defines OS and minimal password length on vault
5
+ # path = File.expand_path('~/Desktop/reedb')
6
+
7
+ # # Default encryption is set to 'aes'
8
+ # begin
9
+ # Reedb.vault('default', "#{path}", :aes).load(user_pw)
10
+ # rescue VaultDoesNotExistError, VaultExistsAtLocationError => e
11
+ # puts e.message
12
+ # puts "If you think this is a bug, please report it <3"
13
+ # # exit
14
+ # end
15
+
16
+ # data = {
17
+ # 'body'=>{
18
+ # 'password'=>'mega_secure_password',
19
+ # 'username'=>'spacekookie'
20
+ # }
21
+ # }
22
+
23
+ # data2 = {
24
+ # 'body'=>{
25
+ # 'password'=>'less_secure',
26
+ # }
27
+ # }
28
+
29
+ # Reedb.active_vaults['default'].insert('Peter pan', data)
30
+
31
+ # begin
32
+ # puts Reedb.active_vaults['default'].read_file('Peter pan')
33
+ # rescue
34
+ # puts "This error was handled: could not read!"
35
+ # end
36
+
37
+
38
+ # begin
39
+ # Reedb.active_vaults['default'].remove_file('Peter pan')
40
+ # rescue
41
+ # puts "This error was handled: could not remove!"
42
+ # end
43
+
44
+
45
+
46
+ # begin
47
+ # Reedb.vault(name='default', "#{path}", :aes).secure_config(true).create(user_pw)
48
+
49
+ # sample_data = {}
50
+ # sample_data['header'] = {}
51
+ # sample_data['header']['name'] = "Sample"
52
+ # sample_data['header']['category'] = "Unsorted"
53
+ # sample_data['body'] = {}
54
+ # sample_data['body']['username'] = "spacekookie"
55
+ # sample_data['body']['password'] = 'the_flying_unicorn_shits_rainbows'
56
+
57
+ # Reedb.active_vaults['default'].insert('Sample', sample_data)
58
+
59
+ # rescue
60
+ # puts "Error occured opening your vault. Does it exist?"
61
+ # end
62
+
63
+ # puts Reedb.active_vaults['default'].read_file('Peter Pan')
64
+ # Reedb.active_vaults['default'].close
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reedb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Lonely Robot
8
+ - Katharina Sabel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-05-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.7'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: aes
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.5'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.5'
56
+ - !ruby/object:Gem::Dependency
57
+ name: twofish
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: digest-tiger
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1.0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: json
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.8'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.8'
98
+ - !ruby/object:Gem::Dependency
99
+ name: daemons
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '1.2'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '1.2'
112
+ - !ruby/object:Gem::Dependency
113
+ name: sinatra
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '1.4'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '1.4'
126
+ - !ruby/object:Gem::Dependency
127
+ name: hashids
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.0'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.0'
140
+ description: Ruby storage containers/ database. Uses Rinjdael, Twofish, ... to keep
141
+ your data safe. Made for native and local application development. Spawns a system
142
+ daemon that manages vaults that applications can talk to.
143
+ email:
144
+ - sabel.katharina@gmail.com
145
+ executables:
146
+ - reedbd
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - ".ruby-gemset"
151
+ - ".ruby-version"
152
+ - Gemfile
153
+ - Gemfile.lock
154
+ - Rakefile
155
+ - bin/reedbd
156
+ - lib/reedb.rb
157
+ - lib/reedb/config.rb
158
+ - lib/reedb/constants.rb
159
+ - lib/reedb/daemon_wrapper.rb
160
+ - lib/reedb/datafile.rb
161
+ - lib/reedb/errors/daemon_errors.rb
162
+ - lib/reedb/errors/encryption_errors.rb
163
+ - lib/reedb/errors/vault_errors.rb
164
+ - lib/reedb/reevault.rb
165
+ - lib/reedb/security/aes.rb
166
+ - lib/reedb/security/encryption.rb
167
+ - lib/reedb/security/multifish.rb
168
+ - lib/reedb/security/secure_hash.rb
169
+ - lib/reedb/security/twofish.rb
170
+ - lib/reedb/utils/logger.rb
171
+ - lib/reedb/utils/meta_vault.rb
172
+ - lib/reedb/utils/sorting.rb
173
+ - lib/reedb/utils/utilities.rb
174
+ - lib/reedb/utils/uuids.rb
175
+ - lib/reedb/utils/version.rb
176
+ - reedb.gemspec
177
+ - tests/daemons/reedb.rb
178
+ - tests/layout.rb
179
+ - tests/networking/client.rb
180
+ - tests/networking/server.rb
181
+ - tests/play.rb
182
+ - tests/serialisation.rb
183
+ - tests/tests.rb
184
+ homepage: https://github.com/tr-lonelyrobot/reedb/wiki
185
+ licenses:
186
+ - LGPL v3.0
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">"
200
+ - !ruby/object:Gem::Version
201
+ version: 1.3.1
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.4.6
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: Ruby storage containers/ database that uses completely encrpypted files for
208
+ maximum security.
209
+ test_files: []