예제 #1
0
def fetch_token(username, password):
    url = configure.get('cloud.service.urls',
                        'service.auth0.url') + '/oauth/ro'
    payload = {
        "username": username,
        "password": password,
        "grant_type": "password",
        "scope": "openid offline_access",
        "device": "123456789",
        "connection": "Username-Password-Authentication",
        "client_id": "56pjpE1J4c6ZyATz3sYP8cMT47CZd6rk"
    }

    response = requests.post(url,
                             data=json.dumps(payload),
                             headers={"Content-Type": "application/json"})
    if configure.debug:
        print(url)
        print(payload)
        print(response.content)
    if response.status_code != 200:
        raise Exception("Login Error !!! [{}][{}]".format(
            response.status_code, response.content))

    token = json.loads(response.content)
    configure.save_token(token)
    return token
예제 #2
0
def create_floder(name, parentID):
    url = configure.get(configure.get_default_profile(),
                        'externaluri') + '/sdk/v2/files?resolveNameConflict=1'

    payload = """
--xxoo1707a7a80f1xxoo

{{"name":"{}","parentID":"{}","mimeType":"application/x.wd.dir"}}
--xxoo1707a7a80f1xxoo--
""".format(name, parentID)

    response = requests.post(
        url,
        data=payload,
        headers={
            "Content-Type": "multipart/related; boundary=xxoo1707a7a80f1xxoo",
            'Authorization': 'Bearer ' + auth.token()
        })
    if configure.debug:
        print(url)
        print(payload)
        print(response.content)
    if response.status_code != 201:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))
예제 #3
0
def get_file_under_dir_by_name(name, dir_id, pagetoken=""):
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v2/filesSearch/parents?ids={}&limit=100&order=desc&orderBy=name&pretty=true&pageToken={}'

    response = requests.get(
        url.format(dir_id, pagetoken),
        headers={'Authorization': 'Bearer ' + auth.token()})
    if configure.debug:
        print("search {} in parents {}".format(name, dir_id))
        print(url.format(dir_id, pagetoken))
        print(response.content)

    if response.status_code != 200:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))

    data = json.loads(response.content)

    if 'files' in data:
        for item in data['files']:
            if item['name'] == name:
                return item
        if data['pageToken'] != "":
            return get_file_under_dir_by_name(name, dir_id, data['pageToken'])

    return None
예제 #4
0
def download(wdUri, localPath):
    file_id = utils.convert_wd_path_to_wd_id(wdUri)
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v3/files/{}/content'.format(file_id)

    response = requests.get(url,
                            headers={
                                "Content-Type": "application/json",
                                'Authorization': 'Bearer ' + auth.token()
                            },
                            stream=True)

    fileName = os.path.join(localPath, get_file_by_id(file_id)['name'])
    if configure.debug:
        print(url)
        print(fileName)

    if response.status_code != 200:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))

    progress = Bar('Downloading',
                   max=get_file_by_id(file_id)['size'],
                   suffix='%(percent)d%%')

    with open(fileName, 'wb') as file_handler:
        for chunk in response.iter_content(1024):
            file_handler.write(chunk)
            progress.next(1024)
        progress.finish()
예제 #5
0
def create_resumable_file(name, parentID):
    url = configure.get(configure.get_default_profile(),
                        'externaluri') + '/sdk/v2/files/resumable?resolveNameConflict=1&done=false'

    payload = """
--foo

{{"name":"{}","parentID":"{}"}}
--foo

--foo--
""".format(name, parentID)

    response = requests.post(url,
                             data=payload,
                             headers={
                                 "Content-Type": "multipart/related; boundary=foo",
                                 'Authorization': 'Bearer '+auth.token()
                             }
                             )
    if configure.debug:
        print("URL: {}".format(url))
        print("Payload: {}".format(payload))
        print(response)  # 201
        print("Header: {}".format(response.headers))
    if response.status_code != 201:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))

    return response.headers['Location']
예제 #6
0
def mark_resumable_file_as_done(fileLocation):
    url = configure.get(configure.get_default_profile(),
                        'externaluri') + fileLocation + '/resumable/content?done=true'

    response = requests.put(
        url, headers={'Authorization': 'Bearer '+auth.token()})

    if configure.debug:
        print("URL: {}".format(url))
        print(response)  # 204
