Exemplo n.º 1
0
        public async Task <IActionResult> Register(RegisterViewModel model)
        {
            if (model?.Code == null || !AuthCodes.Contains(model.Code))
            {
                ModelState.AddModelError("", "Недействительная ссылка регистрации");
                return(View(model));
            }


            if (UserRepository.GetAll().Any(u => u.Username.ToLower() == model.Login.ToLower()))
            {
                ModelState.AddModelError("", "Имя пользователя занято");
            }

            if (model.Password != model.ConfirmPassword)
            {
                ModelState.AddModelError("", "Пароли не совпадают");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            User user = new User //Создание пользователя
            {
                Username     = model.Login,
                FirstName    = "Имя",
                SecondName   = "Фамилия",
                ThirdName    = "Отчество",
                PasswordHash = HashingProvider.Hash(model.Password)
            };

            var role = await RoleRepository.GetAll().FirstAsync(r => r.Name == "Пользователь");

            user.Roles.Add(role);

            lock (AuthCodes) //После создания пользователя удаляем одноразовый код
            {
                AuthCodes.Remove(model.Code);
            }

            await UserRepository.Add(user);

            string token = await AuthenticationProvider.LoginAsync(model.Login, model.Password, TimeSpan.FromMinutes(30));      //Добавляем пользователя в хранилище и генерируем ему токен доступа

            HttpContext.Response.Cookies.Append("auth_token", token);

            return(RedirectToAction("Index", "Items"));
        }
Exemplo n.º 2
0
        public IActionResult Register(string code)
        {
            if (code == null || !AuthCodes.Contains(code))
            {
                return(Content("Недействительная ссылка"));
            }

            var vm = new RegisterViewModel
            {
                Code = code
            };

            return(View(vm));
        }
Exemplo n.º 3
0
        protected override string OnAuthenticate(string username, string password, out AuthCodes authCode, out AuthOptions authOptions)
        {
            using (var db = ServiceUtils.CreateDbContext())
            {
                //Find the company based on the unique user name
                EfParaquickCompany efCompany = (from c in db.ParaquickCompanies where c.UserName == username && c.Password == password select c).FirstOrDefault();

                if (efCompany != null)
                {
                    authOptions = new AuthOptions();

                    EfParaquickSession efSession = ServiceUtils.FindNextSession(db, efCompany.Id);

                    //work to do?
                    if (efSession != null)
                    {
                        //allow implementors to override
                        authCode = OnNewSession(db, efSession, authOptions);

                        if (authCode == AuthCodes.VALID)
                        {
                            //open and return ticket
                            ServiceUtils.Open(db, efSession);
                            return(efSession.Ticket);
                        }
                        else
                        {
                            //implementors can override the code and the options
                            //but not the session record or the ticket
                            return(ServiceUtils.ZeroTicket);
                        }
                    }
                    else
                    {
                        //nothing to do
                        authCode = AuthCodes.NONE;
                    }
                }
                else
                {
                    //bad credentials
                    Error($"Incorrect username or password for user ({username})");
                    authCode = AuthCodes.NVU;
                }


                authOptions = null;
                return(ServiceUtils.ZeroTicket);
            }
        }
Exemplo n.º 4
0
        public async Task <IActionResult> GetRegistrationLink(int count)
        {
            var user = await Authorize();

            if (!user.Roles.Any(r => r.Name == "Администратор")) //Для генерации нужны права администратора
            {
                return(Unauthorized());
            }

            List <string> links = new List <string>();

            if (count < 0) //Ограничение значкений между 0 и 100
            {
                count = 0;
            }
            else if (count > 100)
            {
                count = 100;
            }

            for (int i = 0; i < count; i++) //Генерируем указанное количество guid и ссылки на регистрацию с нужным параметром
            {
                string guid = Guid.NewGuid().ToString();
                string code = HttpUtility.UrlEncode(guid);
                string link = Url.ActionLink(nameof(Register), "Auth", new { code = code });

                lock (AuthCodes)
                {
                    AuthCodes.Add(code); //Добавляем код
                }

                links.Add(link);
            }

            return(View(links));
        }
Exemplo n.º 5
0
 protected abstract string OnAuthenticate(string username, string password, out AuthCodes authCode, out AuthOptions authOptions);