Beispiel #1
0
        public virtual async Task <bool> GetAuthenticationStateAsync()
        {
            var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();

            if ((authState?.User?.Identity?.IsAuthenticated ?? false) == false)
            {
                CurrentIdentityUser = null;
                return(false);
            }

            CurrentIdentityUser = await _userManager.GetUserAsync(authState.User);

            return(true);
        }
Beispiel #2
0
        public override async Task <bool> CreateAsync(AppIdentityUserWithAccount user)
        {
            var createEntitySql = $"insert into {TN("Accounts")} (" +
                                  $"{CN("Id")}, " +
                                  $"{CN("CountryId")}, " +
                                  $"{CN("Email")}," +
                                  $"{CN("CompanyName")}, " +
                                  $"{CN("TaxCode")}, " +
                                  $"{CN("Region")}, " +
                                  $"{CN("City")}," +
                                  $"{CN("StreetAddress")}, " +
                                  $"{CN("AddressDetails")}, " +
                                  $"{CN("PostalCode")}, " +
                                  $"{CN("PhoneNumber")}, " +
                                  $"{CN("State")}) " +
                                  $"{CN("IsMaster")}) " +
                                  $"values ({GID("Id")}, {GID("CountryId")}, " +
                                  "@Email, @CompanyName, @TaxCode, @Region, @City, @StreetAddress, @AddressDetails, @PostalCode, @PhoneNumber, @State);";
            var createEntityParams = new
            {
                Id        = user.AccountId.ToString(),
                CountryId = user.CountryId.ToString(),
                user.Email,
                user.CompanyName,
                user.TaxCode,
                user.Region,
                user.City,
                user.StreetAddress,
                user.AddressDetails,
                user.PostalCode,
                user.PhoneNumber,
                user.State,
                user.IsMasterAccount
            };

            var createUserSql = $"insert into {TN("Users")} ( " +
                                $"{CN("Id")}, " +
                                $"{CN("AccountId")}, " +
                                $"{CN("Email")}, " +
                                $"{CN("FirstName")}, " +
                                $"{CN("LastName")}, " +
                                $"{CN("Username")}, " +
                                $"{CN("NormalizedUsername")}, " +
                                $"{CN("PasswordHash")}, " +
                                $"{CN("CultureInfo")}, " +
                                $"{CN("State")}, " +
                                $"{CN("DebugMode")}, " +
                                $"{CN("EmailConfirmed")}, " +
                                $"{CN("SecurityStamp")}, " +
                                $"{CN("ConcurrencyStamp")}, " +
                                $"{CN("PhoneNumber")}, " +
                                $"{CN("PhoneNumberConfirmed")}, " +
                                $"{CN("TwoFactorEnabled")}, " +
                                $"{CN("LockoutEnd")}, " +
                                $"{CN("LockoutEnabled")}, " +
                                $"{CN("AccessFailedCount")}) " +
                                $"select first 1 {GID("Id")}, {GID("AccountId")}, @Email, @FirstName, @LastName, @UserName, @NormalizedUserName, @PasswordHash, " +
                                $"coalesce(@CultureInfo,(case when c.{CN("Code2")} = 'RO' then 'ro' else 'en' end)), " +
                                "@State, @EmailConfirmed, @SecurityStamp, @ConcurrencyStamp, @PhoneNumber, @PhoneNumberConfirmed, @TwoFactorEnabled, @LockoutEnd, @LockoutEnabled, @AccessFailedCount " +
                                $"from {TN("Countries")} c where c.{CN("Id")} = {GID("CountryId")};";
            var createUserParams = new
            {
                Id       = user.Id.ToString(),
                EntityId = user.AccountId.ToString(),
                user.Email,
                user.FirstName,
                user.LastName,
                user.UserName,
                user.NormalizedUserName,
                user.PasswordHash,
                user.CultureInfo,
                user.State,
                user.DebugMode,
                user.EmailConfirmed,
                user.SecurityStamp,
                user.ConcurrencyStamp,
                user.PhoneNumber,
                user.PhoneNumberConfirmed,
                user.TwoFactorEnabled,
                LockoutEnd = user.LockoutEndForDb,
                user.LockoutEnabled,
                user.AccessFailedCount,
                CountryId = user.CountryId.ToString()
            };

            using var transaction = DbConnection.BeginTransaction();
            try
            {
                await DbConnection.ExecuteAsync(createEntitySql, createEntityParams, transaction);

                await DbConnection.ExecuteAsync(createUserSql, createUserParams, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Exception e)
            {
                _logger?.LogError(e, "Unable to create new user");
                transaction.Rollback();
                return(false);
            }
        }
Beispiel #3
0
        /// <inheritdoc />
        public override async Task <bool> UpdateAsync(AppIdentityUserWithAccount user, IList <IdentityUserClaim <Guid> > claims, IList <IdentityUserRole <Guid> > roles, IList <IdentityUserLogin <Guid> > logins, IList <IdentityUserToken <Guid> > tokens)
        {
            var updateUserSql =
                $"update {TN("Users")} set " +
                $"{CN("Email")} = @Email, " +
                $"{CN("FirstName")} = @FirstName, " +
                $"{CN("LastName")} = @LastName, " +
                $"{CN("Username")} = @UserName, " +
                $"{CN("NormalizedUsername")} = @NormalizedUserName, " +
                $"{CN("PasswordHash")} = @PasswordHash, " +
                $"{CN("CultureInfo")} = @CultureInfo, " +
                $"{CN("State")} = @State, " +
                $"{CN("EmailConfirmed")} = @EmailConfirmed, " +
                $"{CN("SecurityStamp")} = @SecurityStamp, " +
                $"{CN("ConcurrencyStamp")} = @ConcurrencyStamp, " +
                $"{CN("PhoneNumber")} = @PhoneNumber, " +
                $"{CN("PhoneNumberConfirmed")} = @PhoneNumberConfirmed, " +
                $"{CN("TwoFactorEnabled")} = @TwoFactorEnabled, " +
                $"{CN("LockoutEnd")} = @LockoutEnd, " +
                $"{CN("LockoutEnabled")} = @LockoutEnabled, " +
                $"{CN("AccessFailedCount")} = @AccessFailedCount " +
                $"where {CN("Id")} = {GID("Id")};";

            using var transaction = DbConnection.BeginTransaction();
            await DbConnection.ExecuteAsync(updateUserSql, new
            {
                user.Email,
                user.FirstName,
                user.LastName,
                user.UserName,
                user.NormalizedUserName,
                user.PasswordHash,
                user.CultureInfo,
                user.State,
                user.EmailConfirmed,
                user.SecurityStamp,
                user.ConcurrencyStamp,
                user.PhoneNumber,
                user.PhoneNumberConfirmed,
                user.TwoFactorEnabled,
                LockoutEnd = user.LockoutEndForDb,
                user.LockoutEnabled,
                user.AccessFailedCount,
                user.Id
            }, transaction);

            if (claims?.Count > 0)
            {
                var deleteClaimsSql = "delete " +
                                      $"from {TN("UserClaims")} " +
                                      $"where {CN("UserId")} = {GID("UserId")};";
                await DbConnection.ExecuteAsync(deleteClaimsSql, new { UserId = user.Id.ToString() }, transaction);

                var insertClaimsSql =
                    $"insert into {TN("UserClaims")} ({CN("UserId")}, {CN("ClaimType")}, {CN("ClaimValue")}) " +
                    $"values ({GID("UserId")}, @ClaimType, @ClaimValue);";
                await DbConnection.ExecuteAsync(insertClaimsSql, claims.Select(x => new
                {
                    UserId = user.Id,
                    x.ClaimType,
                    x.ClaimValue
                }), transaction);
            }

            if (roles?.Count > 0)
            {
                var deleteRolesSql = "delete " +
                                     $"from {TN("UserRoles")} " +
                                     $"where {CN("UserId")} = {GID("UserId")};";
                await DbConnection.ExecuteAsync(deleteRolesSql, new { UserId = user.Id }, transaction);

                var insertRolesSql = $"insert into {TN("UserRoles")} ({CN("UserId")}, {CN("RoleId")}) " +
                                     $"values ({GID("UserId")}, {GID("RoleId")});";
                await DbConnection.ExecuteAsync(insertRolesSql, roles.Select(x => new
                {
                    UserId = user.Id,
                    x.RoleId
                }), transaction);
            }

            if (logins?.Count > 0)
            {
                var deleteLoginsSql = "delete " +
                                      $"from {TN("UserLogins")} " +
                                      $"where {CN("UserId")} = {GID("UserId")};";
                await DbConnection.ExecuteAsync(deleteLoginsSql, new { UserId = user.Id }, transaction);

                var insertLoginsSql =
                    $"insert into {TN("UserLogins")} ({CN("LoginProvider")}, {CN("ProviderKey")}, {CN("ProviderDisplayName")}, {CN("UserId")}) " +
                    $"values (@LoginProvider, @ProviderKey, @ProviderDisplayName, {GID("UserId")});";
                await DbConnection.ExecuteAsync(insertLoginsSql, logins.Select(x => new
                {
                    x.LoginProvider,
                    x.ProviderKey,
                    x.ProviderDisplayName,
                    UserId = user.Id
                }), transaction);
            }

            if (tokens?.Count > 0)
            {
                var deleteTokensSql = "delete " +
                                      $"from {TN("UserTokens")} " +
                                      $"where {CN("UserId")} = {GID("UserId")};";
                await DbConnection.ExecuteAsync(deleteTokensSql, new { UserId = user.Id }, transaction);

                var insertTokensSql =
                    $"insert into {TN("UserTokens")} ({CN("UserId")}, {CN("LoginProvider")}, {CN("Name")}, {CN("Value")}) " +
                    $"values ({GID("UserId")}, @LoginProvider, @Name, @Value);";
                await DbConnection.ExecuteAsync(insertTokensSql, tokens.Select(x => new
                {
                    x.UserId,
                    x.LoginProvider,
                    x.Name,
                    x.Value
                }), transaction);
            }

            try
            {
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                return(false);
            }

            return(true);
        }