// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Newtonsoft.Json.Linq; namespace Microsoft.AspNetCore.Authentication.Facebook { /// /// Contains static methods that allow to extract user's information from a /// instance retrieved from Facebook after a successful authentication process. /// public static class FacebookHelper { /// /// Gets the Facebook user ID. /// public static string GetId(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("id"); } /// /// Gets the user's min age. /// public static string GetAgeRangeMin(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return TryGetValue(user, "age_range", "min"); } /// /// Gets the user's max age. /// public static string GetAgeRangeMax(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return TryGetValue(user, "age_range", "max"); } /// /// Gets the user's birthday. /// public static string GetBirthday(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("birthday"); } /// /// Gets the Facebook email. /// public static string GetEmail(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("email"); } /// /// Gets the user's first name. /// public static string GetFirstName(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("first_name"); } /// /// Gets the user's gender. /// public static string GetGender(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("gender"); } /// /// Gets the user's family name. /// public static string GetLastName(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("last_name"); } /// /// Gets the user's link. /// public static string GetLink(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("link"); } /// /// Gets the user's location. /// public static string GetLocation(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return TryGetValue(user, "location", "name"); } /// /// Gets the user's locale. /// public static string GetLocale(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("locale"); } /// /// Gets the user's middle name. /// public static string GetMiddleName(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("middle_name"); } /// /// Gets the user's name. /// public static string GetName(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("name"); } /// /// Gets the user's timezone. /// public static string GetTimeZone(JObject user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return user.Value("timezone"); } // Get the given subProperty from a property. private static string TryGetValue(JObject user, string propertyName, string subProperty) { JToken value; if (user.TryGetValue(propertyName, out value)) { var subObject = JObject.Parse(value.ToString()); if (subObject != null && subObject.TryGetValue(subProperty, out value)) { return value.ToString(); } } return null; } } }