Пример #1
0
        /// <summary>
        /// Using the idToken of an authenticated user, get the details of the user's account
        /// This will method possibly will return 400 bad request for social media logins like facebook, twitter because firebase doesn't store user information
        /// </summary>
        /// <param name="firebaseToken"> The FirebaseToken (idToken) of an authenticated user. </param>
        /// <returns> The <see cref="User"/>. </returns>
        public async Task <User> GetUserAsync(string firebaseToken)
        {
            var content      = $"{{\"idToken\":\"{firebaseToken}\"}}";
            var responseData = "N/A";

            try
            {
                var stringContent = new StringContent(content, Encoding.UTF8, "application/json");
                stringContent = GetHeaders(null, stringContent);

                var response = await this.client.PostAsync(new Uri(string.Format(GoogleGetUser, this.authConfig.ApiKey)), stringContent).ConfigureAwait(false);

                responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                var resultJson = JObject.Parse(responseData);
                var user       = JsonConvert.DeserializeObject <User>(resultJson["users"].First().ToString());
                return(user);
            }
            catch (Exception ex)
            {
                AuthErrorReason errorReason = GetFailureReason(responseData);
                throw new FirebaseAuthException(GoogleDeleteUserUrl, content, responseData, ex, errorReason);
            }
        }
Пример #2
0
        private async Task <FirebaseAuthLink> ExecuteWithPostContentAsync(string googleUrl, string postContent)
        {
            string responseData = "N/A";

            try
            {
                var response = await this.client.PostAsync(new Uri(string.Format(googleUrl, this.authConfig.ApiKey)), new StringContent(postContent, Encoding.UTF8, "application/json")).ConfigureAwait(false);

                responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                var user = JsonConvert.DeserializeObject <User>(responseData);
                var auth = JsonConvert.DeserializeObject <FirebaseAuthLink>(responseData);

                auth.AuthProvider = this;
                auth.User         = user;

                return(auth);
            }
            catch (Exception ex)
            {
                AuthErrorReason errorReason = GetFailureReason(responseData);
                throw new FirebaseAuthException(googleUrl, postContent, responseData, ex, errorReason);
            }
        }
 public FirebaseAuthException(string requestUrl, string requestData, string responseData, Exception innerException, AuthErrorReason reason = AuthErrorReason.Undefined)
     : base(GenerateExceptionMessage(requestUrl, requestData, responseData, reason), innerException)
 {
     RequestUrl   = requestUrl;
     RequestData  = requestData;
     ResponseData = responseData;
     Reason       = reason;
 }
Пример #4
0
        /// <summary>
        /// Deletes the user with a recent Firebase Token.
        /// </summary>
        /// <param name="token"> Recent Firebase Token. </param>
        public async Task DeleteUserAsync(string firebaseToken)
        {
            var content      = $"{{ \"idToken\": \"{firebaseToken}\" }}";
            var responseData = "N/A";

            try
            {
                var response = await this.client.PostAsync(new Uri(string.Format(GoogleDeleteUserUrl, this.authConfig.ApiKey)), new StringContent(content, Encoding.UTF8, "application/json")).ConfigureAwait(false);

                responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                response.EnsureSuccessStatusCode();
            }
            catch (Exception ex)
            {
                AuthErrorReason errorReason = GetFailureReason(responseData);
                throw new FirebaseAuthException(GoogleDeleteUserUrl, content, responseData, ex, errorReason);
            }
        }
Пример #5
0
        /// <summary>
        /// Sends user an email with a link to reset his password.
        /// </summary>
        /// <param name="email"> The email. </param>
        public async Task SendPasswordResetEmailAsync(string email)
        {
            var content      = $"{{\"requestType\":\"PASSWORD_RESET\",\"email\":\"{email}\"}}";
            var responseData = "N/A";

            try
            {
                var response = await this.client.PostAsync(new Uri(string.Format(GoogleGetConfirmationCodeUrl, this.authConfig.ApiKey)), new StringContent(content, Encoding.UTF8, "application/json")).ConfigureAwait(false);

                responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                response.EnsureSuccessStatusCode();
            }
            catch (Exception ex)
            {
                AuthErrorReason errorReason = GetFailureReason(responseData);
                throw new FirebaseAuthException(GoogleGetConfirmationCodeUrl, content, responseData, ex, errorReason);
            }
        }
