anonymous login

This commit is contained in:
richard 2013-05-18 01:58:41 +01:00
parent 6e2dc604e9
commit fe7a515241
5 changed files with 31 additions and 9 deletions

View file

@ -34,6 +34,8 @@ mega = Mega({'verbose': True})
### Login to Mega ### Login to Mega
```python ```python
m = mega.login(email, password) m = mega.login(email, password)
# login using a temporary anonymous account
m = mega.login()
``` ```
### Get user details ### Get user details
```python ```python

View file

@ -27,8 +27,11 @@ class Mega(object):
options = {} options = {}
self.options = options self.options = options
def login(self, email, password): def login(self, email=None, password=None):
if email:
self.login_user(email, password) self.login_user(email, password)
else:
self.login_anonymous()
return self return self
def login_user(self, email, password): def login_user(self, email, password):
@ -40,6 +43,24 @@ class Mega(object):
raise RequestError(resp) raise RequestError(resp)
self._login_process(resp, password_aes) self._login_process(resp, password_aes)
def login_anonymous(self):
master_key = [random.randint(0, 0xFFFFFFFF)] * 4
password_key = [random.randint(0, 0xFFFFFFFF)] * 4
session_self_challenge = [random.randint(0, 0xFFFFFFFF)] * 4
user = self.api_request({
'a': 'up',
'k': a32_to_base64(encrypt_key(master_key, password_key)),
'ts': base64_url_encode(a32_to_str(session_self_challenge) +
a32_to_str(encrypt_key(session_self_challenge, master_key)))
})
resp = self.api_request({'a': 'us', 'user': user})
#if numeric error code response
if isinstance(resp, int):
raise RequestError(resp)
self._login_process(resp, password_key)
def _login_process(self, resp, password): def _login_process(self, resp, password):
encrypted_master_key = base64_to_a32(resp['k']) encrypted_master_key = base64_to_a32(resp['k'])
self.master_key = decrypt_key(encrypted_master_key, password) self.master_key = decrypt_key(encrypted_master_key, password)

View file

@ -1,3 +1,3 @@
requests>=0.10 requests>=0.10
pycrypto pycrypto
mega.py>=0.9.16 mega.py

View file

@ -30,7 +30,7 @@ def get_package_data(package):
setup( setup(
name='mega.py', name='mega.py',
version='0.9.16', version='0.9.17',
packages=get_packages('mega'), packages=get_packages('mega'),
package_data=get_package_data('mega'), package_data=get_package_data('mega'),
description='Python lib for the Mega.co.nz API', description='Python lib for the Mega.co.nz API',

View file

@ -12,7 +12,10 @@ email = 'your@email.com'
password = 'password' password = 'password'
mega = Mega() mega = Mega()
m = mega.login(email, password) # anonymous login
m = mega.login()
# normal login
#m = mega.login(email, password)
FIND_RESP = None FIND_RESP = None
TEST_CONTACT = 'test@mega.co.nz' TEST_CONTACT = 'test@mega.co.nz'
@ -86,16 +89,12 @@ class TestMega(unittest.TestCase):
if file: if file:
resp = m.delete(file[0]) resp = m.delete(file[0])
self.assertTrue(isinstance(resp, int)) self.assertTrue(isinstance(resp, int))
else:
raise ValueError('file not found')
def test_destroy(self): def test_destroy(self):
file = m.find(TEST_FILE) file = m.find(TEST_FILE)
if file: if file:
resp = m.destroy(file[0]) resp = m.destroy(file[0])
self.assertTrue(isinstance(resp, int)) self.assertTrue(isinstance(resp, int))
else:
raise ValueError('file not found')
def test_empty_trash(self): def test_empty_trash(self):
#resp None if already empty, else int #resp None if already empty, else int