Beispiel #1
0
def get_client(*info):
  ''' returns a mediafireapi.client object
  @email as first parameter
  @password as second parameter
  if no params are passed, then get_client
  pulls the account information from the user's
  saved credentials with the user file'''

  # Create Mediafire client
  try:
    client = MediaFireClient()
  except requests.exceptions.RequestException:
    logger.die('Network error, please check network status and try again')
  if (len(info) == 2):
    try:
      client.login(email=info[0],
          password=info[1],
          app_id=APP_ID,
          api_key=API_KEY)
    except requests.exceptions.RequestException:
     logger.die('Network error, please check network status and try again') 
  else:
    try:
      auth = user.get_auth()
      client.login(email=auth[0],
          password=auth[1],
          app_id=APP_ID,
          api_key=API_KEY)
    except requests.exceptions.RequestException:
      logger.die('Network error, please check network status and try again')
  return client
Beispiel #2
0
def upload(filename,foldername):
    imagepath = '/home/xamforcrpf/imgdir/'
    imagepath+=filename+'.jpg'
    print(imagepath)
    print(filename)
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')

    result = client.upload_file(imagepath, f"mf:/{foldername}/")
    fileinfo = client.api.file_get_info(result.quickkey)

    hashcode = fileinfo['file_info']['hash']
    hashcode = hashcode[:4]

    link = fileinfo['file_info']['links']['normal_download']
    link = link.rstrip('/file')
    link = link.replace('/file','/convkey/'+hashcode)
    for i in range(1,len(link)+1):
        print(link[-i])
        if link[-i] == '/':
            point = -i
            break
        elif link[-i] == '.':
            ext = -i

    link = link[:point]+'6g'+link[ext:]
    return link
 def __init__(self,
              api=MediaFireApi(),
              email=properties.email,
              password=properties.password,
              app_id=properties.app_id):
     self.__api = api
     self.session = api.user_get_session_token(email=email,
                                               password=password,
                                               app_id=app_id)
     self.__api.session = self.session
     self.uploader = MediaFireUploader(self.__api)
     self.client = MediaFireClient()
     self.client.login(email=email, password=password, app_id=app_id)
     self.ROOT = ROOT
Beispiel #4
0
    def test_upload_target_parent_folder_does_not_exist(self):
        source = '/tmp/k.txt'
        dest_uri = 'mf:/c/k.txt'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/c':
                raise ResourceNotFoundError(uri)

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ResourceNotFoundError):
            client._prepare_upload_info(source, dest_uri)
    def test_upload_target_parent_folder_does_not_exist(self):
        source = '/tmp/k.txt'
        dest_uri = 'mf:/c/k.txt'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/c':
                raise ResourceNotFoundError(uri)

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ResourceNotFoundError):
            client._prepare_upload_info(source, dest_uri)
    def test_upload_fh_to_folder(self):
        source = io.BytesIO(b"blah")
        dest_uri = 'mf:/g/'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': 'i' * 13,
                    'name': 'g'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ValueError):
            client._prepare_upload_info(source, dest_uri)
