reedb 0.10.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []