lib/rmega/nodes/expandable.rb in rmega-0.1.5 vs lib/rmega/nodes/expandable.rb in rmega-0.1.6
- old
+ new
@@ -1,12 +1,14 @@
require 'rmega/utils'
-require 'rmega/uploader'
+require 'rmega/nodes/uploadable'
require 'rmega/crypto/crypto'
module Rmega
module Nodes
module Expandable
+ include Uploadable
+
def create_folder(name)
key = Crypto.random_key
encrypted_attributes = Utils.a32_to_base64 Crypto.encrypt_attributes(key[0..3], {n: name.strip})
encrypted_key = Utils.a32_to_base64 Crypto.encrypt_key(session.master_key, key)
n = [{h: 'xxxxxxxx', t: 1, a: encrypted_attributes, k: encrypted_key}]
@@ -14,51 +16,9 @@
Folder.new(session, data['f'][0])
end
def upload_url(filesize)
session.request(a: 'u', s: filesize)['p']
- end
-
- def upload(local_path)
- local_path = ::File.expand_path(local_path)
- filesize = ::File.size(local_path)
-
- ul_key = Crypto.random_key
- aes_key = ul_key[0..3]
- nonce = ul_key[4..5]
-
- file_mac = [0, 0, 0, 0]
-
- uploader = Uploader.new(filesize: filesize, base_url: upload_url(filesize), local_path: local_path)
-
- uploader.upload do |start, clean_buffer|
- # TODO: should be (chunk_start/0x1000000000) >>> 0, (chunk_start/0x10) >>> 0
- nonce = [nonce[0], nonce[1], (start/0x1000000000) >> 0, (start/0x10) >> 0]
-
- encrypted = Crypto::AesCtr.encrypt(aes_key, nonce, clean_buffer)
- chunk_mac = encrypted[:mac]
-
- file_mac = [file_mac[0] ^ chunk_mac[0], file_mac[1] ^ chunk_mac[1],
- file_mac[2] ^ chunk_mac[2], file_mac[3] ^ chunk_mac[3]]
- file_mac = Crypto::Aes.encrypt(ul_key[0..3], file_mac)
-
- encrypted[:data]
- end
-
- file_handle = uploader.last_result
-
- attribs = {n: ::File.basename(local_path)}
- encrypt_attribs = Utils.a32_to_base64 Crypto.encrypt_attributes(ul_key[0..3], attribs)
-
- meta_mac = [file_mac[0] ^ file_mac[1], file_mac[2] ^ file_mac[3]]
-
- key = [ul_key[0] ^ ul_key[4], ul_key[1] ^ ul_key[5], ul_key[2] ^ meta_mac[0],
- ul_key[3] ^ meta_mac[1], ul_key[4], ul_key[5], meta_mac[0], meta_mac[1]]
-
- encrypted_key = Utils.a32_to_base64 Crypto.encrypt_key(session.master_key, key)
- session.request a: 'p', t: handle, n: [{h: file_handle, t: 0, a: encrypt_attribs, k: encrypted_key}]
-
- attribs[:n]
end
end
end
end