// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Globalization; using Newtonsoft.Json; namespace osu.Game.Online.API { [Serializable] public class OAuthToken { /// /// OAuth 2.0 access token. /// [JsonProperty(@"access_token")] public string AccessToken; [JsonProperty(@"expires_in")] public long ExpiresIn { get { return AccessTokenExpiry - DateTimeOffset.UtcNow.ToUnixTimeSeconds(); } set { AccessTokenExpiry = DateTimeOffset.Now.AddSeconds(value).ToUnixTimeSeconds(); } } public bool IsValid => !string.IsNullOrEmpty(AccessToken) && ExpiresIn > 30; public long AccessTokenExpiry; /// /// OAuth 2.0 refresh token. /// [JsonProperty(@"refresh_token")] public string RefreshToken; public override string ToString() => $@"{AccessToken}|{AccessTokenExpiry.ToString(NumberFormatInfo.InvariantInfo)}|{RefreshToken}"; public static OAuthToken Parse(string value) { try { string[] parts = value.Split('|'); return new OAuthToken { AccessToken = parts[0], AccessTokenExpiry = long.Parse(parts[1], NumberFormatInfo.InvariantInfo), RefreshToken = parts[2] }; } catch { } return null; } } }