Esempio n. 1
0
        public async Task <ApiResponse <TokenDto> > Create(UserPostRequest request)
        {
            if (request.Password != request.ConfirmPassword)
            {
                return(new ApiResponse <TokenDto>
                {
                    Success = false,
                    ErrorCode = ErrorCodes.PASSWORDS_DONT_MATCH
                });
            }
            if (request.Name == null || request.Name.Length < 3)
            {
                return(new ApiResponse <TokenDto>
                {
                    Success = false,
                    ErrorCode = ErrorCodes.INVALID_NAME
                });
            }
            if (request.Role == null)
            {
                request.Role = UserRoles.USER;
            }
            else
            {
                request.Role = request.Role.ToLowerInvariant();
            }

            if (request.Role != UserRoles.OWNER && request.Role != UserRoles.USER)
            {
                request.Role = UserRoles.USER;
            }

            try
            {
                var auth = await _firebaseService.GetFirebaseAuthProvider().CreateUserWithEmailAndPasswordAsync(request.Email, request.Password, request.Name, false);

                var additionalClaims = new Dictionary <string, object>()
                {
                    { Claims.ROLE, request.Role },
                };
                await FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync(auth.User.LocalId, additionalClaims);

                auth = await _firebaseService.GetFirebaseAuthProvider().SignInWithEmailAndPasswordAsync(request.Email, request.Password);

                return(new ApiResponse <TokenDto>
                {
                    Success = true,
                    Data = new TokenDto
                    {
                        Token = auth.FirebaseToken,
                        RefreshToken = auth.RefreshToken,
                        Name = auth.User.DisplayName,
                        Email = auth.User.Email,
                        UserId = auth.User.LocalId,
                        ExpiresIn = auth.ExpiresIn,
                        CreatedAt = auth.Created,
                        Role = request.Role
                    }
                });
            }catch (Firebase.Auth.FirebaseAuthException ex)
            {
                return(new ApiResponse <TokenDto>
                {
                    Success = false,
                    ErrorCode = _firebaseService.ConvertErrorCode(ex.Reason)
                });
            }catch
            {
                return(new ApiResponse <TokenDto>
                {
                    Success = false,
                    ErrorCode = ErrorCodes.UNKNOWN_ERROR
                });
            }
        }