コード例 #1
0
    // return root node of this sub tree
    public static DTNode LoadSubTree(XmlNode i_xmlNode)
    {
        XmlAttribute nameAttr = i_xmlNode.Attributes[DTNode.xmlNodeNameAtrName_];
        string       nodeName = nameAttr != null ? nameAttr.Value : "";

        DTNode node = new DTNode(nodeName);

        for (int i = 0; i < i_xmlNode.ChildNodes.Count; ++i)
        {
            var curNode = i_xmlNode.ChildNodes[i];
            if (curNode.Name.Equals(DTNode.xmlNodeName_))
            {
                node.subNodes_.Add(LoadSubTree(curNode));
            }
            else if (curNode.Name.Equals(BasicCondition.xmlNodeName))
            {
                BasicCondition condition = BasicCondition.Deserialize(curNode as XmlElement);
                if (condition != null)
                {
                    node.conditions_.Add(condition);
                }
            }
            else if (curNode.Name.Equals(BasicResult.xmlNodeName))
            {
                BasicResult result = BasicResult.Deserialize(curNode as XmlElement);
                if (result != null)
                {
                    node.results_.Add(result);
                }
            }
        }
        return(node);
    }
コード例 #2
0
        public void LoginPost_UserFoundButPasswordIncorrect_LoginFails()
        {
            // setup
            UserModel user = new UserModel()
            {
                Id       = Guid.NewGuid(),
                UserName = "******",
                Password = "******"
            };

            _userRepo.GetByUserName(user.UserName).Returns(user);

            _passwordProvider.CheckPassword(Arg.Any <string>(), Arg.Any <string>()).Returns(false);

            var browser = CreateBrowser(null);

            // execute
            var response = browser.Post(Actions.Login.Default, (with) =>
            {
                with.HttpRequest();
                with.FormValue("UserName", "admin");
                with.FormValue("Password", "password");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            _passwordProvider.Received(1).CheckPassword(Arg.Any <string>(), Arg.Any <string>());

            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsFalse(result.Success);

            _userRepo.Received(1).GetByUserName(user.UserName);
            _passwordProvider.Received(1).CheckPassword("password", user.Password);
        }
コード例 #3
0
        public IHttpActionResult Put(MentalillnessToHospitalReqInParm parm)
        {
            BasicResult result = null;

            try
            {
                CheckModel(ref result);
                if (result.Code == CommonCode.OK.ToResCode())
                {
                    parm.CreateIp = ClientIp;
                    parm.UpdateIp = ClientIp;
                    result        = _iocContext.Resolve <IServiceMTC>().UpdateToHospitalRecord(parm);
                }
                return(Ok(result));
            }
            catch (Exception ex)
            {
                _logger.Fatal(ControllerName + "-修改精神病人醫療服務單:" + ex.Message);
                return(Redirect(ErrorUrl));
            }
            finally
            {
                //TODO: write api log to db
            }
        }
コード例 #4
0
        public void ChangePassword_InvalidPassword_ReturnsError(string password)
        {
            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new UserModule(_userRepo, _createUserCommand, _updateUserPasswordCommand, _deleteUserCommand))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            // execute
            var response = browser.Post(Actions.User.ChangePassword, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("Password", password);
                with.FormValue("ConfirmPassword", "ConfirmPasswordIsOk");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Length);
        }
コード例 #5
0
        public BasicResult ChangePassword(long userId, string password)
        {
            if (!IsValidPassword(password))
            {
                return(BasicResult.FailResult("Invalid Password (Must: contain 1 uppercase, contain 1 number and be 8-15 characters long)"));
            }

            var user = GetById(userId);

            if (user == null)
            {
                return(BasicResult.FailResult("No user with that id exists"));
            }

            string savedPasswordHash = HashPassword(password);

            user.Password = savedPasswordHash;

            var success = _repository.Update(user);

            if (!success)
            {
                return(BasicResult.FailResult("Database Error"));
            }

            return(BasicResult.SuccessResult());
        }
コード例 #6
0
        public IActionResult Create(CreateModel model)
        {
            var result = new BasicResult();

            try {
                var path = @"C:/temp/img.jpg";
                if (model.fileReceipt != null)
                {
                    using (var stream = new FileStream(path, FileMode.Create)) {
                        model.fileReceipt.CopyTo(stream);
                    }
                }
                using (var conn = new SqlConnection(Define.ConnStr)) {
                    var caseExchange = new seedDB.CaseExchange {
                        name     = model.name,
                        phone    = model.phone,
                        address  = model.address,
                        receipt  = model.receipt,
                        type     = model.type,
                        result   = "審核中",
                        filePath = path,
                    };
                    conn.Insert(caseExchange);
                }

                result.success = true;
            } catch (Exception ex) {
                result.message = ex.ToString();
            }

            return(Json(result));
        }
コード例 #7
0
        public void ChangePassword_PasswordDoesNotMatchConfirm_ReturnsError()
        {
            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new UserModule(_userStore, _userValidator, _passwordProvider))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            // execute
            var response = browser.Post(Actions.User.ChangePassword, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("Password", "IsValidPassword");
                with.FormValue("ConfirmPassword", "ButDoesNotMatch");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Length);
            Assert.IsTrue(result.Messages[0].Contains("do not match"));
        }