Beispiel #7
0
    def test_upload_fh_to_folder(self):
        source = io.BytesIO(b"blah")
        dest_uri = 'mf:/g/'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': 'i' * 13,
                    'name': 'g'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ValueError):
            client._prepare_upload_info(source, dest_uri)
    def test_upload_target_file_parent_folder_is_file(self):
        source = '/tmp/m.txt'
        dest_uri = 'mf:/e/m.txt'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/e':
                return File({
                    'quickkey': 'f' * 15,
                    'name': 'e'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(NotAFolderError):
            client._prepare_upload_info(source, dest_uri)
Beispiel #9
0
    def test_upload_target_file_parent_folder_is_file(self):
        source = '/tmp/m.txt'
        dest_uri = 'mf:/e/m.txt'

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/e':
                return File({
                    'quickkey': 'f' * 15,
                    'filename': 'e'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(NotAFolderError):
            client._prepare_upload_info(source, dest_uri)
    def test_existing_file_overwrite(self):
        source = "/tmp/f.txt"
        dest_uri = "mf:/a/f.txt"
        folder_key = 'a' * 13
        quick_key = 'b' * 15

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return File({
                    'parent_folderkey': folder_key,
                    'quickkey': quick_key,
                    'name': 'f.txt'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)
        self.assertEqual(result_name, 'f.txt')
        self.assertEqual(result_folder_key, folder_key)
Beispiel #11
0
    def test_existing_file_overwrite(self):
        source = "/tmp/f.txt"
        dest_uri = "mf:/a/f.txt"
        folder_key = 'a' * 13
        quick_key = 'b' * 15

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return File({
                    'parent_folderkey': folder_key,
                    'quickkey': quick_key,
                    'filename': 'f.txt'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)
        self.assertEqual(result_name, 'f.txt')
        self.assertEqual(result_folder_key, folder_key)
Beispiel #12
0
def upgrade_mediafire(version):
    """ Upgrade to the given version. The upgrades
    will be downloaded from mediafire.

    The version can be higher or lower than the current one.
    This allows to downgrade (in case of a failed upgrade)
    """

    codename = configuration.get("Globals", "codename")
    filename = "{}-{}.zip".format(codename, version)
    dest = os.path.join(get_data_dir(), filename)

    mainlog.info("Downloading a new version {} into {} proxyport={}".format(
        filename, dest, configuration.get("Proxy", "proxy_port")))

    client = MediaFireClient()
    client.login(email=configuration.get("MediaFire", "email"),
                 password=configuration.get("MediaFire", "password"),
                 app_id=configuration.get("MediaFire", "appid"),
                 api_key=configuration.get("MediaFire", "sessionkey"))
    client.download_file("mf:/" + filename, dest)

    configuration.set("DownloadSite", "current_version", str(version))
    configuration.set("DownloadSite", "client_path", dest)
    configuration.save()
    return
Beispiel #13
0
def get_client(*info):
    ''' returns a mediafireapi.client object
  @email as first parameter
  @password as second parameter
  if no params are passed, then get_client
  pulls the account information from the user's
  saved credentials with the user file'''

    # Create Mediafire client
    try:
        client = MediaFireClient()
    except requests.exceptions.RequestException:
        logger.die('Network error, please check network status and try again')
    if (len(info) == 2):
        try:
            client.login(email=info[0],
                         password=info[1],
                         app_id=APP_ID,
                         api_key=API_KEY)
        except requests.exceptions.RequestException:
            logger.die(
                'Network error, please check network status and try again')
    else:
        try:
            auth = user.get_auth()
            client.login(email=auth[0],
                         password=auth[1],
                         app_id=APP_ID,
                         api_key=API_KEY)
        except requests.exceptions.RequestException:
            logger.die(
                'Network error, please check network status and try again')
    return client
    def test_upload_to_folder(self):
        source = '/tmp/j.txt'
        dest_uri = 'mf:/b/'

        folder_key = 'c' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': folder_key,
                    'name': 'a'
                })
            elif uri == 'mf:/b/j.txt':
                raise ResourceNotFoundError()

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)
        self.assertEqual(result_name, 'j.txt')
        self.assertEqual(result_folder_key, folder_key)
Beispiel #15
0
def uploadass(filename):
    imagepath = '/home/xamforcrpf/imgdir/'
    imagepath+=filename
    print(imagepath)
    print(filename)
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')

    print('login')
    link = ''
    for i in range(10):
        try:
            print('doing upload')
            result = client.upload_file(imagepath, f"mf:/")
            fileinfo = client.api.file_get_info(result.quickkey)
            link = fileinfo['file_info']['links']['normal_download']
            break
        except:
            print('retrying')
    return link
Beispiel #16
0
    def test_upload_to_folder(self):
        source = '/tmp/j.txt'
        dest_uri = 'mf:/b/'

        folder_key = 'c' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': folder_key,
                    'name': 'a'
                })
            elif uri == 'mf:/b/j.txt':
                raise ResourceNotFoundError()

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)
        self.assertEqual(result_name, 'j.txt')
        self.assertEqual(result_folder_key, folder_key)
