ruby-safenet 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +38 -10
- data/lib/safenet.rb +105 -4
- data/lib/safenet/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 974008fc8230e6155b425d997bb8a305dcd8537e
|
4
|
+
data.tar.gz: 1183766c5674d6f23291a8e2a4259b68a120c10e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5eccd278929da2180b8e7da31eb8efe53cf6711eef128dcd7ac31ff167c9f9691798ea1dc3d4cc8cd258c1a8e0e311e3afe27142126a70dbbfbdcc48c50edccf
|
7
|
+
data.tar.gz: a3910ea35830bdde568de7d1f05ef67d40e6ab26c5607f6013f76fab5f860cb824dd7e07e7032491e1bd80deba9910979b1367211f6addfdf12bc8b52bb8d0bd
|
data/README.md
CHANGED
@@ -51,7 +51,19 @@ safe.nfs.get_directory("/mydir")["files"].each do |file|
|
|
51
51
|
end
|
52
52
|
```
|
53
53
|
|
54
|
-
## Structured Data (SD):
|
54
|
+
## Structured Data (SD) - With helpers:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
safe = SafeNet::quick_start
|
58
|
+
|
59
|
+
safe.sd.create('my_sd', 'Hello SD!')
|
60
|
+
puts safe.sd.read('my_sd') # Hello SD!
|
61
|
+
|
62
|
+
safe.sd.update('my_sd', 'Hello SD 2!')
|
63
|
+
puts safe.sd.read('my_sd') # Hello SD 2!
|
64
|
+
```
|
65
|
+
|
66
|
+
## Structured Data (SD) - With safe primitives:
|
55
67
|
|
56
68
|
```ruby
|
57
69
|
# client
|
@@ -61,8 +73,8 @@ safe = SafeNet::Client.new(permissions: ["LOW_LEVEL_API"])
|
|
61
73
|
hnd_cipher = safe.cipher.get_handle
|
62
74
|
|
63
75
|
# create
|
64
|
-
name = SafeNet::
|
65
|
-
hnd = safe.sd.
|
76
|
+
name = SafeNet::s2b('my_sd')
|
77
|
+
hnd = safe.sd.create_sd(name, 500, hnd_cipher, IO.binread("#{Rails.root}/my_file.txt"))
|
66
78
|
safe.sd.put(hnd) # saves on the network
|
67
79
|
safe.sd.drop_handle(hnd) # release handler
|
68
80
|
|
@@ -70,16 +82,29 @@ safe.sd.drop_handle(hnd) # release handler
|
|
70
82
|
safe.cipher.drop_handle(hnd_cipher)
|
71
83
|
|
72
84
|
# read
|
73
|
-
name = SafeNet::
|
85
|
+
name = SafeNet::s2b('my_sd')
|
74
86
|
hnd_sd_data_id = safe.data_id.get_data_id_sd(name)
|
75
87
|
hnd_sd = safe.sd.get_handle(hnd_sd_data_id)['handleId']
|
76
|
-
contents = safe.sd.
|
88
|
+
contents = safe.sd.read_data(hnd_sd)
|
77
89
|
safe.sd.drop_handle(hnd_sd)
|
78
90
|
safe.data_id.drop_handle(hnd_sd_data_id)
|
79
91
|
puts contents # print SD contents on screen
|
80
92
|
```
|
81
93
|
|
82
|
-
## Immutable Data:
|
94
|
+
## Immutable Data - With helpers:
|
95
|
+
```ruby
|
96
|
+
# client
|
97
|
+
safe = SafeNet::quick_start
|
98
|
+
|
99
|
+
# write
|
100
|
+
name = safe.immutable.write('Hello SD')
|
101
|
+
puts "Immutable name:\n * Binary: #{name}\n * Hex...: #{name.unpack("H*").first}\n * Base64: #{Base64.encode64(name)}"
|
102
|
+
|
103
|
+
# read
|
104
|
+
puts safe.immutable.read(name)
|
105
|
+
```
|
106
|
+
|
107
|
+
## Immutable Data - With safe primitives:
|
83
108
|
|
84
109
|
```ruby
|
85
110
|
# client
|
@@ -95,12 +120,15 @@ hnd_data_id = safe.immutable.close_writer(hnd_w, hnd_cipher)
|
|
95
120
|
name = safe.data_id.serialize(hnd_data_id) # IMMUTABLE NAME
|
96
121
|
safe.immutable.drop_writer_handle(hnd_w)
|
97
122
|
safe.data_id.drop_handle(hnd_data_id)
|
98
|
-
puts "Immutable name: #{name}"
|
123
|
+
puts "Immutable name:\n * Binary: #{name}\n * Hex...: #{name.unpack("H*").first}\n * Base64: #{Base64.encode64(name)}"
|
124
|
+
|
125
|
+
# release cipher handler
|
126
|
+
safe.cipher.drop_handle(hnd_cipher)
|
99
127
|
|
100
128
|
# read
|
101
129
|
hnd_data_id = safe.data_id.deserialize(name)
|
102
130
|
hnd_r = safe.immutable.get_reader_handle(hnd_data_id)
|
103
|
-
contents = safe.immutable.
|
131
|
+
contents = safe.immutable.read_data(hnd_r)
|
104
132
|
safe.immutable.drop_reader_handle(hnd_r)
|
105
133
|
safe.data_id.drop_handle(hnd_data_id)
|
106
134
|
puts contents
|
@@ -111,13 +139,13 @@ max_chunk_size = 100_000
|
|
111
139
|
|
112
140
|
hnd_data_id = safe.data_id.deserialize(name)
|
113
141
|
hnd_r = safe.immutable.get_reader_handle(hnd_data_id)
|
114
|
-
contents = safe.immutable.
|
142
|
+
contents = safe.immutable.read_data(hnd_r, "bytes=#{chunk_pos}-#{chunk_pos+max_chunk_size}")
|
115
143
|
safe.immutable.drop_reader_handle(hnd_r)
|
116
144
|
safe.data_id.drop_handle(hnd_data_id)
|
117
145
|
puts contents
|
118
146
|
```
|
119
147
|
|
120
|
-
<!-- id = SafeNet.
|
148
|
+
<!-- id = SafeNet.s2b('my_sd')
|
121
149
|
safe.sd.update(id, 500, "Hi John")
|
122
150
|
safe.sd.get(id, 500)
|
123
151
|
safe.sd.update(id, 500, "Hello World!") -->
|
data/lib/safenet.rb
CHANGED
@@ -838,7 +838,7 @@ module SafeNet
|
|
838
838
|
@client = client_obj
|
839
839
|
end
|
840
840
|
|
841
|
-
def
|
841
|
+
def create_sd(name, type_tag = 500, hnd_cipher_opts = nil, data = nil, version = 0)
|
842
842
|
# Entry point
|
843
843
|
url = "#{@client.app_info[:launcher_server]}#{API_VERSION}/structured-data"
|
844
844
|
|
@@ -934,7 +934,7 @@ module SafeNet
|
|
934
934
|
JSON.parse(res.body)
|
935
935
|
end
|
936
936
|
|
937
|
-
def
|
937
|
+
def read_data(handle_id, version = nil)
|
938
938
|
# entry point
|
939
939
|
url = "#{@client.app_info[:launcher_server]}#{API_VERSION}/structured-data/#{handle_id}"
|
940
940
|
url = "#{url}/#{version}?" if ! version.nil?
|
@@ -960,6 +960,52 @@ module SafeNet
|
|
960
960
|
res = http.request(req)
|
961
961
|
res.code == "200" ? true : JSON.parse(res.body)
|
962
962
|
end
|
963
|
+
|
964
|
+
def create(name, contents, type = 500)
|
965
|
+
name = name.is_a?(String) ? SafeNet::s2b(name) : name
|
966
|
+
|
967
|
+
# plain (not encrypted)
|
968
|
+
hnd_cipher = @client.cipher.get_handle
|
969
|
+
|
970
|
+
# create
|
971
|
+
hnd = @client.sd.create_sd(name, type, hnd_cipher, contents)
|
972
|
+
res = @client.sd.put(hnd) # saves on the network
|
973
|
+
@client.sd.drop_handle(hnd) # release handler
|
974
|
+
|
975
|
+
# release cipher handler
|
976
|
+
@client.cipher.drop_handle(hnd_cipher)
|
977
|
+
|
978
|
+
res
|
979
|
+
end
|
980
|
+
|
981
|
+
def read(name, type = 500)
|
982
|
+
name = name.is_a?(String) ? SafeNet::s2b(name) : name
|
983
|
+
|
984
|
+
hnd_sd_data_id = @client.data_id.get_data_id_sd(name)
|
985
|
+
hnd_sd = @client.sd.get_handle(hnd_sd_data_id)['handleId']
|
986
|
+
contents = @client.sd.read_data(hnd_sd)
|
987
|
+
@client.sd.drop_handle(hnd_sd)
|
988
|
+
@client.data_id.drop_handle(hnd_sd_data_id)
|
989
|
+
|
990
|
+
contents
|
991
|
+
end
|
992
|
+
|
993
|
+
def update(name, contents, type = 500)
|
994
|
+
name = name.is_a?(String) ? SafeNet::s2b(name) : name
|
995
|
+
|
996
|
+
# plain (not encrypted)
|
997
|
+
hnd_cipher = @client.cipher.get_handle
|
998
|
+
|
999
|
+
# create
|
1000
|
+
hnd = @client.sd.create_sd(name, type, hnd_cipher, contents)
|
1001
|
+
res = @client.sd.post(hnd) # saves on the network
|
1002
|
+
@client.sd.drop_handle(hnd) # release handler
|
1003
|
+
|
1004
|
+
# release cipher handler
|
1005
|
+
@client.cipher.drop_handle(hnd_cipher)
|
1006
|
+
|
1007
|
+
res
|
1008
|
+
end
|
963
1009
|
end
|
964
1010
|
|
965
1011
|
class Immutable
|
@@ -996,7 +1042,7 @@ module SafeNet
|
|
996
1042
|
end
|
997
1043
|
|
998
1044
|
# eg range: "bytes=0-1000"
|
999
|
-
def
|
1045
|
+
def read_data(handle_id, range = nil)
|
1000
1046
|
# entry point
|
1001
1047
|
url = "#{@client.app_info[:launcher_server]}#{API_VERSION}/immutable-data/#{handle_id}"
|
1002
1048
|
|
@@ -1070,6 +1116,40 @@ module SafeNet
|
|
1070
1116
|
res = http.request(req)
|
1071
1117
|
res.code == "200" ? true : JSON.parse(res.body)
|
1072
1118
|
end
|
1119
|
+
|
1120
|
+
# helper
|
1121
|
+
def write(contents)
|
1122
|
+
# plain (not encrypted)
|
1123
|
+
hnd_cipher = @client.cipher.get_handle
|
1124
|
+
|
1125
|
+
# write
|
1126
|
+
hnd_w = @client.immutable.get_writer_handle
|
1127
|
+
@client.immutable.write_data(hnd_w, contents)
|
1128
|
+
hnd_data_id = @client.immutable.close_writer(hnd_w, hnd_cipher)
|
1129
|
+
name = @client.data_id.serialize(hnd_data_id)
|
1130
|
+
@client.immutable.drop_writer_handle(hnd_w)
|
1131
|
+
@client.data_id.drop_handle(hnd_data_id)
|
1132
|
+
|
1133
|
+
# release cipher handler
|
1134
|
+
@client.cipher.drop_handle(hnd_cipher)
|
1135
|
+
|
1136
|
+
name
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
# helper
|
1140
|
+
def read(name, chunk_pos = nil, max_chunk_size = 1_000_000)
|
1141
|
+
hnd_data_id = @client.data_id.deserialize(name)
|
1142
|
+
hnd_r = @client.immutable.get_reader_handle(hnd_data_id)
|
1143
|
+
contents = if chunk_pos
|
1144
|
+
@client.immutable.read_data(hnd_r, "bytes=#{chunk_pos}-#{chunk_pos+max_chunk_size}")
|
1145
|
+
else
|
1146
|
+
@client.immutable.read_data(hnd_r)
|
1147
|
+
end
|
1148
|
+
@client.immutable.drop_reader_handle(hnd_r)
|
1149
|
+
@client.data_id.drop_handle(hnd_data_id)
|
1150
|
+
|
1151
|
+
contents
|
1152
|
+
end
|
1073
1153
|
end
|
1074
1154
|
|
1075
1155
|
class Cipher
|
@@ -1204,8 +1284,29 @@ module SafeNet
|
|
1204
1284
|
|
1205
1285
|
end
|
1206
1286
|
|
1207
|
-
def self.
|
1287
|
+
def self.quick_start(low_level_api = true, safe_drive_access = true)
|
1288
|
+
permissions = []
|
1289
|
+
permissions << 'LOW_LEVEL_API' if low_level_api
|
1290
|
+
permissions << 'SAFE_DRIVE_ACCESS' if safe_drive_access
|
1291
|
+
SafeNet::Client.new(permissions: permissions)
|
1292
|
+
end
|
1293
|
+
|
1294
|
+
def self.s2b(str)
|
1208
1295
|
# Digest::SHA2.new(256).hexdigest(str)
|
1209
1296
|
Digest::SHA2.new(256).base64digest(str)
|
1210
1297
|
end
|
1298
|
+
|
1299
|
+
def self.bin_name(str)
|
1300
|
+
BinName.new(str)
|
1301
|
+
end
|
1302
|
+
|
1303
|
+
class BinName
|
1304
|
+
def initializer(str)
|
1305
|
+
@value = str
|
1306
|
+
end
|
1307
|
+
|
1308
|
+
def to_s
|
1309
|
+
@value
|
1310
|
+
end
|
1311
|
+
end
|
1211
1312
|
end
|
data/lib/safenet/version.rb
CHANGED