コード例 #8
0
        public long?_checkSessionToken(string sessionToken, BasicResult result)
        {
            if (sessionToken == null)
            {
                return(null);
            }

            var now     = DateTime.Now;
            var session = mContext.UserSession
                          .Where(s => s.SessionToken.Equals(sessionToken) && s.IsActived &&
                                 (s.ExpiresAt.HasValue && DateTime.Compare(s.ExpiresAt.Value, now) > 0))
                          .FirstOrDefault();

            if (session != null)
            {
                // Cập nhật lại thời gian hết hạn của phiên.
                session.refresh();
                mContext.SaveChanges();

                // Cập nhật lại Session Token nếu có thay đổi.
                result.SessionToken = session.SessionToken;

                return(session.UserId);
            }
            else
            {
                // Cập nhật lại Session Token nếu có thay đổi.
                result.SessionToken = null;
                result.MessageError = "Phiên đã hết hạn hoặc không tồn tại. Vui lòng đăng nhập lại.";

                return(null);
            }
        }
コード例 #9
0
        public void LoginPost_UserNotFound_LoginFails()
        {
            // setup
            bool userStoreChecked = false;

            _userStore.Users.Returns(new List <UserModel>()).AndDoes((c) => { userStoreChecked = true; });
            var browser = CreateBrowser(null);

            // execute
            var response = browser.Post(Actions.Login.Default, (with) =>
            {
                with.HttpRequest();
                with.FormValue("UserName", "admin");
                with.FormValue("Password", "password");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            _passwordProvider.DidNotReceive().CheckPassword(Arg.Any <string>(), Arg.Any <string>());

            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsFalse(result.Success);
            Assert.IsTrue(userStoreChecked);
        }
コード例 #10
0
    }  // for editor only

    public virtual void BeOverrided(BasicResult another)
    {
        if (this.GetType() != another.GetType())
        {
            throw new UnityException("cannot override different type of result");
        }
    }
コード例 #11
0
    public static void Serialize(BasicResult _condition, ref XmlElement result)
    {
        if (result == null || _condition == null)
        {
            return;
        }
        if (result.Name != BasicResult.xmlNodeName)
        {
            return;
        }

        Type cType = _condition.GetType();

        result.SetAttribute("Type", cType.Name);
        FieldInfo[] variables = cType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

        for (int vi = 0; vi < variables.Length; ++vi)
        {
            FieldInfo var = variables[vi];
            if (!Attribute.IsDefined(var, typeof(DtVariable)))
            {
                continue;
            }

            object     value    = var.GetValue(_condition);
            string     valueStr = ParseUtil.SerializeValue(value);
            DtVariable varAtr   = (DtVariable)Attribute.GetCustomAttribute(var, typeof(DtVariable));
            result.SetAttribute(varAtr.xmlAtrName, valueStr);
        }
    }
コード例 #12
0
        public dynamic Save()
        {
            var       model = this.Bind <UserViewModel>();
            UserModel user  = Mapper.Map <UserViewModel, UserModel>(model);

            // try and execute the command
            BasicResult result = new BasicResult(true);

            try
            {
                if (model.Password != model.ConfirmPassword)
                {
                    throw new ValidationException("Password does not match confirmation password");
                }
                _createUserCommand.Execute(user.UserName, user.Password, user.Role);
            }
            catch (ValidationException vex)
            {
                result = new BasicResult(false, vex.ValidationErrors.ToArray());
            }
            catch (Exception ex)
            {
                result = new BasicResult(false, ex.Message);
            }

            return(Response.AsJson(result));
        }
コード例 #13
0
 private void OverrideFinalDecision(BasicResult another)
 {
     if (type2Decision_.ContainsKey(another.GetType()))
     {
         type2Decision_[another.GetType()].BeOverrided(another);
     }
 }
コード例 #14
0
ファイル: MediaManager.cs プロジェクト: poleices/WeiXinOpen
        /// <summary>
        /// 检测上传的媒体是否满足基本要求
        /// </summary>
        /// <param name="media"></param>
        /// <returns></returns>
        private BasicResult MediaChecker(LocalMedia media)
        {
            var sizes = new Dictionary <string, long>
            {
                { Media.Image, 128 * 1024 },
                { Media.Voice, 256 * 1024 },
                { Media.Video, 1 * 1024 * 1024 },
                { Media.Thumb, 64 * 1024 },
            };

            if (media == null)
            {
                return(BasicResult.GetFailed("缺少媒体参数"));
            }
            if (!File.Exists(media.MediaPath))
            {
                return(BasicResult.GetFailed("指定的媒体文件不存在"));
            }
            if (string.IsNullOrEmpty(media.MediaType))
            {
                return(BasicResult.GetFailed("未指定媒体类型"));
            }
            if (new FileInfo(media.MediaPath).Length > sizes[media.MediaType])
            {
                return(BasicResult.GetFailed(string.Format("指定的媒体文件超过限制大小{0}K", sizes[media.MediaPath] / 1024)));
            }

            return(BasicResult.GetSuccess());
        }
コード例 #15
0
        public BasicResult Register(Models.User user)
        {
            var result      = new BasicResult();
            var readyExists = mContext.User
                              .Where(u => u.Username == user.Username).Count() > 0;

            if (readyExists)
            {
                result.MessageError = "Tài khoản đã tồn tại";
            }
            else
            {
                user.Id = 0;
                // TODO: Generate password salt.
                user.Salt      = "giautm";
                user.Password  = _hashUserPassword(user.Password, user.Salt);
                user.CreatedAt = DateTime.Now;
                mContext.User.Add(user);
                mContext.SaveChanges();

                var currentSession = new Models.UserSession(user.Id);
                mContext.UserSession.Add(currentSession);
                mContext.UserAccount.Add(new Models.UserAccount(user.Id));
                mContext.SaveChanges();

                result.SessionToken = currentSession.SessionToken;
            }

            return(result);
        }
コード例 #16
0
        public void ChangePassword_PasswordValid_UpdatesAndSaves()
        {
            const string newPassword       = "******";
            const string oldPassword       = "******";
            string       salt              = Guid.NewGuid().ToString();
            string       newHashedPassword = Guid.NewGuid().ToString();

            // setup
            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new UserModule(_userStore, _userValidator, _passwordProvider))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            UserModel user = new UserModel()
            {
                Id       = currentUser.Id,
                UserName = currentUser.UserName,
                Password = oldPassword
            };
            List <UserModel> users = new List <UserModel>()
            {
                user
            };

            _userStore.Users.Returns(users);

            _passwordProvider.GenerateSalt().Returns(salt);
            _passwordProvider.HashPassword(newPassword, salt).Returns(newHashedPassword);

            // execute
            var response = browser.Post(Actions.User.ChangePassword, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("Password", newPassword);
                with.FormValue("ConfirmPassword", newPassword);
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            // check the result
            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsTrue(result.Success);
            Assert.AreEqual(0, result.Messages.Length);

            // make sure the user was updated and saved
            Assert.AreEqual(newHashedPassword, user.Password);
            _userStore.Received(1).Save();
            _passwordProvider.Received(1).GenerateSalt();
            _passwordProvider.Received(1).HashPassword(newPassword, salt);
        }
コード例 #17
0
    // not real deep copy, only copy DtVariables for editor
    public static DTNode DeepCopy(DTNode i_node)
    {
        DTNode retNode = new DTNode(i_node.nodeName_);

        for (int i = 0; i < i_node.conditions_.Count; ++i)
        {
            Type           conditionType = i_node.conditions_[i].GetType();
            BasicCondition tempCondition = Activator.CreateInstance(conditionType) as BasicCondition;

            FieldInfo[] conditionVariables = conditionType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            for (int vi = 0; vi < conditionVariables.Length; ++vi)
            {
                FieldInfo var = conditionVariables[vi];
                if (Attribute.IsDefined(var, typeof(DtVariable)))
                {
                    if (var.FieldType == typeof(string) || var.FieldType.IsArray || !var.FieldType.IsClass)
                    {
                        var.SetValue(tempCondition, var.GetValue(i_node.conditions_[i]));
                    }
                    else
                    {
                        System.Object value = Activator.CreateInstance(var.FieldType, var.GetValue(i_node.conditions_[i]));
                        var.SetValue(tempCondition, value);
                    }
                }
            }
            retNode.conditions_.Add(tempCondition);
        }
        for (int i = 0; i < i_node.results_.Count; ++i)
        {
            Type        resultType = i_node.results_[i].GetType();
            BasicResult tempResult = Activator.CreateInstance(resultType) as BasicResult;

            FieldInfo[] resultVariables = resultType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            for (int vi = 0; vi < resultVariables.Length; ++vi)
            {
                FieldInfo var = resultVariables[vi];
                if (Attribute.IsDefined(var, typeof(DtVariable)))
                {
                    if (var.FieldType == typeof(string) || var.FieldType.IsArray || !var.FieldType.IsClass)
                    {
                        var.SetValue(tempResult, var.GetValue(i_node.results_[i]));
                    }
                    else
                    {
                        System.Object value = Activator.CreateInstance(var.FieldType, var.GetValue(i_node.results_[i]));
                        var.SetValue(tempResult, value);
                    }
                }
            }
            retNode.results_.Add(tempResult);
        }
        for (int i = 0; i < i_node.subNodes_.Count; ++i)
        {
            retNode.subNodes_.Add(DeepCopy(i_node.subNodes_[i]));
        }
        return(retNode);
    }
コード例 #18
0
        public void Save_ValidUser_PasswordHashed()
        {
            // setup
            const string userName = "******";
            const string password = "******";

            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };

            currentUser.Claims = new string[] { Claims.UserAdd };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new UserModule(_userStore, _userValidator, _passwordProvider))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            _userStore.Users.Returns(new List <UserModel>());

            _userValidator.Validate(Arg.Any <UserModel>()).Returns(new ValidationResult());

            string salt           = Guid.NewGuid().ToString();
            string hashedPassword = Guid.NewGuid().ToString();

            _passwordProvider.GenerateSalt().Returns(salt);
            _passwordProvider.HashPassword(password, salt).Returns(hashedPassword);

            // execute
            var response = browser.Post(Actions.User.Save, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("UserName", userName);
                with.FormValue("Password", password);
                with.FormValue("ConfirmPassword", password);
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            // check the result
            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsTrue(result.Success);
            Assert.AreEqual(0, result.Messages.Length);

            _passwordProvider.Received(1).GenerateSalt();
            _passwordProvider.Received(1).HashPassword(password, salt);

            List <UserModel> users = _userStore.Users;

            Assert.AreEqual(hashedPassword, users[0].Password);
        }
