platform/packages/oauth2/lib/src/response.dart
Tobe O a7842bddd8 Add 'packages/oauth2/' from commit '0bef42c4b9e3cbc800bb1b7b89b736baff814b9f'
git-subtree-dir: packages/oauth2
git-subtree-mainline: 71aa3464b9
git-subtree-split: 0bef42c4b9
2020-02-15 18:22:20 -05:00

73 lines
2.5 KiB
Dart

/// Represents an OAuth2 authorization token.
class AuthorizationTokenResponse {
/// The string that third parties should use to act on behalf of the user in question.
final String accessToken;
/// An optional key that can be used to refresh the [accessToken] past its expiration.
final String refreshToken;
/// An optional, but recommended integer that signifies the time left until the [accessToken] expires.
final int expiresIn;
/// Optional, if identical to the scope requested by the client; otherwise, required.
final Iterable<String> scope;
const AuthorizationTokenResponse(this.accessToken,
{this.refreshToken, this.expiresIn, this.scope});
Map<String, dynamic> toJson() {
var map = <String, dynamic>{'access_token': accessToken};
if (refreshToken?.isNotEmpty == true) map['refresh_token'] = refreshToken;
if (expiresIn != null) map['expires_in'] = expiresIn;
if (scope != null) map['scope'] = scope.toList();
return map;
}
}
/// Represents the response for an OAuth2 `device_code` request.
class DeviceCodeResponse {
/// REQUIRED. The device verification code.
final String deviceCode;
/// REQUIRED. The end-user verification code.
final String userCode;
/// REQUIRED. The end-user verification URI on the authorization
/// server. The URI should be short and easy to remember as end users
/// will be asked to manually type it into their user-agent.
final Uri verificationUri;
/// OPTIONAL. A verification URI that includes the [userCode] (or
/// other information with the same function as the [userCode]),
/// designed for non-textual transmission.
final Uri verificationUriComplete;
/// OPTIONAL. The minimum amount of time in seconds that the client
/// SHOULD wait between polling requests to the token endpoint. If no
/// value is provided, clients MUST use 5 as the default.
final int interval;
/// The lifetime, in *seconds* of the [deviceCode] and [userCode].
final int expiresIn;
const DeviceCodeResponse(
this.deviceCode, this.userCode, this.verificationUri, this.expiresIn,
{this.verificationUriComplete, this.interval});
Map<String, dynamic> toJson() {
var out = <String, dynamic>{
'device_code': deviceCode,
'user_code': userCode,
'verification_uri': verificationUri.toString(),
};
if (verificationUriComplete != null) {
out['verification_uri_complete'] = verificationUriComplete.toString();
}
if (interval != null) out['interval'] = interval;
if (expiresIn != null) out['expires_in'] = expiresIn;
return out;
}
}