blob: 6406699b212c49fe97f35432cd32b9107c2b61a7 [file] [log] [blame]
// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:json_annotation/json_annotation.dart';
import '../common/json_converters.dart';
part 'token_info.g.dart';
@JsonSerializable()
class TokenInfo {
/// Creates a new [TokenInfo].
const TokenInfo({
this.issuer,
this.authorizedParty,
this.audience,
this.subject,
this.hostedDomain,
this.email,
this.emailIsVerified,
this.accessTokenHash,
this.fullName,
this.profilePictureUrl,
this.givenName,
this.familyName,
this.locale,
this.issued,
this.expiration,
this.jwtId,
this.algorithm,
this.keyId,
this.encoding,
});
/// Create a new [TokenInfo] object from its JSON representation.
factory TokenInfo.fromJson(Map<String, dynamic> json) => _$TokenInfoFromJson(json);
/// The issuer of the token (e.g. "accounts.google.com").
@JsonKey(name: 'iss')
final String? issuer;
/// The party to which the ID Token was issued.
@JsonKey(name: 'azp')
final String? authorizedParty;
/// The token's intended audience.
///
/// This should be compared against the expected OAuth client ID.
@JsonKey(name: 'aud')
final String? audience;
/// The principal (subject) of the token.
@JsonKey(name: 'sub')
final String? subject;
/// The user's domain.
///
/// https://developers.google.com/identity/protocols/OpenIDConnect#hd-param
@JsonKey(name: 'hd')
final String? hostedDomain;
/// The user's email address.
@JsonKey(name: 'email')
final String? email;
/// Boolean indicating whether the user has verified their email address.
@JsonKey(name: 'email_verified')
@BoolConverter()
final bool? emailIsVerified;
/// Access token hash value.
@JsonKey(name: 'at_hash')
final String? accessTokenHash;
/// The user's full name.
@JsonKey(name: 'name')
final String? fullName;
/// URL of the user's profile picture.
@JsonKey(name: 'picture')
final String? profilePictureUrl;
/// The user's given name.
@JsonKey(name: 'given_name')
final String? givenName;
/// The user's family name / surname.
@JsonKey(name: 'family_name')
final String? familyName;
/// The user's local code (e.g. "en")
@JsonKey(name: 'locale')
final String? locale;
/// Token issuance date.
@JsonKey(name: 'iat')
@SecondsSinceEpochConverter()
final DateTime? issued;
/// Token expiration.
@JsonKey(name: 'exp')
@SecondsSinceEpochConverter()
final DateTime? expiration;
/// Unique identifier for the token itself.
@JsonKey(name: 'jti')
final String? jwtId;
/// Encryption algorithm used to encrypt the token (e.g. "RS256").
@JsonKey(name: 'alg')
final String? algorithm;
/// Key identifier.
@JsonKey(name: 'kid')
final String? keyId;
/// The encoding that was used to encode the unverified token (e.g. "JWT")
@JsonKey(name: 'typ')
final String? encoding;
/// Serializes this object to a JSON primitive.
Map<String, dynamic> toJson() => _$TokenInfoToJson(this);
}