示例#1
0
        public async Task <IActionResult> Authorize()
        {
            var code       = HttpUtility.ParseQueryString(_request.QueryString.Value).Get("code");
            var tokenModel = await _tokenService.GetIdGovUaToken(code);

            if (tokenModel == null)
            {
                return(RedirectToAction("Denied",
                                        new
                {
                    text =
                        "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ не відповідає. Доступ на веб - портал СГД Держлікслужби не може бути наданий. Будь - ласка спробуйте пізніше."
                }));
            }

            var userInfo = await _tokenService.GetIdGovUaUserInfo(tokenModel);

            if (userInfo == null)
            {
                return(RedirectToAction("Denied",
                                        new
                {
                    text =
                        "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ не підтвердив Вашу особу. Доступ на веб - портал СГД Держлікслужби не надано."
                }));
            }

            if (!string.IsNullOrEmpty(userInfo.edrpoucode))
            {
                if (userInfo.edrpoucode.All(char.IsDigit))
                {
                    if (userInfo.edrpoucode.Length != 8)
                    {
                        userInfo.drfocode   = userInfo.edrpoucode;
                        userInfo.edrpoucode = string.Empty;
                    }
                }
                else
                {
                    userInfo.drfocode   = userInfo.edrpoucode;
                    userInfo.edrpoucode = string.Empty;
                }
            }

            if (string.IsNullOrEmpty(userInfo.drfocode))
            {
                return(RedirectToAction("Denied", new
                {
                    text = "Згідно інформації, що надійшла від \"Інтегрованой системи електронної ідентифікації\" https://id.gov.ua/ у Вашій ЕЦП не заповнене поле \"Код РНОКПП (Індивідуальний податковий номер) користувача\"." +
                           "В зв'язку з цим, ми не можемо ідентифікувати Вашу особу."
                }));
            }

            if (userInfo.edrpoucode == userInfo.drfocode)
            {
                userInfo.edrpoucode = "";
            }

            if (userInfo.auth_type != "dig_sign")
            {
                return(RedirectToAction("Denied", new
                {
                    text = "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ надав інформацію що Ви ідентифікувалися за допомогою MobileID / BankID. " +
                           "Звертаємо Вашу увагу, що доступ до порталу надається тільки для Користувачів з ЕЦП, зареєстрованих на організацію чи ФОП. " +
                           "Доступ на веб - портал СГД Держлікслужби не надано."
                }));
            }
            (string organizationId, Guid employeeId, Guid profileId, Guid personId)res;
            string register;

            try
            {
                res = await _tokenService.CheckOrgEmployeeUnit(userInfo);

                register = "1";
            }
            catch (Exception)
            {
                register = "0";
                res      = ("", Guid.Empty, Guid.Empty, Guid.Empty);
            }

            var claims = new List <Claim>
            {
                new Claim("fullName", userInfo.subjectcn, ClaimValueTypes.String),
                new Claim("lastname", userInfo.lastname, ClaimValueTypes.String),
                new Claim("drfocode", userInfo.drfocode, ClaimValueTypes.String),
                new Claim("register", register, ClaimValueTypes.String)
            };

            var userIdentity  = new ClaimsIdentity(claims, "SecureLogin");
            var userPrincipal = new ClaimsPrincipal(userIdentity);

            _userInfoService.UpdateUserInfo(new UserInfo()
            {
                Id = userInfo.drfocode + userInfo.lastname,
                UserCultureInfo = new UserCultureInfo(),
                LoginData       = new Dictionary <string, string>()
                {
                    { "FullName", userInfo.subjectcn },
                    { "OrganizationName", userInfo.o },
                    { "Position", userInfo.title },
                    { "Name", userInfo.givenname },
                    { "MiddleName", userInfo.middlename },
                    { "LastName", userInfo.lastname },
                    { "Email", userInfo.email },
                    { "Address", userInfo.address },
                    { "Phone", userInfo.phone },
                    { "EDRPOU", userInfo.edrpoucode },
                    { "INN", userInfo.drfocode },
                    { "SerialNumber", userInfo.serial },
                    { "OrganizationId", res.organizationId }
                },
                UserId    = res.employeeId,
                ProfileId = res.profileId,
                PersonId  = res.personId
            });


            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
                                          userPrincipal,
                                          new AuthenticationProperties
            {
                ExpiresUtc   = DateTime.UtcNow.AddHours(8),
                IsPersistent = false,
                AllowRefresh = false
            });

            if (register == "0")
            {
                return(RedirectToAction("SignIn"));
            }
            return(RedirectToAction("Index", "Home"));
        }