anonymous login
This commit is contained in:
parent
6e2dc604e9
commit
fe7a515241
5 changed files with 31 additions and 9 deletions
|
@ -34,6 +34,8 @@ mega = Mega({'verbose': True})
|
|||
### Login to Mega
|
||||
```python
|
||||
m = mega.login(email, password)
|
||||
# login using a temporary anonymous account
|
||||
m = mega.login()
|
||||
```
|
||||
### Get user details
|
||||
```python
|
||||
|
|
25
mega/mega.py
25
mega/mega.py
|
@ -27,8 +27,11 @@ class Mega(object):
|
|||
options = {}
|
||||
self.options = options
|
||||
|
||||
def login(self, email, password):
|
||||
self.login_user(email, password)
|
||||
def login(self, email=None, password=None):
|
||||
if email:
|
||||
self.login_user(email, password)
|
||||
else:
|
||||
self.login_anonymous()
|
||||
return self
|
||||
|
||||
def login_user(self, email, password):
|
||||
|
@ -40,6 +43,24 @@ class Mega(object):
|
|||
raise RequestError(resp)
|
||||
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):
|
||||
encrypted_master_key = base64_to_a32(resp['k'])
|
||||
self.master_key = decrypt_key(encrypted_master_key, password)
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
requests>=0.10
|
||||
pycrypto
|
||||
mega.py>=0.9.16
|
||||
mega.py
|
||||
|
|
2
setup.py
2
setup.py
|
@ -30,7 +30,7 @@ def get_package_data(package):
|
|||
|
||||
setup(
|
||||
name='mega.py',
|
||||
version='0.9.16',
|
||||
version='0.9.17',
|
||||
packages=get_packages('mega'),
|
||||
package_data=get_package_data('mega'),
|
||||
description='Python lib for the Mega.co.nz API',
|
||||
|
|
|
@ -12,7 +12,10 @@ email = 'your@email.com'
|
|||
password = 'password'
|
||||
|
||||
mega = Mega()
|
||||
m = mega.login(email, password)
|
||||
# anonymous login
|
||||
m = mega.login()
|
||||
# normal login
|
||||
#m = mega.login(email, password)
|
||||
|
||||
FIND_RESP = None
|
||||
TEST_CONTACT = 'test@mega.co.nz'
|
||||
|
@ -86,16 +89,12 @@ class TestMega(unittest.TestCase):
|
|||
if file:
|
||||
resp = m.delete(file[0])
|
||||
self.assertTrue(isinstance(resp, int))
|
||||
else:
|
||||
raise ValueError('file not found')
|
||||
|
||||
def test_destroy(self):
|
||||
file = m.find(TEST_FILE)
|
||||
if file:
|
||||
resp = m.destroy(file[0])
|
||||
self.assertTrue(isinstance(resp, int))
|
||||
else:
|
||||
raise ValueError('file not found')
|
||||
|
||||
def test_empty_trash(self):
|
||||
#resp None if already empty, else int
|
||||
|
|
Loading…
Reference in a new issue