Пример #6
0
        /// <summary>
        /// Sends user an email with a link to verify his email address.
        /// </summary>
        /// <param name="firebaseToken"> The FirebaseToken (idToken) of an authenticated user. </param>
        public async Task <bool> SendEmailVerificationAsync(string firebaseToken, string locale = null)
        {
            string responseData = "N/A";
            string content      = $"{{\"requestType\":\"VERIFY_EMAIL\",\"idToken\":\"{firebaseToken}\"}}";

            try
            {
                var stringContent = new StringContent(content, Encoding.UTF8, "application/json");
                stringContent = GetHeaders(null, stringContent);

                HttpResponseMessage response = await client.PostAsync(new Uri(string.Format(GoogleGetConfirmationCodeUrl, authConfig.ApiKey)), stringContent).ConfigureAwait(false);

                responseData = await response.Content.ReadAsStringAsync();

                response.EnsureSuccessStatusCode();
                return(response.StatusCode == System.Net.HttpStatusCode.OK);
            }
            catch (Exception ex)
            {
                AuthErrorReason errorReason = GetFailureReason(responseData);
                throw new FirebaseAuthException(GoogleGetConfirmationCodeUrl, content, responseData, ex, errorReason);
            }
        }
Пример #7
0
 private static string GenerateExceptionMessage(string requestUrl, string requestData, string responseData, AuthErrorReason errorReason)
 {
     return($"Exception occured while authenticating.\nUrl: {requestUrl}\nRequest Data: {requestData}\nResponse: {responseData}\nReason: {errorReason}");
 }
Пример #8
0
 public AuthError(AuthErrorReason reason)
 {
     Reason = reason;
 }
Пример #9
0
 public AuthError(AuthErrorReason reason, Exception innerException) : base(reason.ToString(), innerException)
 {
     Reason = reason;
 }
Пример #10
0
        public string ConvertErrorCode(AuthErrorReason reason)
        {
            switch (reason)
            {
            case AuthErrorReason.Undefined:
                break;

            case AuthErrorReason.OperationNotAllowed:
                break;

            case AuthErrorReason.UserDisabled:
                break;

            case AuthErrorReason.UserNotFound:
                break;

            case AuthErrorReason.InvalidProviderID:
                break;

            case AuthErrorReason.InvalidAccessToken:
                break;

            case AuthErrorReason.LoginCredentialsTooOld:
                break;

            case AuthErrorReason.MissingRequestURI:
                break;

            case AuthErrorReason.SystemError:
                break;

            case AuthErrorReason.InvalidEmailAddress:
                return(ErrorCodes.INVALID_EMAIL);

            case AuthErrorReason.MissingPassword:
                return(ErrorCodes.MISSING_PASSWORD);

            case AuthErrorReason.WeakPassword:
                return(ErrorCodes.WEAK_PASSWORD);

            case AuthErrorReason.EmailExists:
                return(ErrorCodes.ACCOUNT_EXISTS);

            case AuthErrorReason.MissingEmail:
                return(ErrorCodes.MISSING_EMAIL);

            case AuthErrorReason.UnknownEmailAddress:
                return(ErrorCodes.WRONG_ACCOUNT);

            case AuthErrorReason.WrongPassword:
                return(ErrorCodes.WRONG_PASSWORD);

            case AuthErrorReason.TooManyAttemptsTryLater:
                break;

            case AuthErrorReason.MissingRequestType:
                break;

            case AuthErrorReason.ResetPasswordExceedLimit:
                break;

            case AuthErrorReason.InvalidIDToken:
                return(ErrorCodes.INVALID_TOKEN);

            case AuthErrorReason.MissingIdentifier:
                break;

            case AuthErrorReason.InvalidIdentifier:
                break;

            case AuthErrorReason.AlreadyLinked:
                break;

            default:
                break;
            }
            return(ErrorCodes.UNKNOWN_ERROR);
        }