예제 #1
0
        public LoginResult Login(LoginModel model)
        {
            if (model == null)
            {
                return(new LoginResult()
                {
                    Success = false,
                    ErrMessages = new List <KeyMsg>()
                    {
                        ResponseError.GetError(TypeError.RequestEmpty)
                    }
                });
            }

            var result = new LoginResult();

            using (var db = new BloodSearchContext()) {
                using (var dbContextTransaction = db.Database.BeginTransaction()) {
                    try {
                        var user = db.Users.FirstOrDefault(x => x.Email == model.Email.ToLower() && x.PasswordHash == model.PasswordHash);

                        result.IsAuth = user != null;

                        if (user == null)
                        {
                            result.ErrMessages.Add(ResponseError.GetError(TypeError.UserNotFound));
                            dbContextTransaction.Rollback();
                            return(result);
                        }

                        result.Token  = Crypt.GetToken();
                        result.UserId = user.Id;
                        db.AuthTokens.Add(new AuthToken()
                        {
                            Token       = result.Token,
                            CreatedDate = DateTime.UtcNow,
                            ExpiryDate  = DateTime.UtcNow.AddDays(1),
                            Ip          = model.Ip,
                            UserId      = user.Id
                        });
                        db.SaveChanges();
                        dbContextTransaction.Commit();
                    } catch (Exception ex) {
                        dbContextTransaction.Rollback();
                        return(new LoginResult()
                        {
                            Success = false,
                            ErrMessages = new List <KeyMsg> {
                                ResponseError.GetError(TypeError.DataSaveError)
                            }
                        });
                    }
                }
            }
            return(result);
        }
예제 #2
0
 protected BadRequestObjectResult GetErrors(Exception exception)
 {
     return(ResponseError.GetError(new List <ResponseError>
     {
         new ResponseError
         {
             Type = exception.GetType().Name,
             Message = exception.Message
         }
     }));
 }
예제 #3
0
        public BaseResponse Registration(RegistrationModel model)
        {
            if (model == null)
            {
                return(new BaseResponse()
                {
                    Success = false,
                    ErrMessages = new List <KeyMsg>()
                    {
                        ResponseError.GetError(TypeError.RequestEmpty)
                    }
                });
            }

            var result = new BaseResponse();

            using (var db = new BloodSearchContext()) {
                using (var dbContextTransaction = db.Database.BeginTransaction()) {
                    try {
                        if (db.Users.All(x => x.Email != model.Email.ToLower()))
                        {
                            db.Users.Add(new User {
                                PasswordHash   = model.PasswordHash,
                                Email          = model.Email.ToLower(),
                                RegisterFromIp = model.RegisterFromIp,
                                CreatedDate    = DateTime.UtcNow,
                                ChangedDate    = DateTime.UtcNow,
                                Name           = model.Name,
                                Phone          = model.Phone
                            });

                            db.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                        else
                        {
                            dbContextTransaction.Rollback();
                            result.Success = false;
                            result.ErrMessages.Add(ResponseError.GetError(TypeError.WhichUserIsAlready));
                        }
                    } catch (Exception ex) {
                        dbContextTransaction.Rollback();
                        return(new BaseResponse()
                        {
                            Success = false,
                            ErrMessages = new List <KeyMsg> {
                                ResponseError.GetError(TypeError.DataSaveError)
                            }
                        });
                    }
                }
            }
            return(result);
        }
예제 #4
0
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var model = (AuthRequest)actionContext.ActionArguments["model"];

            if (new UserServices().UserIsNotAuthorized(model.Token))
            {
                actionContext.Response = actionContext.Request.CreateResponse(
                    HttpStatusCode.OK,
                    new BaseResponse()
                {
                    Success     = false,
                    ErrMessages = new List <KeyMsg>()
                    {
                        ResponseError.GetError(TypeError.UserIsNotAuthorized)
                    }
                },
                    actionContext.ControllerContext.Configuration.Formatters.JsonFormatter
                    );
            }
            base.OnActionExecuting(actionContext);
        }
예제 #5
0
 public BaseResponse EditUser(EditUserRequest model)
 {
     using (var db = new BloodSearchContext()) {
         var user = db.Users.FirstOrDefault(_ => _.Id == model.UserId);
         if (user == null)
         {
             return(new UserResult()
             {
                 Success = false,
                 ErrMessages = new List <KeyMsg>()
                 {
                     ResponseError.GetError(TypeError.UserNotFound)
                 }
             });
         }
         user.Name  = model.Name?.Trim();
         user.Phone = model.Phone?.Trim();
         db.SaveChanges();
         return(new BaseResponse()
         {
             Success = true
         });
     }
 }
예제 #6
0
        public UserResult GetUserById(int userId)
        {
            var result = new UserResult();

            using (var db = new BloodSearchContext()) {
                var user = db.Users.FirstOrDefault(u => u.Id == userId);
                if (user == null)
                {
                    return(new UserResult()
                    {
                        Success = false,
                        ErrMessages = new List <KeyMsg>()
                        {
                            ResponseError.GetError(TypeError.UserNotFound)
                        }
                    });
                }
                result.Id    = user.Id;
                result.Email = user.Email;
                result.Name  = user.Name;
                result.Phone = user.Phone;
            }
            return(result);
        }
예제 #7
0
        public UserResult GetUserByContext(AuthRequest model)
        {
            var result = new UserResult();

            using (var db = new BloodSearchContext()) {
                var user = db.Users.FirstOrDefault(u => u.AuthTokens.Any(t => t.Token == model.Token));
                if (user == null)
                {
                    return(new UserResult()
                    {
                        Success = false,
                        ErrMessages = new List <KeyMsg>()
                        {
                            ResponseError.GetError(TypeError.UserNotFound)
                        }
                    });
                }
                result.Id    = user.Id;
                result.Email = user.Email;
                result.Name  = user.Name;
                result.Phone = user.Phone;
            }
            return(result);
        }