// 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 System.Collections.Generic; using System.Security.Claims; using Microsoft.AspNetCore.Authentication; using System.Globalization; using Microsoft.AspNetCore.Authentication.OAuth; using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Authentication.Facebook { /// /// Configuration options for . /// public class FacebookOptions : OAuthOptions { /// /// Initializes a new . /// public FacebookOptions() { CallbackPath = new PathString("/signin-facebook"); SendAppSecretProof = true; AuthorizationEndpoint = FacebookDefaults.AuthorizationEndpoint; TokenEndpoint = FacebookDefaults.TokenEndpoint; UserInformationEndpoint = FacebookDefaults.UserInformationEndpoint; Scope.Add("public_profile"); Scope.Add("email"); Fields.Add("name"); Fields.Add("email"); Fields.Add("first_name"); Fields.Add("last_name"); ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id"); ClaimActions.MapJsonSubKey("urn:facebook:age_range_min", "age_range", "min"); ClaimActions.MapJsonSubKey("urn:facebook:age_range_max", "age_range", "max"); ClaimActions.MapJsonKey(ClaimTypes.DateOfBirth, "birthday"); ClaimActions.MapJsonKey(ClaimTypes.Email, "email"); ClaimActions.MapJsonKey(ClaimTypes.Name, "name"); ClaimActions.MapJsonKey(ClaimTypes.GivenName, "first_name"); ClaimActions.MapJsonKey("urn:facebook:middle_name", "middle_name"); ClaimActions.MapJsonKey(ClaimTypes.Surname, "last_name"); ClaimActions.MapJsonKey(ClaimTypes.Gender, "gender"); ClaimActions.MapJsonKey("urn:facebook:link", "link"); ClaimActions.MapJsonSubKey("urn:facebook:location", "location", "name"); ClaimActions.MapJsonKey(ClaimTypes.Locality, "locale"); ClaimActions.MapJsonKey("urn:facebook:timezone", "timezone"); } /// /// Check that the options are valid. Should throw an exception if things are not ok. /// public override void Validate() { if (string.IsNullOrEmpty(AppId)) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Exception_OptionMustBeProvided, nameof(AppId)), nameof(AppId)); } if (string.IsNullOrEmpty(AppSecret)) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.Exception_OptionMustBeProvided, nameof(AppSecret)), nameof(AppSecret)); } base.Validate(); } // Facebook uses a non-standard term for this field. /// /// Gets or sets the Facebook-assigned appId. /// public string AppId { get { return ClientId; } set { ClientId = value; } } // Facebook uses a non-standard term for this field. /// /// Gets or sets the Facebook-assigned app secret. /// public string AppSecret { get { return ClientSecret; } set { ClientSecret = value; } } /// /// Gets or sets if the appsecret_proof should be generated and sent with Facebook API calls. /// This is enabled by default. /// public bool SendAppSecretProof { get; set; } /// /// The list of fields to retrieve from the UserInformationEndpoint. /// https://developers.facebook.com/docs/graph-api/reference/user /// public ICollection Fields { get; } = new HashSet(); } }