def sync_drive(): while True: config = config_parser.read_config() verbose = config_parser.get_verbose(config=config) username = config_parser.get_username(config=config) destination_path = config_parser.prepare_destination(config=config) if username and destination_path: try: api = PyiCloudService(apple_id=username, password=utils.get_password_from_keyring( username=username)) if not api.requires_2sa: sync_directory(drive=api.drive, destination_path=destination_path, root=destination_path, items=api.drive.dir(), top=True, filters=config['filters'], remove=config_parser.get_remove_obsolete( config=config), verbose=verbose) else: print('Error: 2FA is required. Please log in.') except exceptions.PyiCloudNoStoredPasswordAvailableException: print( 'password is not stored in keyring. Please save the password in keyring.' ) sleep_for = config_parser.get_sync_interval(config=config) next_sync = (datetime.datetime.now() + datetime.timedelta( minutes=sleep_for)).strftime('%l:%M%p %Z on %b %d, %Y') print(f'Resyncing at {next_sync} ...') if sleep_for < 0: break time.sleep(sleep_for)
def __init__( self, apple_id, password=None, cookie_directory=None, verify=True, client_id=None, with_family=True ): if password is None: password = get_password_from_keyring(apple_id) self.data = {} self.client_id = client_id or str(uuid.uuid1()).upper() self.with_family = with_family self.user = {'apple_id': apple_id, 'password': password} self._password_filter = PyiCloudPasswordFilter(password) logger.addFilter(self._password_filter) self._home_endpoint = 'https://www.icloud.com' self._setup_endpoint = 'https://setup.icloud.com/setup/ws/1' self._base_login_url = '%s/login' % self._setup_endpoint if cookie_directory: self._cookie_directory = os.path.expanduser( os.path.normpath(cookie_directory) ) else: self._cookie_directory = os.path.join( tempfile.gettempdir(), 'pyicloud', ) self.session = PyiCloudSession(self) self.session.verify = verify self.session.headers.update({ 'Origin': self._home_endpoint, 'Referer': '%s/' % self._home_endpoint, 'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)' }) cookiejar_path = self._get_cookiejar_path() self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if os.path.exists(cookiejar_path): try: self.session.cookies.load() logger.debug("Read cookies from %s", cookiejar_path) except: # Most likely a pickled cookiejar from earlier versions. # The cookiejar will get replaced with a valid one after # successful authentication. logger.warning("Failed to read cookiejar %s", cookiejar_path) self.params = { 'clientBuildNumber': '17DHotfix5', 'clientMasteringNumber': '17DHotfix5', 'ckjsBuildVersion': '17DProjectDev77', 'ckjsVersion': '2.0.5', 'clientId': self.client_id, } self.authenticate()
def __init__( self, apple_id, password=None, cookie_directory=None, verify=True, client_id=None ): if password is None: password = get_password_from_keyring(apple_id) self.data = {} self.client_id = client_id or str(uuid.uuid1()).upper() self.user = {'apple_id': apple_id, 'password': password} self._password_filter = PyiCloudPasswordFilter(password) logger.addFilter(self._password_filter) self._home_endpoint = 'https://www.icloud.com' self._setup_endpoint = 'https://setup.icloud.com/setup/ws/1' self._base_login_url = '%s/login' % self._setup_endpoint if cookie_directory: self._cookie_directory = os.path.expanduser( os.path.normpath(cookie_directory) ) else: self._cookie_directory = os.path.join( tempfile.gettempdir(), 'pyicloud', ) self.session = PyiCloudSession(self) self.session.verify = verify self.session.headers.update({ 'Origin': self._home_endpoint, 'Referer': '%s/' % self._home_endpoint, 'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)' }) cookiejar_path = self._get_cookiejar_path() self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if os.path.exists(cookiejar_path): try: self.session.cookies.load() logger.debug("Read cookies from %s", cookiejar_path) except: # Most likely a pickled cookiejar from earlier versions. # The cookiejar will get replaced with a valid one after # successful authentication. logger.warning("Failed to read cookiejar %s", cookiejar_path) self.params = { 'clientBuildNumber': '17DHotfix5', 'clientMasteringNumber': '17DHotfix5', 'ckjsBuildVersion': '17DProjectDev77', 'ckjsVersion': '2.0.5', 'clientId': self.client_id, } self.authenticate()
def __init__(self, apple_id, password=None, cookie_directory=None, verify=True): if password is None: password = get_password_from_keyring(apple_id) self.discovery = None self.client_id = str(uuid.uuid1()).upper() self.user = {'apple_id': apple_id, 'password': password} self._home_endpoint = 'https://www.icloud.com' self._setup_endpoint = 'https://setup.icloud.com/setup/ws/1' self._base_login_url = '%s/login' % self._setup_endpoint if cookie_directory: self._cookie_directory = os.path.expanduser( os.path.normpath(cookie_directory)) else: self._cookie_directory = os.path.join( tempfile.gettempdir(), 'pyicloud', ) self.session = requests.Session() self.session.verify = verify self.session.headers.update({ 'Origin': self._home_endpoint, 'Referer': '%s/' % self._home_endpoint, 'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)' }) cookiejar_path = self._get_cookiejar_path() self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if os.path.exists(cookiejar_path): try: self.session.cookies.load() except cookielib.LoadError: # Most likely a pickled cookiejar from earlier versions pass self.params = { 'clientBuildNumber': '14E45', 'clientId': self.client_id, } self.authenticate()
def __init__( self, apple_id, password=None, cookie_directory=None, verify=True ): if password is None: password = get_password_from_keyring(apple_id) self.data = {} self.client_id = str(uuid.uuid1()).upper() self.user = {'apple_id': apple_id, 'password': password} self._password_filter = PyiCloudPasswordFilter(password) logger.addFilter(self._password_filter) self._home_endpoint = 'https://www.icloud.com' self._setup_endpoint = 'https://setup.icloud.com/setup/ws/1' self._base_login_url = '%s/login' % self._setup_endpoint if cookie_directory: self._cookie_directory = os.path.expanduser( os.path.normpath(cookie_directory) ) else: self._cookie_directory = os.path.join( tempfile.gettempdir(), 'pyicloud', ) self.session = PyiCloudSession(self) self.session.verify = verify self.session.headers.update({ 'Origin': self._home_endpoint, 'Referer': '%s/' % self._home_endpoint, 'User-Agent': 'Opera/9.52 (X11; Linux i686; U; en)' }) cookiejar_path = self._get_cookiejar_path() self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if os.path.exists(cookiejar_path): try: self.session.cookies.load() except cookielib.LoadError: # Most likely a pickled cookiejar from earlier versions pass self.params = { 'clientBuildNumber': '14E45', 'clientId': self.client_id, } self.authenticate()
def __init__( self, apple_id, password=None, cookie_directory=None, verify=True, client_id=None, with_family=True, ): if password is None: password = get_password_from_keyring(apple_id) self.data = {} self.client_id = client_id or str(uuid1()).upper() self.with_family = with_family self.user = {"apple_id": apple_id, "password": password} self.password_filter = PyiCloudPasswordFilter(password) LOGGER.addFilter(self.password_filter) self._base_login_url = "%s/login" % self.SETUP_ENDPOINT if cookie_directory: self._cookie_directory = path.expanduser(path.normpath(cookie_directory)) else: self._cookie_directory = path.join(gettempdir(), "pyicloud") self.session = PyiCloudSession(self) self.session.verify = verify self.session.headers.update( { "Origin": self.HOME_ENDPOINT, "Referer": "%s/" % self.HOME_ENDPOINT, "User-Agent": "Opera/9.52 (X11; Linux i686; U; en)", } ) cookiejar_path = self._get_cookiejar_path() self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if path.exists(cookiejar_path): try: self.session.cookies.load() LOGGER.debug("Read cookies from %s", cookiejar_path) except: # pylint: disable=bare-except # Most likely a pickled cookiejar from earlier versions. # The cookiejar will get replaced with a valid one after # successful authentication. LOGGER.warning("Failed to read cookiejar %s", cookiejar_path) self.params = { "clientBuildNumber": "17DHotfix5", "clientMasteringNumber": "17DHotfix5", "ckjsBuildVersion": "17DProjectDev77", "ckjsVersion": "2.0.5", "clientId": self.client_id, } self.authenticate() self._files = None self._photos = None
def __init__( self, apple_id, password=None, cookie_directory=None, verify=True, client_id=None, with_family=True, ): if password is None: password = get_password_from_keyring(apple_id) self.user = {"accountName": apple_id, "password": password} self.data = {} self.params = {} self.client_id = client_id or ("auth-%s" % str(uuid1()).lower()) self.with_family = with_family self.password_filter = PyiCloudPasswordFilter(password) LOGGER.addFilter(self.password_filter) if cookie_directory: self._cookie_directory = path.expanduser( path.normpath(cookie_directory)) if not path.exists(self._cookie_directory): mkdir(self._cookie_directory, 0o700) else: topdir = path.join(gettempdir(), "pyicloud") self._cookie_directory = path.join(topdir, getpass.getuser()) if not path.exists(topdir): mkdir(topdir, 0o777) if not path.exists(self._cookie_directory): mkdir(self._cookie_directory, 0o700) LOGGER.debug("Using session file %s", self.session_path) self.session_data = {} try: with open(self.session_path) as session_f: self.session_data = json.load(session_f) except: # pylint: disable=bare-except LOGGER.info("Session file does not exist") if self.session_data.get("client_id"): self.client_id = self.session_data.get("client_id") else: self.session_data.update({"client_id": self.client_id}) self.session = PyiCloudSession(self) self.session.verify = verify self.session.headers.update({ "Origin": self.HOME_ENDPOINT, "Referer": "%s/" % self.HOME_ENDPOINT }) cookiejar_path = self.cookiejar_path self.session.cookies = cookielib.LWPCookieJar(filename=cookiejar_path) if path.exists(cookiejar_path): try: self.session.cookies.load(ignore_discard=True, ignore_expires=True) LOGGER.debug("Read cookies from %s", cookiejar_path) except: # pylint: disable=bare-except # Most likely a pickled cookiejar from earlier versions. # The cookiejar will get replaced with a valid one after # successful authentication. LOGGER.warning("Failed to read cookiejar %s", cookiejar_path) self.authenticate() self._drive = None self._files = None self._photos = None