コード例 #19
0
        public BasicResult Answer(string sessionToken, Models.AnswerSheet answerSheet, long quizzesId, string answer)
        {
            var result = new BasicResult();
            var userId = _checkSessionToken(sessionToken, result);
            var ans    = mContext.AnswerSheet.FirstOrDefault(a => a.Id == answerSheet.Id && a.UserId == userId);

            if (ans != null)
            {
                var exam     = mContext.Exam.FirstOrDefault(e => e.Id == ans.ExamId);
                var deadline = ans.CreatedAt.AddMinutes(exam.Time);
                if (deadline <= DateTime.Now)
                {
                    ans.IsClosed = true;
                }

                var quizzesIds = exam.Quizzes.Split(new char[] { ',' });
                if (ans.IsClosed == true)
                {
                    result.MessageError = string.Format("Bài kiểm tra đã được đóng, không thể tiếp tục");

                    var answers = mContext.AnswerSheetItem
                                  .Where(ai => ai.AnswerSheetId == ans.Id).ToArray();
                    ans.Score = answers.Select(i => i.Match ? 1.0 : 0.0).Sum() / answers.Length;

                    mContext.SaveChanges();
                }
                else if (quizzesIds.Any(q => q == quizzesId.ToString()))
                {
                    var answerItem = mContext.AnswerSheetItem
                                     .FirstOrDefault(ai => ai.AnswerSheetId == ans.Id && ai.QuizzesId == quizzesId);
                    if (answerItem == null)
                    {
                        answerItem = new Models.AnswerSheetItem()
                        {
                            AnswerSheetId = ans.Id,
                            QuizzesId     = quizzesId,
                            Answer        = answer,
                            Match         = false
                        };
                        mContext.AnswerSheetItem.Add(answerItem);
                    }

                    var quizzes = mContext.Quizzes.FirstOrDefault(q => q.Id == quizzesId);
                    answerItem.Match = quizzes != null?quizzes.Answer.Trim() == answer.Trim() : false;

                    mContext.SaveChanges();
                }
                else
                {
                    result.MessageError = string.Format("Câu hỏi không có trong đề thi!");
                }
            }

            return(result);
        }
