Two-step authentication is an older security method used for
accounts without an Apple device, or who are unable to upgrade
to iOS 9 or OS X El Capitan.
https://support.apple.com/en-us/HT204152
If the account has two-factor authentication enabled, we can still
fall back to the end-points for two-step authentication, as we do
not support 2FA yet.
Issue #102
Tor Arne Vestbø <torarnv@gmail.com> (3):
Detect TTY when deciding whether to enable interactive mode or not
Handle content-type header with parameters when debugging requests
Gracefully handle malformed cookiejars
LoadError would only be raised if the cookiejar didn't contain the
expected magic header. But a pickeled jar would potentially contain
data that raised a UnicodeDecodeError, so we need account for both.
Bart274 <de_van_bos@msn.com> (1):
Replace manual time zone handling with use of the tzlocal module
Tor Arne Vestbø <torarnv@gmail.com> (5):
Remove leftover debug logging from iCloud Photo service
Remove useless sanity check for sparse photo album assets
Don't assume request response is always JSON
Charge HTTP logging to separate child logger of each service
Don't set host header in reminders service
This solves an issue where we would end up with an empty list of
time zones, throwing an exception as a result.
It also resolves to the user's actual Olson time zone name,
instead of the first of all the possible time zone names that
match the current time zone of the user.
The two helper methods are no longer needed, as we can now use
get_localzone() directly.
It's automatically taken care of by the requests module based on
the URL, and explicitly setting it on the globally shared session
object results in other services (such as the calendar service)
breaking when used after the reminders service in the same session.
Unfortunately log filters only apply to each logger, not to its
children, so we have to make sure the http child loggers has the
same password filter as the root base filter.
If the response's content-type is not one of the two json mimetypes
iCloud will send us we need to return early, not try to parse the
error messsage out of an invalid json object.
For added safety we wrap the JSON decoding in a try/except, so that
malformed JSON data will not result in an exception from that part
of the code (though it will likely still raise at a later point when
the JSON data is parsed in service logic).
Fixes#71
Adam Coddington <me@adamcoddington.net> (2):
Drops support for Python 2.6.
[#64] Adds Keychain-based Authentication
Daren Lord <dlaccount@icloud.com> (1):
Squashed commit of the following:
Tor Arne Vestbø <torarnv@gmail.com> (11):
Normalize HTTP header names to title case
Remove three unused endpoint definitions from PyiCloudService base
Use same setup/login endpoint as iCloud webapp
Don't set Host header manually
Fix reStructuredText inline literal formatting in README
Document how to use the contacts API
Simplify login sequence
Add centralized logging of iCloud API requests
Add support for two-factor authentication
Add iCloud Photo Library service
Tweak wording of password prompt
yannickulrich <yannick.ulrich@collinproject.de> (3):
Adding Reminder support
PEP8 compatibility
PEP8 for base.py
When 2FA is enabled in iCloud most iCloud services are unavailable
without first going through the 2FA handshake. We now have API to
initiate the 2FA, which can be used by more advanced API clients.
The built in command line 'icloud' application has not been updated,
as listing and managing devices though Find my iPhone is one of the
services that do not require 2FA.
Fixes issue #66.
Allows easier debugging of failing API calls. We filter out iCloud
password so that debug logs can be attached to bug reports, etc.
Errors are raised as PyiCloudAPIResponseError with a reason and
code property, in addition to being logged, which allows them to
be handled by client code, or will at least give a clearer idea
about the issue than e.g. opaque key errors when trying to access
non existent properties of the JSON response.