palobr 0.1.0
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.
- data/Gemfile +11 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/palobr +209 -0
- data/lib/backup.rb +120 -0
- data/lib/backup/file_item.rb +18 -0
- data/lib/backup/file_item/base.rb +37 -0
- data/lib/backup/file_item/cloud.rb +91 -0
- data/lib/backup/file_item/local.rb +26 -0
- data/lib/backup/jar.rb +163 -0
- data/lib/backup/timestamp.rb +48 -0
- data/lib/crypto.rb +43 -0
- data/lib/helpers.rb +80 -0
- data/palobr.gemspec +77 -0
- data/test/helper.rb +15 -0
- data/test/test_backup.rb +7 -0
- data/test/test_backup_file_item.rb +31 -0
- data/test/test_backup_timestamp.rb +65 -0
- data/test/test_crypto.rb +59 -0
- metadata +145 -0
data/palobr.gemspec
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{palobr}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Timothy Klim"]
|
12
|
+
s.date = %q{2011-05-10}
|
13
|
+
s.default_executable = %q{palobr}
|
14
|
+
s.description = %q{Simple backup system for pushing into cloud}
|
15
|
+
s.email = %q{klimtimothy@gmail.com}
|
16
|
+
s.executables = ["palobr"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE.txt",
|
19
|
+
"README.rdoc"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
"Gemfile",
|
23
|
+
"LICENSE.txt",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"bin/palobr",
|
28
|
+
"lib/backup.rb",
|
29
|
+
"lib/backup/file_item.rb",
|
30
|
+
"lib/backup/file_item/base.rb",
|
31
|
+
"lib/backup/file_item/cloud.rb",
|
32
|
+
"lib/backup/file_item/local.rb",
|
33
|
+
"lib/backup/jar.rb",
|
34
|
+
"lib/backup/timestamp.rb",
|
35
|
+
"lib/crypto.rb",
|
36
|
+
"lib/helpers.rb",
|
37
|
+
"palobr.gemspec",
|
38
|
+
"test/helper.rb",
|
39
|
+
"test/test_backup.rb",
|
40
|
+
"test/test_backup_file_item.rb",
|
41
|
+
"test/test_backup_timestamp.rb",
|
42
|
+
"test/test_crypto.rb"
|
43
|
+
]
|
44
|
+
s.homepage = %q{http://github.com/TimothyKlim/palobr}
|
45
|
+
s.licenses = ["MIT"]
|
46
|
+
s.require_paths = ["lib"]
|
47
|
+
s.rubygems_version = %q{1.6.2}
|
48
|
+
s.summary = %q{Simple backup system for pushing into cloud}
|
49
|
+
|
50
|
+
if s.respond_to? :specification_version then
|
51
|
+
s.specification_version = 3
|
52
|
+
|
53
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
54
|
+
s.add_runtime_dependency(%q<fog>, [">= 0"])
|
55
|
+
s.add_runtime_dependency(%q<slop>, [">= 0"])
|
56
|
+
s.add_runtime_dependency(%q<ruby-progressbar>, [">= 0"])
|
57
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
58
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
59
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<fog>, [">= 0"])
|
62
|
+
s.add_dependency(%q<slop>, [">= 0"])
|
63
|
+
s.add_dependency(%q<ruby-progressbar>, [">= 0"])
|
64
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
66
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
67
|
+
end
|
68
|
+
else
|
69
|
+
s.add_dependency(%q<fog>, [">= 0"])
|
70
|
+
s.add_dependency(%q<slop>, [">= 0"])
|
71
|
+
s.add_dependency(%q<ruby-progressbar>, [">= 0"])
|
72
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
73
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
74
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path("../../lib/", __FILE__))
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'yaml'
|
6
|
+
require 'digest'
|
7
|
+
require 'fileutils'
|
8
|
+
require 'openssl'
|
9
|
+
|
10
|
+
require 'backup'
|
11
|
+
require 'crypto'
|
12
|
+
|
13
|
+
def puts_fail msg
|
14
|
+
raise msg
|
15
|
+
end
|
data/test/test_backup.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class BackupFileItemTest < Test::Unit::TestCase
|
4
|
+
def test_semantic_path
|
5
|
+
assert_equal __FILE__, Backup::FileItem.semantic_path(__FILE__)
|
6
|
+
assert_equal File.dirname(__FILE__) + '/',
|
7
|
+
Backup::FileItem.semantic_path(File.dirname(__FILE__))
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_file_stat
|
11
|
+
file = Backup::FileItem.stat(__FILE__, Backup::Timestamp.create)
|
12
|
+
key = file.keys.first
|
13
|
+
|
14
|
+
assert_not_nil file[key][:uid]
|
15
|
+
assert_not_nil file[key][:gid]
|
16
|
+
assert_not_nil file[key][:mode]
|
17
|
+
assert_not_nil file[key][:checksum]
|
18
|
+
assert_not_nil file[key][:timestamp]
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_directory_stat
|
22
|
+
file = Backup::FileItem.stat(File.dirname(__FILE__), Backup::Timestamp.create)
|
23
|
+
key = file.keys.first
|
24
|
+
|
25
|
+
assert_not_nil file[key][:uid]
|
26
|
+
assert_not_nil file[key][:gid]
|
27
|
+
assert_not_nil file[key][:mode]
|
28
|
+
assert_nil file[key][:checksum]
|
29
|
+
assert_not_nil file[key][:timestamp]
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
|
+
|
3
|
+
class BackupTimestampTest < Test::Unit::TestCase
|
4
|
+
def test_parse_timestamp
|
5
|
+
assert_equal Backup::Timestamp.parse_timestamp("110102201130"),
|
6
|
+
Time.new(2011, 01, 02, 20, 11, 30, 0)
|
7
|
+
|
8
|
+
assert_equal Backup::Timestamp.parse_timestamp("11.01.02. 20:11:30"),
|
9
|
+
Time.new(2011, 01, 02, 20, 11, 30, 0)
|
10
|
+
|
11
|
+
assert_equal Backup::Timestamp.parse_timestamp("1101022011"),
|
12
|
+
Time.new(2011, 01, 02, 20, 11, 0, 0)
|
13
|
+
assert_equal Backup::Timestamp.parse_timestamp("11010220"),
|
14
|
+
Time.new(2011, 01, 02, 20, 0, 0, 0)
|
15
|
+
assert_equal Backup::Timestamp.parse_timestamp("110102"),
|
16
|
+
Time.new(2011, 01, 02, 0, 0, 0, 0)
|
17
|
+
|
18
|
+
assert_equal Backup::Timestamp.parse_timestamp("1101022011", true),
|
19
|
+
Time.new(2011, 01, 02, 20, 11, 59, 0)
|
20
|
+
assert_equal Backup::Timestamp.parse_timestamp("11010220", true),
|
21
|
+
Time.new(2011, 01, 02, 20, 59, 59, 0)
|
22
|
+
assert_equal Backup::Timestamp.parse_timestamp("110102", true),
|
23
|
+
Time.new(2011, 01, 02, 23, 59, 59, 0)
|
24
|
+
|
25
|
+
assert_not_equal Backup::Timestamp.parse_timestamp("110102201130"),
|
26
|
+
Time.new(2011, 01, 02, 20, 11, 31, 0)
|
27
|
+
|
28
|
+
assert_raise(RuntimeError) { Backup::Timestamp.parse_timestamp("11d10.,130") }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_last_from
|
32
|
+
timestamps = ["110130090812", "110130103412", "110106121234"]
|
33
|
+
|
34
|
+
assert_equal("110130103412",
|
35
|
+
Backup::Timestamp.last_from(timestamps,
|
36
|
+
Backup::Timestamp.parse_timestamp("110130", true)))
|
37
|
+
assert_equal("110130090812",
|
38
|
+
Backup::Timestamp.last_from(timestamps,
|
39
|
+
Backup::Timestamp.parse_timestamp("11013009", true)))
|
40
|
+
assert_equal("110106121234",
|
41
|
+
Backup::Timestamp.last_from(timestamps,
|
42
|
+
Backup::Timestamp.parse_timestamp("110106", true)))
|
43
|
+
|
44
|
+
assert_equal("110130103412",
|
45
|
+
Backup::Timestamp.last_from(timestamps,
|
46
|
+
Backup::Timestamp.parse_timestamp("110130", true),
|
47
|
+
Backup::Timestamp.parse_timestamp("110130")))
|
48
|
+
assert_equal("110106121234",
|
49
|
+
Backup::Timestamp.last_from(timestamps,
|
50
|
+
Backup::Timestamp.parse_timestamp("110110", true),
|
51
|
+
Backup::Timestamp.parse_timestamp("110101")))
|
52
|
+
assert_equal("110130090812",
|
53
|
+
Backup::Timestamp.last_from(timestamps,
|
54
|
+
Backup::Timestamp.parse_timestamp("1101300908", true),
|
55
|
+
Backup::Timestamp.parse_timestamp("110130090811")))
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_create_timestamp
|
60
|
+
time = Time.new(2011, 01, 02, 23, 59, 59, 0)
|
61
|
+
|
62
|
+
assert_equal(Backup::Timestamp.create.length, 12)
|
63
|
+
assert_equal(Backup::Timestamp.create(time), "110102235959")
|
64
|
+
end
|
65
|
+
end
|
data/test/test_crypto.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
# text = "I was encrypted but came back!"
|
4
|
+
#
|
5
|
+
# secret = pub_key.encrypt(text)
|
6
|
+
# puts priv_key.decrypt(secret)
|
7
|
+
|
8
|
+
class TestCrypto < Test::Unit::TestCase
|
9
|
+
def fixtures
|
10
|
+
File.expand_path('../fixtures/rsa_keys', __FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_keys!(bits = 4096)
|
14
|
+
Crypto.create_keys("#{fixtures}/rsa_key", "#{fixtures}/rsa_key.pub", bits)
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_keys
|
18
|
+
@priv_key = Crypto::Key.from_file("#{fixtures}/rsa_key")
|
19
|
+
@pub_key = Crypto::Key.from_file("#{fixtures}/rsa_key.pub")
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_create_keys
|
23
|
+
create_keys!
|
24
|
+
|
25
|
+
assert_not_nil File.open("#{fixtures}/rsa_key").read
|
26
|
+
assert_not_nil File.open("#{fixtures}/rsa_key.pub").read
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_encrypt
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_decrypt
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_crypt_text
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_time
|
39
|
+
create_keys! 512
|
40
|
+
load_keys
|
41
|
+
|
42
|
+
secret = ""
|
43
|
+
f = open("/tmp/10mb").read
|
44
|
+
|
45
|
+
start_time = Time.now
|
46
|
+
|
47
|
+
i = 0
|
48
|
+
while text = f[i..(i+=52)] do
|
49
|
+
crypt_text = @pub_key.encrypt(text)
|
50
|
+
# crypt_text = text
|
51
|
+
secret += crypt_text
|
52
|
+
end
|
53
|
+
secret_time = Time.now
|
54
|
+
# @priv_key.decrypt(secret)
|
55
|
+
|
56
|
+
puts "*"*20
|
57
|
+
STDOUT.puts "Start time: #{start_time}\nSecret time: #{secret_time - start_time}\nTotal: #{Time.now - start_time}"
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: palobr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Timothy Klim
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-10 00:00:00 +04:00
|
14
|
+
default_executable: palobr
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: fog
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: slop
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: ruby-progressbar
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: bundler
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.0.0
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: jeweler
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.6.0
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rcov
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: *id006
|
82
|
+
description: Simple backup system for pushing into cloud
|
83
|
+
email: klimtimothy@gmail.com
|
84
|
+
executables:
|
85
|
+
- palobr
|
86
|
+
extensions: []
|
87
|
+
|
88
|
+
extra_rdoc_files:
|
89
|
+
- LICENSE.txt
|
90
|
+
- README.rdoc
|
91
|
+
files:
|
92
|
+
- Gemfile
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.rdoc
|
95
|
+
- Rakefile
|
96
|
+
- VERSION
|
97
|
+
- bin/palobr
|
98
|
+
- lib/backup.rb
|
99
|
+
- lib/backup/file_item.rb
|
100
|
+
- lib/backup/file_item/base.rb
|
101
|
+
- lib/backup/file_item/cloud.rb
|
102
|
+
- lib/backup/file_item/local.rb
|
103
|
+
- lib/backup/jar.rb
|
104
|
+
- lib/backup/timestamp.rb
|
105
|
+
- lib/crypto.rb
|
106
|
+
- lib/helpers.rb
|
107
|
+
- palobr.gemspec
|
108
|
+
- test/helper.rb
|
109
|
+
- test/test_backup.rb
|
110
|
+
- test/test_backup_file_item.rb
|
111
|
+
- test/test_backup_timestamp.rb
|
112
|
+
- test/test_crypto.rb
|
113
|
+
has_rdoc: true
|
114
|
+
homepage: http://github.com/TimothyKlim/palobr
|
115
|
+
licenses:
|
116
|
+
- MIT
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
hash: -1906186080507489003
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: "0"
|
137
|
+
requirements: []
|
138
|
+
|
139
|
+
rubyforge_project:
|
140
|
+
rubygems_version: 1.6.2
|
141
|
+
signing_key:
|
142
|
+
specification_version: 3
|
143
|
+
summary: Simple backup system for pushing into cloud
|
144
|
+
test_files: []
|
145
|
+
|