コード例 #20
0
        public static void saveResultsToFile(string file, IEnumerable <Configuration> configs, IEnumerable <BasicResult> results)
        {
            Debug.Assert(configs.Count() == results.Count());
            var stream = File.Open(file, FileMode.Create, FileAccess.Write);
            var sw     = new StreamWriter(stream);

            sw.WriteLine(Configuration.getCSVHeaders() + ";" + BasicResult.getCSVHead());

            foreach (var result in configs.Zip(results, (c, r) => new { Config = c, Result = r }))
            {
                sw.WriteLine(result.Config.getCSVValues() + ";" + result.Result.getCSVData());
            }
            sw.Close();
        }
コード例 #21
0
 private void HandledProgressSaved(BasicResult result)
 {
     if (result.Success)
     {
         if (ProgressSaved != null)
         {
             ProgressSaved.Invoke();
         }
     }
     else
     {
         if (DatabaseError != null)
         {
             DatabaseError.Invoke(result.Exception);
         }
     }
 }
コード例 #22
0
 private void HandledDatabaseLoaded(BasicResult result)
 {
     if (result.Success)
     {
         if (DatabaseLoaded != null)
         {
             DatabaseLoaded.Invoke();
         }
         DoDiscoveredElementsChanged();
     }
     else
     {
         if (DatabaseError != null)
         {
             DatabaseError.Invoke(result.Exception);
         }
     }
 }