Beispiel #17
0
    def test_upload_fh_existing_overwrite(self):
        source = io.BytesIO(b"blah")
        dest_uri = 'mf:/f/m.txt'
        quick_key = 'j' * 15
        folder_key = 'h' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return File({
                    'quickkey': quick_key,
                    'filename': 'm.txt',
                    'parent_folderkey': folder_key
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)

        self.assertEqual(result_name, 'm.txt')
        self.assertEqual(result_folder_key, folder_key)
    def test_upload_fh_existing_overwrite(self):
        source = io.BytesIO(b"blah")
        dest_uri = 'mf:/f/m.txt'
        quick_key = 'j' * 15
        folder_key = 'h' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return File({
                    'quickkey': quick_key,
                    'name': 'm.txt',
                    'parent_folderkey': folder_key
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)

        self.assertEqual(result_name, 'm.txt')
        self.assertEqual(result_folder_key, folder_key)
    def test_upload_target_file_doest_not_exist(self):
        source = '/tmp/l.txt'
        dest_uri = 'mf:/d/l.txt'

        folder_key = 'e' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/d':
                return Folder({
                    'folderkey': folder_key,
                    'name': 'd'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)

        self.assertEqual(result_name, 'l.txt')
        self.assertEqual(result_folder_key, folder_key)
    def test_upload_to_folder_target_name_is_folder(self):
        source = '/tmp/j.txt'
        dest_uri = 'mf:/b/'

        folder_key = 'd' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': folder_key,
                    'name': 'b'
                })
            elif uri == 'mf:/b/j.txt':
                return Folder({
                    'folderkey': 'e' * 13,
                    'name': 'j.txt'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ValueError):
            client._prepare_upload_info(source, dest_uri)
Beispiel #21
0
    def test_upload_to_folder_target_name_is_folder(self):
        source = '/tmp/j.txt'
        dest_uri = 'mf:/b/'

        folder_key = 'd' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                return Folder({
                    'folderkey': folder_key,
                    'name': 'b'
                })
            elif uri == 'mf:/b/j.txt':
                return Folder({
                    'folderkey': 'e' * 13,
                    'name': 'j.txt'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        with self.assertRaises(ValueError):
            client._prepare_upload_info(source, dest_uri)
Beispiel #22
0
    def test_upload_target_file_doest_not_exist(self):
        source = '/tmp/l.txt'
        dest_uri = 'mf:/d/l.txt'

        folder_key = 'e' * 13

        def mock_get_resource_by_uri(uri):
            if uri == dest_uri:
                raise ResourceNotFoundError(uri)
            elif uri == 'mf:/d':
                return Folder({
                    'folderkey': folder_key,
                    'name': 'd'
                })

        client = MediaFireClient()
        client.get_resource_by_uri = mock_get_resource_by_uri

        result_folder_key, result_name = client._prepare_upload_info(source,
                                                                     dest_uri)

        self.assertEqual(result_name, 'l.txt')
        self.assertEqual(result_folder_key, folder_key)
class MediaFireResourceLookupTests(unittest.TestCase):
    """Tests for get_resource_by_uri"""
    def setUp(self):
        # we can operate w/o login
        self.client = MediaFireClient(_api=DummyMediaFireApi)

    def test_resource_by_uri_root(self):
        """Test that get_resource_by_uri works on root"""
        result = self.client.get_resource_by_uri('mf:/')
        self.assertEqual(result["folderkey"], "blah")

    def test_folder_by_uri(self):
        """Test that multilevel folder is resolved"""
        result = self.client.get_resource_by_uri('mf:///a/b')
        self.assertEqual(result["folderkey"], "b" * 13)

    def test_intermediate_file_raises_error(self):
        """Test that a file in the middle throws NotAFolderError"""
        with self.assertRaises(NotAFolderError):
            self.client.get_resource_by_uri('mf:///hi.txt/b')

    def test_file_by_uri(self):
        """Test that multilevel file is resolved"""
        result = self.client.get_resource_by_uri('mf:///a/b/hi.txt')
        self.assertEqual(result["quickkey"], "i" * 15)

    def test_missing_folder_raises_error(self):
        """Test that folder is reported missing if it is"""
        with self.assertRaises(ResourceNotFoundError):
            self.client.get_resource_by_uri('mf:///a/b/c/hi.txt')

    def test_uri_key(self):
        """Test that key resolution works"""
        result = self.client.get_resource_by_uri('mf:' + 'a' * 13)
        self.assertEqual(result["folderkey"], "a" * 13)

    def test_trailing_slash(self):
        """Test that URI with trailing slash works"""
        result = self.client.get_resource_by_uri('mf:' + 'a' * 13 + '/')
        self.assertEqual(result["folderkey"], "a" * 13)
Beispiel #24
0
#!/usr/bin/env python3

from mediafire.client import (MediaFireClient, File, Folder)

client = MediaFireClient()

client.login(app_id='45211')
client.download_file("mf:/i547ewwpknmh41l","thing")
class MediaFireConnection:
    def __init__(self,
                 api=MediaFireApi(),
                 email=properties.email,
                 password=properties.password,
                 app_id=properties.app_id):
        self.__api = api
        self.session = api.user_get_session_token(email=email,
                                                  password=password,
                                                  app_id=app_id)
        self.__api.session = self.session
        self.uploader = MediaFireUploader(self.__api)
        self.client = MediaFireClient()
        self.client.login(email=email, password=password, app_id=app_id)
        self.ROOT = ROOT

    def get_info(self):
        res = self.__api.system_get_info()
        return res

    def get_user_info(self):
        res = self.__api.user_get_info()
        return res

    def get_file_info(self, uploadresult):
        return self.__api.file_get_info(uploadresult.quickkey)['result']

    def upload_file(self, source_path, source_filename, target_path,
                    target_filename):
        result = None
        while not result:
            try:
                result = self.client.upload_file(
                    os.path.join(source_path, source_filename),
                    target_path + "/" + target_filename)
            except IsADirectoryError:
                result = None  # Todo: idk why we need this...
            except ResourceNotFoundError:
                logging.info("%s path not found, lets create it." %
                             target_path)
                self.client.create_folder(target_path, recursive=True)
        result = self.client.get_resource_by_key(result.quickkey)
        return result

    def do_ls(self, client, args):
        """List directory"""

        for item in client.get_folder_contents_iter(args.uri):
            # privacy flag
            if item['privacy'] == 'public':
                item['pf'] = '@'
            else:
                item['pf'] = '-'

            if isinstance(item, Folder):
                # type flag
                item['tf'] = 'd'
                item['key'] = item['folderkey']
                item['size'] = ''
            else:
                item['tf'] = '-'
                item['key'] = item['quickkey']
                item['name'] = item['filename']

            print("{tf}{pf} {key:>15} {size:>10} {created} {name}".format(
                **item))

        return True

    def to_mongo(self, db, folder_pair):
        path = folder_pair['mf']
        ftp_root = folder_pair['ftp']
        coll_name = folder_pair['name']

        logging.info("Processing path: %s" % path)
        try:
            for item in self.client.get_folder_contents_iter(path):
                if type(item) is File:
                    mf_path = (path + item['filename'])
                    ftp_path = (ftp_root + item['filename'])
                    logging.debug("Checking in Mongo for %s  ==>  %s" %
                                  (mf_path, ftp_path))
                    existing = db.find_by_ftp_path(ftp_path,
                                                   coll_name=coll_name)
                    if existing:
                        logging.debug("updating Mongo")
                        item['path'] = path
                        item["mf_root"] = folder_pair['mf']
                        db.update_item(existing,
                                       properties={"mf": item},
                                       coll_name=coll_name)
                    else:
                        logging.debug("inserting into Mongo")
                        item['path'] = path
                        db.insert_one({"mf": item}, coll_name=coll_name)
                elif type(item) is Folder:
                    self.to_mongo(
                        db, {
                            "mf": path + item['name'] + '/',
                            "ftp": folder_pair['ftp'] + item['name'] + '/',
                            "name": coll_name
                        })
        except ResourceNotFoundError as rne:
            logging.error("Resource NOT Found: %s", exc_info=rne)
            return
        except Exception as e:
            logging.error("Error: %s", exc_info=e)
def main():  # pylint: disable=too-many-statements
    """Main entry point"""
    parser = argparse.ArgumentParser(prog='mediafire-cli', description=__doc__)

    parser.add_argument('--debug',
                        dest='debug',
                        action='store_true',
                        default=False,
                        help='Enable debug output')
    parser.add_argument('--email',
                        dest='email',
                        required=False,
                        default=os.environ.get('MEDIAFIRE_EMAIL', None))
    parser.add_argument('--password',
                        dest='password',
                        required=False,
                        default=os.environ.get('MEDIAFIRE_PASSWORD', None))

    actions = parser.add_subparsers(title='Actions', dest='action')
    # http://bugs.python.org/issue9253#msg186387
    actions.required = True

    # ls
    subparser = actions.add_parser('ls', help=do_ls.__doc__)
    subparser.add_argument('uri',
                           nargs='?',
                           help='MediaFire URI',
                           default='mf:///')

    # file-upload
    subparser = actions.add_parser('file-upload', help=do_file_upload.__doc__)
    subparser.add_argument('paths', nargs='+', help='Path[s] to upload')
    subparser.add_argument('dest_uri', help='Destination MediaFire URI')

    # file-download
    subparser = actions.add_parser('file-download',
                                   help=do_file_download.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire File URI[s] to download')
    subparser.add_argument('dest_path', help='Destination path')

    # file-show
    subparser = actions.add_parser('file-show', help=do_file_show.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire File URI[s] to print out')
    # folder-download
    subparser = actions.add_parser('folder-download',
                                   help=do_folder_download.__doc__)
    subparser.add_argument('uri',
                           nargs='?',
                           help='MediaFire URI',
                           default='mf:///')
    subparser.add_argument('dest_path', help='Destination path')

    # folder-create
    subparser = actions.add_parser('folder-create',
                                   help=do_folder_create.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire folder path URI[s]')

    # resource-delete
    subparser = actions.add_parser('resource-delete',
                                   help=do_resource_delete.__doc__)
    subparser.add_argument('uris', nargs='+', help='MediaFire resource URI[s]')
    subparser.add_argument('--purge',
                           help="Purge, don't send to trash",
                           dest="purge",
                           action="store_true",
                           default=False)

    # file-update-metadata
    subparser = actions.add_parser('file-update-metadata',
                                   help=do_file_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire file URI')
    subparser.add_argument('--filename',
                           help='Set file name',
                           default=None,
                           dest='filename')
    subparser.add_argument('--privacy',
                           help='Set file privacy',
                           choices=['public', 'private'],
                           default=None,
                           dest='privacy')
    subparser.add_argument('--description',
                           help='Set file description',
                           dest='description',
                           default=None)
    subparser.add_argument('--mtime',
                           help="Set file modification time",
                           dest='mtime',
                           default=None)

    # folder-update-metadata
    subparser = actions.add_parser('folder-update-metadata',
                                   help=do_folder_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire folder URI')
    subparser.add_argument('--foldername',
                           help='Set folder name',
                           default=None,
                           dest='foldername')
    subparser.add_argument('--privacy',
                           help='Set folder privacy',
                           choices=['public', 'private'],
                           default=None,
                           dest='privacy')
    subparser.add_argument('--recursive',
                           help='Set privacy recursively',
                           action='store_true',
                           default=None,
                           dest='recursive')
    subparser.add_argument('--description',
                           help='Set folder description',
                           dest='description',
                           default=None)
    subparser.add_argument('--mtime',
                           help='Set folder mtime',
                           default=None,
                           dest='mtime')

    # debug-get-resource
    subparser = actions.add_parser('debug-get-resource',
                                   help=do_debug_get_resource.__doc__)
    subparser.add_argument('uri',
                           help='MediaFire resource URI',
                           default='mediafire:/',
                           nargs='?')

    args = parser.parse_args()

    if args.debug:
        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)

        logging.getLogger("mediafire.client").setLevel(logging.DEBUG)

    client = MediaFireClient()

    if args.email and args.password:
        client.login(args.email, args.password, app_id=APP_ID)

    router = {
        "file-upload": do_file_upload,
        "file-download": do_file_download,
        "file-show": do_file_show,
        "ls": do_ls,
        'folder-download': do_folder_download,
        "folder-create": do_folder_create,
        "resource-delete": do_resource_delete,
        "file-update-metadata": do_file_update_metadata,
        "folder-update-metadata": do_folder_update_metadata,
        "debug-get-resource": do_debug_get_resource
    }

    if args.action in router:
        result = router[args.action](client, args)

        if not result:
            sys.exit(1)
    else:
        print('Unsupported action: {}'.format(args.action))
        sys.exit(1)
 def __get_client(self, user, password):
     client = MediaFireClient()
     client.login(email=user, password=password, app_id='42511')
     return client
 def setUp(self):
     # we can operate w/o login
     self.client = MediaFireClient(_api=DummyMediaFireApi)
Beispiel #29
0
import shlex
import shutil
import subprocess
import time

from django.conf import settings
from celery import group, chord, chain
from celery.decorators import task
from PIL import Image
import requests
from mediafire.client import MediaFireClient, File, Folder

from .utils import url2filename, extract_images_url
from .models import Manga, Volume, Chapter

client = MediaFireClient()
client.login(email=settings.MEDIAFIRE_EMAIL,
             password=settings.MEDIAFIRE_PASSWORD,
             app_id='42511')
UPLOAD_FOLDER = settings.MEDIAFIRE_FOLDER

# https://stackoverflow.com/questions/31784484/how-to-parallelized-file-downloads
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')


def download(chapter_id, index, path, url):
    filename = url2filename(url, chapter_id, index)
    logging.debug('downloading %s', filename)
    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(os.path.join(path, filename), 'wb') as f:
Beispiel #30
0
def createfolder(foldername):
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')
    client.create_folder('/'+foldername)
def main(argv):

	vnumber = "0.3"
	print('mfcmd.py v' + vnumber, file=sys.stderr)

	account = ''
	passphrase = ''
	filepath = ''
	filepathbase = ''
	filesize = ''
	localhash = ''
	uldir = ''

	try:
		opts, args = getopt.getopt(argv,"e:p:u:h:f:",["email=","password="******"upload-folder=","hash=","file="])
	except getopt.GetoptError:
		print('Error!', file=sys.stderr)
		return

	for opt, arg in opts:
		if opt in ("-e", "--email"):
			account = arg
		elif opt in ("-p", "--password"):
			passphrase = arg
		elif opt in ("-u", "--upload-folder"):
			uldir = arg
		elif opt in ("-s", "--size"):
			filesize = arg
		elif opt in ("-h", "--hash"):
			localhash = arg
		elif opt in ("-f", "--file"):
			filepath = arg

	if account == '':
		print('Error:credentials')
		return
	else:
		print('Email: ' + account, file=sys.stderr)

	if passphrase == '':
		print('Error:credentials')
		return
	else:
		print('Password: '******'':
		print('Error:filepath')
		return
	else:
		if os.path.exists(filepath):
			if os.path.isfile(filepath):
				print('Filepath: ' + filepath, file=sys.stderr)
				filepathbase = os.path.basename(filepath)
				print('Filename: ' + filepathbase, file=sys.stderr)
			else:
				print('Error:noregularfile')
				return
		else:
			print('Error:nofile')
			return

	if uldir == '':
		uldir = 'mfcmd'
	print('Upload folder: ' + uldir, file=sys.stderr)

	if localhash == '':
		print('No SHA-256 specified: calculating...', file=sys.stderr)
		sha256_hash = hashlib.sha256()
		with open(filepath,"rb") as f:
			for byte_block in iter(lambda: f.read(4096),b""):
				sha256_hash.update(byte_block)
			localhash = sha256_hash.hexdigest()
	print('Checksum: ' + localhash, file=sys.stderr)

	api = MediaFireApi()

	try:
		session = api.user_get_session_token(
			email=account,
			password=passphrase,
			app_id='42511')
		print('MediaFire API: connected', file=sys.stderr)
		api.session = session
	except:
		print('Error:login')

	try:
		userinfo = api.user_get_info()
		print("Account holder: " + userinfo['user_info']['display_name'], file=sys.stderr)
		maxstore = userinfo['user_info']['storage_limit']
		usedstore = userinfo['user_info']['used_storage_size']
		freestore = int(maxstore)-int(usedstore)
		freestore_str = str(freestore)
		print("Maximum storage: " + maxstore, file=sys.stderr)
		print("Used storage: " + usedstore, file=sys.stderr)
		print("Free storage: " + freestore_str, file=sys.stderr)
		localsize = os.path.getsize(filepath)
		localsize_str = str(localsize)
		print("Local file size: " + localsize_str, file=sys.stderr)
		if freestore <= localsize:
			print("Error: available space will not suffice!", file=sys.stderr)
			print("Error:space")
			return
		else:
			print("Available filespace will suffice", file=sys.stderr)
	except:
		print('Error getting or parsing user info', file=sys.stderr)

	client = MediaFireClient()

	try:
		client.login(email=account,
			password=passphrase,
			app_id='42511')
		print('MediaFire Client: logged in', file=sys.stderr)
	except:
		print('Error:login')
		return

	try:
		client.get_resource_by_path("/" + uldir + "/")
		print('Detected upload folder ./' + uldir, file=sys.stderr)
	except:
		print('Error: upload folder ./' + uldir, 'does not exist!', file=sys.stderr)
		try:
			client.create_folder("mf:/" + uldir)
		except:
			print('Could not create upload folder: defaulting to root', file=sys.stderr)
			uldir = ''

	try:
		if uldir == '':
			fileinfo = client.get_resource_by_path("/" + filepathbase)
			remotehash = fileinfo['hash']
			if localhash == remotehash:
				print('Same file already exists: no upload necessary!', file=sys.stderr)
				try:
					dlurl = fileinfo['links']['normal_download']
					dlurl = dlurl.replace('http://www.', 'https://')
					print(dlurl)
				except:
					print('Error:link')
				return
			else:
				print('Error: filename already exists in upload folder', file=sys.stderr)
				posixtime = int(time.time())
				posixtext = str(posixtime)
				uldir = posixtext
				print('Creating root subfolder: /' + uldir, file=sys.stderr)
				try:
					client.create_folder("mf:/" + uldir)
				except:
					print('Error:folder')
					return
		else:
			fileinfo = client.get_resource_by_path("/" + uldir + "/" + filepathbase)
			remotehash = fileinfo['hash']
			if localhash == remotehash:
				print('Same file already exists: no upload necessary!', file=sys.stderr)
				try:
					dlurl = fileinfo['links']['normal_download']
					dlurl = dlurl.replace('http://www.', 'https://')
					print(dlurl)
				except:
					print('Error:link')
				return
			else:
				print('Error: filename already exists in upload folder', file=sys.stderr)
				posixtime = int(time.time())
				posixtext = str(posixtime)
				uldir = uldir + '/' + posixtext
				print('Creating subfolder: ./' + uldir, file=sys.stderr)
				try:
					client.create_folder("mf:/" + uldir)
				except:
					print('Could not create upload folder: defaulting to root', file=sys.stderr)
					uldir = ''
	except:
		print('File does not exist in upload folder', file=sys.stderr)

	try:
		if uldir == '':
			client.upload_file(filepath, "mf:/")
		else:
			client.upload_file(filepath, "mf:/" + uldir + "/")
	except:
		print('Error: upload function', file=sys.stderr)

	try:
		if uldir == '':
			fileinfo = client.get_resource_by_path("/" + filepathbase)
		else:
			fileinfo = client.get_resource_by_path("/" + uldir + "/" + filepathbase)
		dlurl = fileinfo['links']['normal_download']
		dlurl = dlurl.replace('http://www.', 'https://')
		print(dlurl)
	except:
		print('Error:upload')
		return
Beispiel #32
0
def main():
    """Main entry point"""
    parser = argparse.ArgumentParser(prog='mediafire-cli',
                                     description=__doc__)

    parser.add_argument('--debug', dest='debug', action='store_true',
                        default=False, help='Enable debug output')
    parser.add_argument('--email', dest='email', required=False)
    parser.add_argument('--password', dest='password', required=False)

    actions = parser.add_subparsers(title='Actions', dest='action')
    # http://bugs.python.org/issue9253#msg186387
    actions.required = True

    # ls
    subparser = actions.add_parser('ls',
                                   help=do_ls.__doc__)
    subparser.add_argument('uri', nargs='?',
                           help='MediaFire URI',
                           default='mediafire:/')

    # file-upload
    subparser = actions.add_parser('file-upload',
                                   help=do_file_upload.__doc__)
    subparser.add_argument('paths', nargs='+',
                           help='Path[s] to upload')
    subparser.add_argument('dest_uri', help='Destination MediaFire URI')

    # file-download
    subparser = actions.add_parser('file-download',
                                   help=do_file_download.__doc__)
    subparser.add_argument('uris', nargs='+',
                           help='MediaFire File URI[s] to download')
    subparser.add_argument('dest_path', help='Destination path')

    # file-show
    subparser = actions.add_parser('file-show',
                                   help=do_file_show.__doc__)
    subparser.add_argument('uris', nargs='+',
                           help='MediaFire File URI[s] to print out')

    # folder-create
    subparser = actions.add_parser('folder-create',
                                   help=do_folder_create.__doc__)
    subparser.add_argument('uri', help='MediaFire folder path URI')

    # resource-delete
    subparser = actions.add_parser('resource-delete',
                                   help=do_resource_delete.__doc__)
    subparser.add_argument('uri', help='MediaFire resource URI')
    subparser.add_argument('--purge', help="Purge, don't send to trash",
                           dest="purge", action="store_true", default=False)

    # file-update-metadata
    subparser = actions.add_parser('file-update-metadata',
                                   help=do_file_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire file URI')
    subparser.add_argument('--filename', help='Set file name',
                           default=None, dest='filename')
    subparser.add_argument('--privacy', help='Set file privacy',
                           choices=['public', 'private'],
                           default=None, dest='privacy')
    subparser.add_argument('--description',
                           help='Set file description',
                           dest='description', default=None)
    subparser.add_argument('--mtime', help="Set file modification time",
                           dest='mtime', default=None)

    # folder-update-metadata
    subparser = actions.add_parser('folder-update-metadata',
                                   help=do_folder_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire folder URI')
    subparser.add_argument('--foldername', help='Set folder name',
                           default=None, dest='foldername')
    subparser.add_argument('--privacy', help='Set folder privacy',
                           choices=['public', 'private'],
                           default=None, dest='privacy')
    subparser.add_argument('--recursive', help='Set privacy recursively',
                           action='store_true', default=None,
                           dest='recursive')
    subparser.add_argument('--description',
                           help='Set folder description',
                           dest='description', default=None)
    subparser.add_argument('--mtime', help='Set folder mtime',
                           default=None, dest='mtime')

    # debug-get-resource
    subparser = actions.add_parser('debug-get-resource',
                                   help=do_debug_get_resource.__doc__)
    subparser.add_argument('uri', help='MediaFire resource URI',
                           default='mediafire:/', nargs='?')

    args = parser.parse_args()

    if args.debug:
        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)

        logging.getLogger("mediafire.client").setLevel(logging.DEBUG)

    client = MediaFireClient()

    if args.email and args.password:
        client.login(args.email, args.password, app_id=APP_ID)

    router = {
        "file-upload": do_file_upload,
        "file-download": do_file_download,
        "file-show": do_file_show,
        "ls": do_ls,
        "folder-create": do_folder_create,
        "resource-delete": do_resource_delete,
        "file-update-metadata": do_file_update_metadata,
        "folder-update-metadata": do_folder_update_metadata,
        "debug-get-resource": do_debug_get_resource
    }

    if args.action in router:
        result = router[args.action](client, args)

        if not result:
            sys.exit(1)
    else:
        print('Unsupported action: {}'.format(args.action))
        sys.exit(1)
Beispiel #33
0
#!/usr/bin/python3

import os
import logging

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)

from mediafire.client import MediaFireClient

APP_ID = '42511'
MEDIAFIRE_EMAIL = os.environ['MEDIAFIRE_EMAIL']
MEDIAFIRE_PASSWORD = os.environ['MEDIAFIRE_PASSWORD']

client = MediaFireClient()
client.login(app_id=APP_ID, email=MEDIAFIRE_EMAIL, password=MEDIAFIRE_PASSWORD)

print("Use 'client' object to interact with MediaFireClient")