Beispiel #1
0
        public async Task <ExCheckUser> UserCheck(string userPhone)
        {
            Logging.Log.LogInfo($"UserCheck {userPhone}");
            using (var db = new Db())
            {
                if (!PhoneHelper.IsNumber(userPhone))
                {
                    return(new ExCheckUser
                    {
                        WrongNumberFormat = true,
                    });
                }

                var numberOk = PhoneHelper.ProoveValidPhoneNumber(userPhone, out var num);

                if (!numberOk)
                {
                    return(new ExCheckUser
                    {
                        WrongNumberFormat = true,
                    });
                }

                var data = await db.TblUsers.FirstOrDefaultAsync(u => u.PhoneNumber == num);

                if (data == null)
                {
                    var newPwd      = PasswordHelper.GeneratePassword(5);
                    var newPassword = PasswordHelper.CumputeHash(newPwd);

                    data = new TableUser
                    {
                        PhoneNumber         = num,
                        Locked              = false,
                        Password            = newPassword,
                        DefaultUserLanguage = "de",
                        PhoneChecked        = true,
                    };

                    db.TblUsers.Add(data);

                    try
                    {
                        db.SaveChanges();
                    }
                    catch (Exception e)
                    {
                        Logging.Log.LogWarning($"Datenbank Initialwerte konnten nicht erzeugt werden: {e}");
                        return(new ExCheckUser
                        {
                            UserId = -1,
                            ErrorFromDb = true,
                        });
                    }

                    //SMS senden
                    try
                    {
                        await SendPassword(data, newPwd);

                        return(new ExCheckUser
                        {
                            IsNewUser = true,
                            UserId = data.Id,
                        });
                    }
                    catch (Exception e)
                    {
                        Logging.Log.LogError($"{e}");
                        return(new ExCheckUser
                        {
                            ErrorFromDb = true,
                            WrongNumberFormat = true,
                            IsNewUser = true,
                            UserId = data.Id,
                        });
                    }
                }

                if (data.IsDemoUser)
                {
                    return new ExCheckUser
                           {
                               UserIsLocked = true,
                               IsDemoUser   = true
                           }
                }
                ;

                return(new ExCheckUser
                {
                    UserIsLocked = data.Locked,
                    UserId = data.Id,
                    EMailNotChecked = !data.PhoneChecked
                });
            }
        }