lastpass 1.1.0 → 1.2.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/CHANGELOG.md +6 -0
- data/lib/lastpass/parser.rb +42 -1
- data/lib/lastpass/vault.rb +4 -1
- data/lib/lastpass/version.rb +1 -1
- data/spec/parser_spec.rb +14 -0
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/lib/lastpass/parser.rb
CHANGED
@@ -20,15 +20,36 @@ module LastPass
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# Parses an account chunk, decrypts and creates an Account object.
|
23
|
+
# May return nil when the chunk does not represent an account.
|
24
|
+
# All secure notes are ACCTs but not all of them strore account
|
25
|
+
# information.
|
26
|
+
#
|
27
|
+
# TODO: Make a test case that covers secure note account
|
23
28
|
def self.parse_ACCT chunk, encryption_key
|
24
29
|
StringIO.open chunk.payload do |io|
|
25
30
|
id = read_item io
|
26
31
|
name = decode_aes256_auto read_item(io), encryption_key
|
27
32
|
group = decode_aes256_auto read_item(io), encryption_key
|
28
33
|
url = decode_hex read_item io
|
29
|
-
|
34
|
+
notes = decode_aes256_auto read_item(io), encryption_key
|
35
|
+
2.times { skip_item io }
|
30
36
|
username = decode_aes256_auto read_item(io), encryption_key
|
31
37
|
password = decode_aes256_auto read_item(io), encryption_key
|
38
|
+
2.times { skip_item io }
|
39
|
+
secure_note = read_item io
|
40
|
+
|
41
|
+
# Parse secure note
|
42
|
+
if secure_note == "1"
|
43
|
+
17.times { skip_item io }
|
44
|
+
secure_note_type = read_item io
|
45
|
+
|
46
|
+
# Only "Server" secure note stores account information
|
47
|
+
if secure_note_type != "Server"
|
48
|
+
return nil
|
49
|
+
end
|
50
|
+
|
51
|
+
url, username, password = parse_secure_note_server notes
|
52
|
+
end
|
32
53
|
|
33
54
|
Account.new id, name, username, password, url, group
|
34
55
|
end
|
@@ -84,6 +105,26 @@ module LastPass
|
|
84
105
|
end
|
85
106
|
end
|
86
107
|
|
108
|
+
def self.parse_secure_note_server notes
|
109
|
+
url = nil
|
110
|
+
username = nil
|
111
|
+
password = nil
|
112
|
+
|
113
|
+
notes.split("\n").each do |i|
|
114
|
+
key, value = i.split ":", 2
|
115
|
+
case key
|
116
|
+
when "Hostname"
|
117
|
+
url = value
|
118
|
+
when "Username"
|
119
|
+
username = value
|
120
|
+
when "Password"
|
121
|
+
password = value
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
[url, username, password]
|
126
|
+
end
|
127
|
+
|
87
128
|
# Reads one chunk from a stream and creates a Chunk object with the data read.
|
88
129
|
def self.read_chunk stream
|
89
130
|
# LastPass blob chunk is made up of 4-byte ID,
|
data/lib/lastpass/vault.rb
CHANGED
@@ -36,7 +36,10 @@ module LastPass
|
|
36
36
|
case i.id
|
37
37
|
when "ACCT"
|
38
38
|
# TODO: Put shared folder name as group in the account
|
39
|
-
|
39
|
+
account = Parser.parse_ACCT i, key
|
40
|
+
if account
|
41
|
+
@accounts << account
|
42
|
+
end
|
40
43
|
when "PRIK"
|
41
44
|
rsa_private_key = Parser.parse_PRIK i, encryption_key
|
42
45
|
when "SHAR"
|
data/lib/lastpass/version.rb
CHANGED
data/spec/parser_spec.rb
CHANGED
@@ -185,6 +185,20 @@ describe LastPass::Parser do
|
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
|
+
describe ".parse_secure_note_server" do
|
189
|
+
let(:url) { "url" }
|
190
|
+
let(:username) { "username" }
|
191
|
+
let(:password) { "password" }
|
192
|
+
let(:notes) { "Hostname:#{url}\nUsername:#{username}\nPassword:#{password}" }
|
193
|
+
|
194
|
+
it "returns parsed values" do
|
195
|
+
result = LastPass::Parser.parse_secure_note_server notes
|
196
|
+
expect(result[0]).to eq url
|
197
|
+
expect(result[1]).to eq username
|
198
|
+
expect(result[2]).to eq password
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
188
202
|
describe ".read_chunk" do
|
189
203
|
it "returns a chunk" do
|
190
204
|
with_chunk_hex "ABCD", "DEADBEEF", padding do |io|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lastpass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|