Пример #1
0
        public Guid CreateGame()
        {
            var result = Guid.Empty;

            var id = Guid.NewGuid();

            db.Games.Add(new Entities.Game()
            {
                Id      = id,
                Started = DateTime.Now
            });

            if (db.SaveChanges() > 0)
            {
                result = id;
            }

            return(result);
        }
Пример #2
0
        public IActionResult SignUp(User model)
        {
            // View단에 사용될 리캡챠 키값
            ViewData["ReCaptchaKey"] = _configuration.GetSection("GoogleReCaptcha:key").Value;
            // 사용자가 입력한 패스워드값(해시 전)
            var pw = Request.Form["UserPw"].ToString();

            // DB에 저장될 회원가입 당시의 날짜 , 월 , 년
            model.SignUpYear  = DateTime.Now.ToString("yyyy");
            model.SignUpMonth = DateTime.Now.ToString("MM");
            model.SignUpDay   = DateTime.Now.ToString("MM'/'dd'/'yyyy");

            byte[] salt = new byte[128 / 8];
            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetBytes(salt);
            }

            string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                       password: pw,
                                                       salt: salt,
                                                       prf: KeyDerivationPrf.HMACSHA1,
                                                       iterationCount: 10000,
                                                       numBytesRequested: 256 / 8
                                                       ));

            model.UserPw   = hashed;
            model.UserSalt = salt;

            if (ModelState.IsValid)
            {
                // 리캡챠 패스가 안됫을 경우 -> 리캡챠 통과 안됫을 경우
                if (!ReCaptchaPassed(
                        Request.Form["g-recaptcha-response"], // that's how you get it from the Request object
                        _configuration.GetSection("GoogleReCaptcha:secret").Value,
                        _logger
                        ))
                {
                    ModelState.AddModelError(string.Empty, "넌 틀렸어. 이 멍청한 로봇아! Go play some 1x1 on SFs instead."); // 에러 문구 노출
                    return(View(model));
                }
                // 리캡챠 패스됫을 경우
                using (var db = new BoardDbContext())
                {
                    db.Users.Add(model);                   // DB에 생성한 유저 객체 Add
                    db.SaveChanges();                      // DB 저장 and 체인지
                }
                return(RedirectToAction("Index", "Home")); // 회원가입 성공시 Home/Index/
            }

            return(View(model));
        }
Пример #3
0
        public IActionResult ChangeInfo(User user)
        {
            var db2 = new BoardDbContext();

            // 현재 로그인 상태가 아니면
            if (HttpContext.Session.GetInt32("USER_LOGIN_KEY") == null)
            {
                // 로그인 페이지로 이동
                return(RedirectToAction("Login", "Account"));
            }
            // 현재 접속중인 유저의 No를 가져와서
            var no    = int.Parse(HttpContext.Session.GetInt32("USER_LOGIN_KEY").ToString());
            var user2 = db2.Users.FirstOrDefault(u => u.UserNo.Equals(no));

            // 가져온 유저의 No와 일치하는 유저가 없으면
            if (no != user.UserNo)
            {
                return(NotFound());
            }

            // 사용자가 입력한 패스워드 가져오기
            var pw = Request.Form["UserPw"].ToString();

            if (pw != user2.UserPw) // 사용자가 입력한 비밀번호가 기존의 비밀번호와 다를경우 -> 즉 비밀번호를 변경했을때
            {
                // 16바이트 랜덤 바이트 값 가져오기 ( 솔트 )
                byte[] salt = new byte[128 / 8];
                using (var rng = RandomNumberGenerator.Create())
                {
                    // 랜덤함수 돌리고
                    rng.GetBytes(salt);
                }

                // 해시값 생성 ( 사용자가 입력한 패스워드 , 16바이트 랜덤 바이트 (솔트 값) , 암호화 형식 (SHA1) , 해시할 횟수 , 생성될 바이트 길이 ( 32 바이트 )
                string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                           password: pw,
                                                           salt: salt,
                                                           prf: KeyDerivationPrf.HMACSHA1,
                                                           iterationCount: 10000,
                                                           numBytesRequested: 256 / 8
                                                           ));

                user.UserPw   = hashed;  // 생성된 해시값을 DB에 넣을 유저 패스워드에 값을 넣고
                user.UserSalt = salt;    // 새로 생성된 솔트값을 DB에 넣을 유저 솔트에 값을 넣고
            }
            else if (pw == user2.UserPw) // 사용자가 입력한 비밀번호가 기존의 비밀번호와 같을경우 -> 즉 비밀번호는 변경하지않고 다른 정보만 변경했을때
            {
                user.UserPw = pw;
            }


            if (ModelState.IsValid)
            {
                using (var db = new BoardDbContext())
                {
                    // DB 업데이트
                    db.Update(user);
                    // DB 저장 and 체인지
                    db.SaveChanges();
                }
                // 성공하면 정보 변경 성공 화면으로 이동
                return(RedirectToAction("ChangeMyInforSuccess", "Home"));
            }
            return(View(user));
        }