コード例 #23
0
        /// <summary>
        ///     下载媒体文件。
        ///     如果下载成功,返回值的ErrMsg属性携带保存的文件全路径
        /// </summary>
        /// <param name="mediaId"></param>
        /// <param name="filePath">
        ///     保存下载的文件的本地文件名或目录(以\结尾)。
        ///     如果为目录,则文件名为微信响应的文件名。
        ///     如果文件已经存在,则会覆盖原文件。
        /// </param>
        /// <returns>如果成功,ErrMsg属性携带保存的文件全路径</returns>
        public BasicResult Download(string mediaId, string filePath)
        {
            var param = new FormData
            {
                { "access_token", AccessToken },
                { "media_id", mediaId }
            };

            var url      = string.Format("{0}?{1}", DownLoadUrl, param.Format());
            var request  = HttpHelper.CreateRequest(url);
            var response = request.GetResponse();

            using (var stream = response.GetResponseStream())
            {
                var disposition = response.Headers["Content-disposition"];
                if (string.IsNullOrEmpty(disposition))
                {
                    var s = new StreamReader(stream, Encoding.UTF8).ReadToEnd();
                    return(JsonConvert.DeserializeObject <BasicResult>(s));
                }

                filePath = filePath.EndsWith(@"\")
                    ? string.Format("{0}{1}", filePath,
                                    Regex.Match(disposition, "(?<=filename\\s*=\\s*\\\"?)[^\\\"]+", RegexOptions.IgnoreCase))
                    : filePath;
                var fs = new FileStream(filePath, FileMode.OpenOrCreate);
                try
                {
                    var buffer = new byte[128 * 1024]; //128K
                    int i;
                    while ((i = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fs.Write(buffer, 0, i);
                    }

                    return(BasicResult.GetSuccess(filePath));
                }
                finally
                {
                    fs.Close();
                }
            }
        }
コード例 #24
0
        public void Save_ValidUser_Saves()
        {
            // setup
            const string userName = "******";
            const string password = "******";

            var currentUser = new UserIdentity()
            {
                Id = Guid.NewGuid(), UserName = "******"
            };

            currentUser.Claims = new string[] { Claims.UserAdd };
            var browser = new Browser((bootstrapper) =>
                                      bootstrapper.Module(new UserModule(_userRepo, _createUserCommand, _updateUserPasswordCommand, _deleteUserCommand))
                                      .RequestStartup((container, pipelines, context) => {
                context.CurrentUser = currentUser;
            })
                                      );

            _userRepo.GetAll().Returns(new List <UserModel>());

            _userValidator.Validate(Arg.Any <UserModel>()).Returns(new ValidationResult());

            // execute
            var response = browser.Post(Actions.User.Save, (with) =>
            {
                with.HttpRequest();
                with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration());
                with.FormValue("UserName", userName);
                with.FormValue("Password", password);
                with.FormValue("ConfirmPassword", password);
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            // check the result
            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsTrue(result.Success);
            Assert.AreEqual(0, result.Messages.Length);
            _createUserCommand.Received(1).Execute(userName, password, Arg.Any <string>());
        }
コード例 #25
0
        public dynamic LoginPost()
        {
            LoginViewModel model  = this.Bind <LoginViewModel>();
            BasicResult    result = new BasicResult(false);

            // if the email or password hasn't been supplied, exit
            if ((!String.IsNullOrWhiteSpace(model.UserName)) && (!String.IsNullOrWhiteSpace(model.Password)))
            {
                // get the user
                UserModel user = _userStore.Users.SingleOrDefault(x => x.UserName == model.UserName);
                if (user != null && _passwordProvider.CheckPassword(model.Password, user.Password))
                {
                    result.Success = true;
                    return(this.Login(user.Id, DateTime.Now.AddDays(1)));
                }
            }

            return(this.Response.AsJson(result));
        }
コード例 #26
0
        public void LoginPost_NoPassword_LoginFailsWithoutCheck()
        {
            // setup
            var browser = CreateBrowser(null);

            // execute
            var response = browser.Post(Actions.Login.Default, (with) =>
            {
                with.HttpRequest();
                with.FormValue("UserName", "admin");
            });

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            _passwordProvider.DidNotReceive().CheckPassword(Arg.Any <string>(), Arg.Any <string>());

            BasicResult result = JsonConvert.DeserializeObject <BasicResult>(response.Body.AsString());

            Assert.IsFalse(result.Success);
        }
コード例 #27
0
        public dynamic Save()
        {
            var       model = this.Bind <UserViewModel>();
            UserModel user  = Mapper.Map <UserViewModel, UserModel>(model);

            // do first level validation - if it fails then we need to exit
            ValidationResult validationErrors = this._userValidator.Validate(user);

            if (model.Password != model.ConfirmPassword)
            {
                validationErrors.Messages.Add("Password does not match confirmation password");
            }
            if (validationErrors.Messages.Count > 0)
            {
                var vresult = new BasicResult(false, validationErrors.Messages.ToArray());
                return(Response.AsJson(vresult));
            }

            // validation is done - hash the password
            user.Password = _passwordProvider.HashPassword(user.Password, _passwordProvider.GenerateSalt());

            // try and execute the command
            BasicResult result = new BasicResult(true);

            try
            {
                _userStore.Users.Add(user);
                _userStore.Save();
            }
            //catch (ValidationException vex)
            //{
            //    result = new BasicResult(false, vex.Errors.ToArray());
            //}
            catch (Exception ex)
            {
                result = new BasicResult(false, ex.Message);
            }

            return(Response.AsJson(result));
        }
コード例 #28
0
        public BasicResult Login(string username, string password)
        {
            var result = new BasicResult();
            var user   = mContext.User
                         .Where(u => u.Username.Equals(username))
                         .FirstOrDefault();

            if (user != null && user.Id > 0 &&
                user.Password.Equals(_hashUserPassword(password, user.Salt)))
            {
                var session = mContext.UserSession.Add(new Models.UserSession(user.Id));
                mContext.SaveChanges();

                result.SessionToken = session.SessionToken;
            }
            else
            {
                result.MessageError = "Tên đăng nhập hoặc mật khẩu không chính xác.";
            }

            return(result);
        }
コード例 #29
0
        public BasicResult MakeExam(string sessionToken, Models.Exam exam, int numberOf)
        {
            var result = new BasicResult();
            var userId = _checkSessionToken(sessionToken, result);

            if (userId.HasValue)
            {
                var quizzesId = mContext.Quizzes
                                .Where(q => q.Subject.Equals(exam.Subject))
                                .Select(q => q.Id)
                                .ToArray();
                var count = quizzesId.Length;
                if (count > numberOf)
                {
                    var idies  = new long[numberOf];
                    var random = new Random();
                    while (numberOf > 0)
                    {
                        var idx = quizzesId[random.Next(0, count)];
                        if (idies.Contains(idx) == false)
                        {
                            idies[--numberOf] = idx;
                        }
                    }

                    exam.Quizzes = string.Join(",", idies.Select(x => x.ToString()).ToArray());

                    mContext.Exam.Add(exam);
                    mContext.SaveChanges();
                }
                else
                {
                    result.MessageError = string.Format("Số lượng câu hỏi lớn hơn số lượng câu hỏi trong CSDL.");
                }
            }

            return(result);
        }
コード例 #30
0
        public IHttpActionResult Delete(int id)
        {
            BasicResult result = null;

            try
            {
                CheckModel(ref result);
                if (result.Code == CommonCode.OK.ToResCode())
                {
                    result = _iocContext.Resolve <IServiceMTC>().DeleteToHospitalRecord(id);
                }
                return(Ok(result));
            }
            catch (Exception ex)
            {
                _logger.Fatal(ControllerName + "-刪除精神病人醫療服務單:" + ex.Message);
                return(Redirect(ErrorUrl));
            }
            finally
            {
                //TODO: write api log to db
            }
        }
コード例 #31
0
 private void HandledDatabaseLoaded(BasicResult result)
 {
     if (result.Success)
     {
         if (DatabaseLoaded != null) DatabaseLoaded.Invoke();
         DoDiscoveredElementsChanged();
     }
     else
     {
         if (DatabaseError != null) DatabaseError.Invoke(result.Exception);
     }
 }
コード例 #32
0
 private void HandledProgressSaved(BasicResult result)
 {
     if (result.Success)
     {
         if (ProgressSaved != null) ProgressSaved.Invoke();
     }
     else
     {
         if (DatabaseError != null) DatabaseError.Invoke(result.Exception);
     }
 }