Skip to content

Commit fe7a515

Browse files
author
richard
committed
anonymous login
1 parent 6e2dc60 commit fe7a515

File tree

5 files changed

+31
-9
lines changed

5 files changed

+31
-9
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ mega = Mega({'verbose': True})
3434
### Login to Mega
3535
```python
3636
m = mega.login(email, password)
37+
# login using a temporary anonymous account
38+
m = mega.login()
3739
```
3840
### Get user details
3941
```python

mega/mega.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ def __init__(self, options=None):
2727
options = {}
2828
self.options = options
2929

30-
def login(self, email, password):
31-
self.login_user(email, password)
30+
def login(self, email=None, password=None):
31+
if email:
32+
self.login_user(email, password)
33+
else:
34+
self.login_anonymous()
3235
return self
3336

3437
def login_user(self, email, password):
@@ -40,6 +43,24 @@ def login_user(self, email, password):
4043
raise RequestError(resp)
4144
self._login_process(resp, password_aes)
4245

46+
def login_anonymous(self):
47+
master_key = [random.randint(0, 0xFFFFFFFF)] * 4
48+
password_key = [random.randint(0, 0xFFFFFFFF)] * 4
49+
session_self_challenge = [random.randint(0, 0xFFFFFFFF)] * 4
50+
51+
user = self.api_request({
52+
'a': 'up',
53+
'k': a32_to_base64(encrypt_key(master_key, password_key)),
54+
'ts': base64_url_encode(a32_to_str(session_self_challenge) +
55+
a32_to_str(encrypt_key(session_self_challenge, master_key)))
56+
})
57+
58+
resp = self.api_request({'a': 'us', 'user': user})
59+
#if numeric error code response
60+
if isinstance(resp, int):
61+
raise RequestError(resp)
62+
self._login_process(resp, password_key)
63+
4364
def _login_process(self, resp, password):
4465
encrypted_master_key = base64_to_a32(resp['k'])
4566
self.master_key = decrypt_key(encrypted_master_key, password)

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
requests>=0.10
22
pycrypto
3-
mega.py>=0.9.16
3+
mega.py

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def get_package_data(package):
3030

3131
setup(
3232
name='mega.py',
33-
version='0.9.16',
33+
version='0.9.17',
3434
packages=get_packages('mega'),
3535
package_data=get_package_data('mega'),
3636
description='Python lib for the Mega.co.nz API',

tests/unit-tests.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
password = 'password'
1313

1414
mega = Mega()
15-
m = mega.login(email, password)
15+
# anonymous login
16+
m = mega.login()
17+
# normal login
18+
#m = mega.login(email, password)
1619

1720
FIND_RESP = None
1821
TEST_CONTACT = '[email protected]'
@@ -86,16 +89,12 @@ def test_delete(self):
8689
if file:
8790
resp = m.delete(file[0])
8891
self.assertTrue(isinstance(resp, int))
89-
else:
90-
raise ValueError('file not found')
9192

9293
def test_destroy(self):
9394
file = m.find(TEST_FILE)
9495
if file:
9596
resp = m.destroy(file[0])
9697
self.assertTrue(isinstance(resp, int))
97-
else:
98-
raise ValueError('file not found')
9998

10099
def test_empty_trash(self):
101100
#resp None if already empty, else int

0 commit comments

Comments
 (0)