예제 #7
0
def delete(wdUri):
    file_id = utils.convert_wd_path_to_wd_id(wdUri)
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v2/files/{}'.format(file_id)

    response = requests.delete(url,
                               headers={
                                   "Content-Type": "application/json",
                                   'Authorization': 'Bearer ' + auth.token()
                               })
    if configure.debug:
        print(url)
        print(response.content)
    if response.status_code in [200, 202, 204]:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))
예제 #8
0
def get_list_by_user_id(user_id):
    url = configure.get(
        'cloud.service.urls',
        'service.device.url') + '/device/v1/user/{}?pretty=true'

    response = requests.get(url.format(user_id),
                            headers={'Authorization': 'Bearer ' + token()})
    if configure.debug:
        print(url.format(user_id))
        print(response.content)

    if response.status_code != 200:
        raise Exception("DEVICE INFO Error !!! [{}][{}]".format(
            response.status_code, response.content))

    device_info = json.loads(response.content)
    return device_info['data']
예제 #9
0
def get_file_by_id(file_id):
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v2/files/{}?pretty=true'

    response = requests.get(
        url.format(file_id),
        headers={'Authorization': 'Bearer ' + auth.token()})
    if configure.debug:
        print(url.format(file_id))
        print(response.content)

    if response.status_code != 200:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))

    file_info = json.loads(response.content)
    return file_info
예제 #10
0
def get_file_list_by_id(wdUri, pagetoken=""):
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v2/filesSearch/parents?ids={}&limit=100&order=desc&orderBy=name&pretty=true&pageToken={}'

    response = requests.get(
        url.format(wdUri, pagetoken),
        headers={'Authorization': 'Bearer ' + auth.token()})
    if configure.debug:
        print(url.format(wdUri, pagetoken))
        print(response.content)

    if response.status_code != 200:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))

    file_info = json.loads(response.content)
    return file_info
예제 #11
0
def upload(localPath, wdUri):
    dir_id = utils.convert_wd_path_to_wd_id(wdUri)
    file_name = utils.get_local_file_name(localPath)

    localtion = create_resumable_file(file_name, dir_id)

    url = configure.get(configure.get_default_profile(),
                        'externaluri') + localtion + '/resumable/content'

    response = requests.put(url, data=open(localPath, 'rb'), headers={
                            'Authorization': 'Bearer '+auth.token(), 'Content-Type': 'application/octet-stream'})

    if configure.debug:
        print("URL: {}".format(url))
        print(response)

    mark_resumable_file_as_done(localtion)
예제 #12
0
def rename(wdUri, name):
    file_id = utils.convert_wd_path_to_wd_id(wdUri)
    url = configure.get(configure.get_default_profile(), 'externaluri') + \
        '/sdk/v2/files/{}/patch'.format(file_id)
    payload = {"name": name}

    response = requests.post(url,
                             data=json.dumps(payload),
                             headers={
                                 "Content-Type": "application/json",
                                 'Authorization': 'Bearer ' + auth.token()
                             })
    if configure.debug:
        print(url)
        print(payload)
        print(response.content)
    if response.status_code != 204:
        raise Exception("FILE MANAGEMENT Error !!! [{}][{}]".format(
            response.status_code, response.content))
예제 #13
0
def fetch_user_info(username):

    url = configure.get('cloud.service.urls', 'service.auth.url') + \
        '/authservice/v2/auth0/user?email={}'
    response = requests.get(url.format(username),
                            headers={'Authorization': 'Bearer ' + token()})
    if configure.debug:
        print(url.format(username))
        print(response.content)
    if response.status_code != 200:
        raise Exception("Login Error !!! [{}][{}]".format(
            response.status_code, response.content))

    user_info = json.loads(response.content)

    list(
        map(
            lambda user: configure.save_profiles(
                get_list_by_user_id(user['user_id']), user),
            user_info['data']))
예제 #14
0
def devices():
    """Get the Devices that User is attached to."""
    click.echo(
        utils.pretty(
            device.get_list_by_user_id(
                configure.get(configure.get_default_profile(), 'user_id'))))