- None
- None
- None
- None
- Remove Xcode project and worskpaces, dropping support for Carthage
- Celebrating Conduit's maturity with our 1.0.0 release 🎉
- Remove deprecated types:
BearerOAuth2Token
,OAuth2TokenAES256CBCCipher
, andOAuth2TokenDiskStore
- None
- None
- None
ResponsePipelineMiddleware
protocol has been updated.
- Surface request metrics to response middleware
SessionDelegate
has been updated to capture request metrics inTaskResponse
.URLSessionClient
has been updated to passTaskResponse
to any response middleware.ResponsePipelineMiddleware
has been refactored to pass aTaskResponse
structure.
- None
- Unit test updates
- Existing unit tests updated as needed, and new tests have been added.
- Private
URL
extension has been moved to test targets. @testable
imports have been removed where possible.
- None
- Add
TokenMigrator
to perform migrations between token stores and client configurations. - Add
ConduitDynamic
dynamic library to Package description.
- None
- None
AES256CBCCipher.Error
has been completely removed in favor ofCryptoError
Encryptor
andDecryptor
protocols have been added to genericize crypto operationsCipher
is a typealias for a type that is both anEncryptor
andDecryptor
AES256CBCCipher
now implementsCipher
HybridCipher
has been added to support hybrid encryption, which delegates asymmetric key generation to aHybridKeyProvider
KeychainHybridKeyProvider
uses keychain queries to provide either RSA or ECC key pairs. ECC keys are stored on the Secure Enclave if possible. More details here.OAuth2TokenCryptoCipher
delegates token data encryption / decryption to an underlyingEncryptor
andDecryptor
OAuth2TokenAES256CBCCipher
has been deprecated in favor ofOAuth2TokenCryptoCipher
provided with anAES256CBCCipher
- None
- None
- None
- None
- Fix concurrency issues in
URLSessionClient
- None
- None
- None
- Issue #137 |
Crash in URLSessionClient
- None
- None
- None
- None
- Restrict plaforms in Package.swift
- Update to Swift 5.0
- None
- None
- None
OAuth2TokenUserDefaultsStore
conformance toOAuth2TokenEncryptedStore
.OAuth2TokenFileStore
conformance toOAuth2TokenEncryptedStore
.OAuth2Authorization
conformance toEquatable
.OAuth2Authorization
now exposes read-onlytype
andlevel
properties.OAuth2ClientConfiguration
conformance toEquatable
.OAuth2ServerEnvironment
conformance toEquatable
.OAuth2TokenStore
protocol now exposesisRefreshTokenLockedFor
,tokenIdentifierFor
andtokenLockIdentifierFor
.BearerToken
conformance toEquatable
.- Add dependency to
Security.framework
- Introduce
OAuth2TokenCipher
andOAuth2TokenEncryptedStore
protocols to allow for token encryption/decryption. - User Defaults token store now supports token encryption.
- File token store now supports token encryption.
- Fully support application-side custom token stores.
- Introduce
OAuth2TokenAES256CBCCipher
cipher for AES 256bit CBC token encryption.
- None
- None
- None
- Include expiring token in pre-fetch hook of
Migrator
- None
- None
- None
- None
FormEncodedRequestSerializer
can once again be created publicly
- None
- None
- Correct XML Serialization for Predefined Escape characters
- Update XML Serialziation to correctly escape Predefined Escape characters disallowed in XML Requests
- None
- None
- Add context support to
OAuth2TokenUserDefaultsStore
to enable sandboxing at key level.
- Update SOAP envelope
encodingStyle
property to non-optional. - Fix file-based token store when path does not exist.
- None
serialize(request:bodyParameters:)
is nowpublic
sinceFormEncodedRequestSerializer
is afinal
class.defaultHTTPHeaders
is nowpublic
sincestatic
properties cannot beopen
.- Add
XMLNodeAttributes
to preserve order of attributes on serialized XML nodes
- Add new
xmlString(format:)
method toXML
andXMLNode
.XMLSerialization
format options are:.condensed
-> same single-line condensed output as before..prettyPrinted(spaces: Int)
-> human-readable format with flexible indentation level (number of spaces).
- None
- None
- Find XML nodes matching a given function.
- Traverse XML tree upwards with
parent
property.
- None
- None
- Allow direct manipulation of XML trees by converting XML and XMLNode to reference types.
- Add scope to OAuth2AuthorizationResponse
- Improved verbose logging for middleware pipeline.
- None
- None
middleware
has been replaced byrequestMiddleware
ResponsePipelineMiddleware
addedURLSessionClient
now accepts both request and response middleware
- None
- None
- None
- None
expires_in
is no longer a required field for access token responses
- None
- None
- None
- Added workaround to fix SwiftLint crash: #97
- None
- None
- None
OAuth2TokenUserDefaultsStore
doesn't default to.standard
for certain operations
- None
OAuth2TokenStore
now includes required interface for handling refresh token locks
- Loose-IPC is now used to handle a single active session across multiple processes (i.e. app extensions). Token refreshes were previously only safeguarded via serial pipeline; now, they are also protected against concurrent refreshes from other processes using the same storage
- Precise token lock expiration control is available via
OAuth2RequestPipelineMiddleware.tokenRefreshLockRelinquishInterval
OAuth2TokenUserDefaultsStore
adds the ability to store to user-definedUserDefaults
, most commonly for app group containersOAuth2TokenFileStore
adds additional I/O control, such as multiprocess file coordination viaNSFileCoordinator
and file protection
OAuth2TokenFileStore
solves a design flaw inOAuth2TokenDiskStore
that prevented multiple tokens to be written for a single OAuth 2.0 client
- Code coverage is now enforced via codecov.io
- Added
XMLRequestSerializerTests
- Added
AuthTokenMigratorTests
OAuth2TokenDiskStore
is now deprecated in favor ofOAuth2TokenFileStore
andOAuth2TokenUserDefaultsStore
- None
- Custom refresh grant strategies can be provided on
OAuth2RequestPipelineMiddleware
- Default token refresh logic has been moved to
OAuth2RefreshTokenGrantStrategy
- None
- None
- None
- None
refresh_token
grants no longer require a scope to be set
- None
- Update
XMLNode
interface to better define usage expectations.- Default values for
nodes(named:traversal:)
andnode()
methods have been removed and traversal algorithm must be now set explicitly. getValue(name:)
has been updated to always use.firstLevel
only.- New method
findValue(name:traversal:)
has been added, and requires the traversal algorithm to be set explicitly.
- Default values for
- None
- None
- None
- Update to Xcode 9.3 / Swift 4.1
- None
- None
- None
- None
- None
- Fix issue where Logger levels where being ignored.
- None
- None
- Use Xcode new build system.
- Run CI on Xcode 9.2 image.
- Remove implicit force unwrapped property Conduit.Auth.defaultClientConfiguration (now it is an optional).
- Refactor unit tests to allow for parallel testing.
- None
- None
- None
- None
- Fixed a critical issue with public-key pinning in
SSLPinningServerAuthenticationPolicy
- None
- Include node name when throwing a 'node not found' error.
- Rakefile tasks now refer to the workspace and include ConduitExampleIOS
- Rakefile task output is more verbose
- URLSessionClient serial queue naming is now actually unique (only used for debugging)
- Updated ConduitExampleIOS to Swift 4
- Fixed
OAuth2TokenKeychainStore
accessibility - Fixed legacy token migration within
OAuth2RequestPipelineMiddleware
- Code formatting updates from SwiftLint autocorrect
- None
- Synchronous method for issuing authentication tokens
- None
- None
- Unit Test improvements
- Code clean up for additional SwiftLint rules
- None
- Minimum language version is now Swift 4
OAuth2Token
protocol no longer inherits fromNSCoding
, removesisValid
- All usage of
BearerOAuth2Token
andBasicOAuth2Token
have been replaced withBearerToken
andBasicToken
OAuth2TokenStore
now requires genericOAuth2Token & DataConvertible
typesRequestSerializer
signature renamed according to Swift style guidelines
- All targets now require app-extension-safe API
- Added
BearerToken
struct that leverages Swift-friendlyCodable
andDecodable
protocols for storage - Added
BasicToken
struct with limited responsibility and usage - Added migration extension for
BearerOAuth2Token
=>BearerToken
- Added backwards-compatibility for
BearerOAuth2Token
- Deprecated
BearerOAuth2Token
andBasicOAuth2Token
- Added test hosts for iOS 11 keychain support
- None
- None
- Improved network logging, including a static request counter
- None
RequestSerializer
no longer handles query parametersXMLNode
value getters have been updated to conform toXMLTextNodeInitializable
.
FormEncodedRequestSerializer
now exposes query formatting options for body parametersQueryStringFormattingOptions
now encodes plus symbols by defaultXMLTextNodeInitializable
protocol has been added.
- None
- Auth shared
URLSessionClient
defaults to background operation queue. - Update
URLSessionClient
to returnHTTPURLResponse
for easy retrieval of HTTP status codes. - Changes on
XMLNode
:- Rename
value
property totext
. - Update
XMLNode
subscript method to returnXMLNode?
. - Add
.firstLevel
traversal forXMLNode
to retrieve direct children only. - Remove
xmlValue()
in favor ofdescription
. - Conform to
LosslessStringConvertible
protocol. - Rename
value()
togetValue()
. - Rename
get(named:)
togetValue(named:)
.
- Rename
- Changes on
XML
:- Remove
xmlValue()
in favor ofdescription
. - Conform to
LosslessStringConvertible
protocol.
- Remove
- Remove
XMLNodeIndex
.
- Shared
URLSessionClient
with default background operation queue. - Enhancements to
XMLNode
class:value
passed toinit
can be anyCustomStringConvertible
.node(named:)
retrieves the first descendant found with the given name and throws an exception if no matches found.XMLNode
can be created from Swift dictionaries of[String: CustomStringConvertible]
(aka.XMLDictionary
).- Add optional counterparts for
getValue()
andgetValue(named:)
- None
- Remove unnecessary casting to
NSError
onSessionTaskCompletion
. XMLNode.children
is no longer optional, defaults to empty array.
Enhancements to XMLNode
class:
init
has been improved to allow passing value, attributes and/or children (optional parameters).nodes(named:)
method finds an retrieves a list of descendant nodes matching the given name.getValue()
generic method returns the node text value, if any, converted to any given type that can be constructed from a string by conforming toLosslessStringConvertible
.get(_:)
generic method returns the value of the first descendant node matching the given name, converted to any given type that can be constructed from a string by conforming toLosslessStringConvertible
.
- None
- Initial Release