public async Task <IActionResult> GenerateTokenAsync([FromBody] GenerateJwtModel generateJwtModel)
        {
            var generateJwtInfo = new GenerateJwtInfo
            {
                Audience = generateJwtOptions.Audience,
                Issuer   = generateJwtOptions.Issuer,
                Secret   = generateJwtOptions.Secret,
                Scopes   = new[]
                {
                    Policies.TodoItems.CreateTodoItem,
                    Policies.TodoItems.DeleteTodoItem,
                    Policies.TodoItems.GetTodoItems,
                    Policies.TodoItems.UpdateTodoItem
                },
                UserName = generateJwtModel.UserName,
                Password = generateJwtModel.Password
            };

            JwtInfo jwtInfo = await generateJwtFlow.ExecuteAsync(generateJwtInfo, User);

            var jwtModel = new JwtModel
            {
                AccessToken = jwtInfo.AccessToken
            };

            return(Ok(jwtModel));
        }
        public async Task <IActionResult> RegisterTeacher([FromBody] TeacherRegisterVM model)
        {
            return(await HandleRequestAsync(async() =>
            {
                string imageName = Path.GetRandomFileName() + ".jpg";
                var filePath = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\Uploaded\Users");

                string pathSaveImages = InitStaticFiles
                                        .CreateImageByFileName(_env, _configuration,
                                                               new string[] { Directory.GetCurrentDirectory(), @"wwwroot", "Uploaded", "Users" },
                                                               imageName,
                                                               model.Photo);

                //+38 (098) 665 34 18
                model.Photo = imageName;

                var rezult = await _teacherService.Create(model);
                if (rezult)
                {
                    var user = _userManager.FindByEmailAsync(model.Email).Result;
                    var teacher = await _teacherService.GetTeacherById(user.Id);
                    JwtInfo jwtInfo;
                    if (teacher != null)
                    {
                        // Return token
                        jwtInfo = new JwtInfo()
                        {
                            Token = _jwtTokenService.CreateToken(user),
                            RefreshToken = _jwtTokenService.CreateRefreshToken(user),
                            SchoolId = teacher.SchoolId.ToString()
                        };
                    }
                    else
                    {
                        // Return token
                        jwtInfo = new JwtInfo()
                        {
                            Token = _jwtTokenService.CreateToken(user),
                            RefreshToken = _jwtTokenService.CreateRefreshToken(user),
                        };
                    }

                    this._logger.LogDebug("End method LoginUser...");

                    return Ok(jwtInfo);
                }
                else
                {
                    var invalid = new Dictionary <string, string>
                    {
                        { "email", "Користувач з даною електронною поштою уже зареєстрований" }
                    };
                    return BadRequest(invalid);
                }
            }));
        }
Esempio n. 3
0
        private DBManager()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                m_jwtPath = Path.Combine(Directory.GetCurrentDirectory(), "/" + m_dataPath + "/jwt.json");
                m_dbPath  = Path.Combine(Directory.GetCurrentDirectory(), "/" + m_dataPath + "/data.db");
            }
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                var dataPath = Path.Combine(Directory.GetCurrentDirectory(), m_dataPath);
                if (!Directory.Exists(dataPath))
                {
                    Directory.CreateDirectory(dataPath);
                }

                m_jwtPath = Path.Combine(Directory.GetCurrentDirectory(), m_dataPath + "/jwt.json");
                m_dbPath  = Path.Combine(Directory.GetCurrentDirectory(), m_dataPath + "/data.db");
            }

            if (!File.Exists(m_jwtPath))
            {
                var bytes   = new byte[128];
                var ranndom = new Random();
                ranndom.NextBytes(bytes);
                var key = Convert.ToBase64String(bytes);

                JWT = new JwtInfo()
                {
                    ClockSkew        = 10,
                    Audience         = "Inotify",
                    Issuer           = "Inotify",
                    IssuerSigningKey = key,
                    Expiration       = 36000,
                };

                File.WriteAllText(m_jwtPath, JsonConvert.SerializeObject(JWT));
            }
            else
            {
                JWT = JsonConvert.DeserializeObject <JwtInfo>(File.ReadAllText(m_jwtPath));
            }


            m_dbConnection = new SqliteConnection(string.Format("Data Source={0}", m_dbPath));
            if (m_dbConnection.State == ConnectionState.Closed)
            {
                m_dbConnection.Open();
            }

            DBase      = new NPoco.Database(m_dbConnection, DatabaseType.SQLite);
            m_migrator = new Migrator(DBase);
        }
Esempio n. 4
0
        private void InitializeAppConfig()
        {
            EnvironmentName = Configuration["Startup:EnvironmentName"];

            UseDeveloperExceptionPage = Convert.ToBoolean(Configuration["StartUp:UseDeveloperExceptionPage"]);

            LogRootPath = Configuration["LogRootPath"];

            var issuer = Configuration["JWT:Issuer"];

            var audience = Configuration["JWT:Audience"];

            JwtInfo = new JwtInfo(issuer, audience);

            AppSecurity = new AppSecurity(this);
        }
        public async Task <IActionResult> LoginUser([FromBody] LoginDTO loginModel)
        {
            // Auto return errors from viewModel and other global errors
            return(await HandleRequestAsync(async() =>
            {
                int countOfAttempts = this.HttpContext.Session.GetInt32("LoginAttemts") ?? 0;
                countOfAttempts++;
                this.HttpContext.Session.SetInt32("LoginAttemts", countOfAttempts);

                this._logger.LogDebug("Start method LoginUser...");
                var result = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, false, false);
                if (!result.Succeeded)
                {
                    return BadRequest(new InvalidData
                    {
                        Invalid = "Не правильно введені дані",
                        ShowCaptcha = countOfAttempts > 4 ? true : false
                    });
                }

                var user = await _userManager.FindByEmailAsync(loginModel.Email);
                await _signInManager.SignInAsync(user, isPersistent: false);

                if (countOfAttempts > 4)
                {
                    // TODO: Captcha validation
                    this._recaptchaService.IsValid(loginModel.RecaptchaToken);
                }


                // Return token
                JwtInfo jwtInfo = new JwtInfo()
                {
                    Token = _jwtTokenService.CreateToken(user),
                    RefreshToken = _jwtTokenService.CreateRefreshToken(user)
                };

                this.HttpContext.Session.SetInt32("LoginAttemts", 0);
                this._logger.LogDebug("End method LoginUser...");

                return Ok(jwtInfo);
            }));
        }
        public async Task ExecuteAsync_WhenGenerateJwtInfoIsValid_ReturnsExpectedData()
        {
            // Arrange
            var expectedJwtInfo = new JwtInfo();
            var jwtService      = new Mock <IJwtService>();

            jwtService.Setup(x => x.GenerateJwtAsync(It.IsAny <GenerateJwtInfo>())).ReturnsAsync(expectedJwtInfo);

            var logger          = new Mock <ILogger <GenerateJwtFlow> >();
            var generateJwtInfo = new GenerateJwtInfo();

            var principal = new Mock <IPrincipal>();

            principal.SetupGet(x => x.Identity).Returns(new GenericIdentity("test"));

            var generateJwtFlow = new GenerateJwtFlow(jwtService.Object, logger.Object);

            // Act
            var actualJwtInfo = await generateJwtFlow.ExecuteAsync(generateJwtInfo, principal.Object);

            // Assert
            actualJwtInfo.Should().BeEquivalentTo(expectedJwtInfo, $"because {nameof(GenerateJwtFlow)} works");
        }
        public async Task <IActionResult> LoginUser([FromBody] LoginDTO loginModel)
        {
            // Auto return errors from viewModel and other global errors
            return(await HandleRequestAsync(async() =>
            {
                int countOfAttempts = this.HttpContext.Session.GetInt32("LoginAttemts") ?? 0;
                countOfAttempts++;
                this.HttpContext.Session.SetInt32("LoginAttemts", countOfAttempts);

                this._logger.LogDebug("Start method LoginUser...");
                var result = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, false, false);

                if (!result.Succeeded)
                {
                    var invalid = new Dictionary <string, string>
                    {
                        { "email", "Не правильно введені дані" },
                        { "showCaptcha", (countOfAttempts > 4 ? true : false).ToString() }
                    };
                    return BadRequest(invalid);
                    //return BadRequest(new InvalidData
                    //{
                    //    Invalid = "Не правильно введені дані",
                    //    ShowCaptcha = countOfAttempts > 4 ? true : false
                    //});
                }

                var user = await _userManager.FindByEmailAsync(loginModel.Email);
                await _signInManager.SignInAsync(user, isPersistent: false);

                //if (countOfAttempts > 4)
                //{
                //    // TODO: Captcha validation
                //    this._recaptchaService.IsValid(loginModel.RecaptchaToken);
                //}

                var teacher = await _teacherService.GetTeacherById(user.Id);
                // Return token
                JwtInfo jwtInfo;
                if (teacher != null)
                {
                    // Return token
                    jwtInfo = new JwtInfo()
                    {
                        Token = _jwtTokenService.CreateToken(user),
                        RefreshToken = _jwtTokenService.CreateRefreshToken(user),
                        SchoolId = teacher.SchoolId.ToString()
                    };
                }
                else
                {
                    // Return token
                    jwtInfo = new JwtInfo()
                    {
                        Token = _jwtTokenService.CreateToken(user),
                        RefreshToken = _jwtTokenService.CreateRefreshToken(user),
                    };
                }

                this.HttpContext.Session.SetInt32("LoginAttemts", 0);
                this._logger.LogDebug("End method LoginUser...");

                return Ok(jwtInfo);
            }));
        }
Esempio n. 8
0
 public IActionResult SetJWT(JwtInfo jwt)
 {
     DBManager.Instance.JWT = jwt;
     StartUpManager.Load().Restart();
     return(OK());
 }
        public async Task <IActionResult> RegisterUser([FromBody] RegisterDTO model)
        {
            // Auto return errors from viewModel and other global errors
            return(await HandleRequestAsync(async() =>
            {
                if (!CaptchaHelper.VerifyAndExpireSolution(this.HttpContext,
                                                           model.CaptchaKey,
                                                           model.CaptchaText))
                {
                    var invalid = new Dictionary <string, string>();
                    invalid.Add("captchaText", "Помилка вводу зображення на фото");
                    return BadRequest(invalid);
                }
                var user = _userManager.FindByEmailAsync(model.Email).Result;
                if (user != null)
                {
                    var invalid = new Dictionary <string, string>();
                    invalid.Add("email", "Користувач з даною електронною поштою уже зареєстрований");
                    return BadRequest(invalid);
                }

                string imageName = Path.GetRandomFileName() + ".jpg";

                try
                {
                    this._logger.LogDebug("Start register method RegisterUser...");
                    string pathSaveImages = InitStaticFiles
                                            .CreateImageByFileName(_env, _configuration,
                                                                   new string[] { "ImagesPath", "ImagesPathUser" },
                                                                   imageName,
                                                                   model.Photo);
                    this._logger.LogDebug("Save image complete method RegisterUser...");
                    if (pathSaveImages != null)
                    {
                        var profile = new UserProfile()
                        {
                            RegistrationDate = DateTime.Now,
                            FirstName = model.FirstName,
                            LastName = model.LastName,
                            Photo = imageName,
                        };
                        user = new DbUser()
                        {
                            UserName = model.Email,
                            Email = model.Email,
                            PhoneNumber = model.Phone,
                            UserProfile = profile
                        };
                        var result = _userManager.CreateAsync(user, model.Password).Result;
                        if (!result.Succeeded)
                        {
                            var errors = CustomValidator.GetErrorsByIdentityResult(result);
                            return BadRequest(errors);
                        }
                        await _signInManager.SignInAsync(user, isPersistent: false);
                        // Return token
                        JwtInfo jwtInfo = new JwtInfo()
                        {
                            Token = _jwtTokenService.CreateToken(user),
                            RefreshToken = _jwtTokenService.CreateRefreshToken(user)
                        };

                        this._logger.LogDebug("End method RegisterUser...");

                        return Ok(jwtInfo);
                    }
                    else
                    {
                        throw new Exception("Помила додавання фото в БД");
                    }
                }
                catch (Exception ex)
                {
                    InitStaticFiles.DeleteImageByFileName(_env, _configuration,
                                                          new string[] { "ImagesPath", "ImagesPathUser" },
                                                          imageName);
                    var errors = new Dictionary <string, string>();
                    errors.Add("invalid", ex.Message);
                    return BadRequest(errors);
                }
            }));
        }
        public async Task <IActionResult> SignIn(SignIn obj)
        {
            if (ModelState.IsValid)
            {
                string stringData  = JsonSerializer.Serialize(obj);
                var    contentData = new StringContent(stringData, System.Text.Encoding.UTF8, "application/json");
                HttpResponseMessage responseMessage = await client.PostAsync(signinApiUrl, contentData);

                if (responseMessage.IsSuccessStatusCode)
                {
                    string stringReturnData = await responseMessage.Content.ReadAsStringAsync();

                    var jwtHandler = new JwtSecurityTokenHandler();
                    var options    = new JsonSerializerOptions
                    {
                        PropertyNameCaseInsensitive = true
                    };
                    JwtInfo jwtInfo = JsonSerializer.Deserialize <JwtInfo>(stringReturnData, options);
                    // Check Token Format
                    if (!jwtHandler.CanReadToken(jwtInfo.token))
                    {
                        ModelState.AddModelError("", "The token doesn't seem to be in a proper JWT format.");
                    }
                    else
                    {
                        var stream    = jwtInfo.token;
                        var jsonToken = jwtHandler.ReadToken(stream);
                        var tokenS    = jwtHandler.ReadToken(stream) as JwtSecurityToken;
                        HttpContext.Session.SetString("token", jwtInfo.token);
                        HttpContext.Session.SetString("username", obj.UserName);
                        var claims     = tokenS.Claims;
                        var jwtPayload = "{";
                        foreach (Claim c in claims)
                        {
                            if (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name")
                            {
                                jwtInfo.UserName = c.Value;
                            }
                            else if (c.Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/role")
                            {
                                jwtInfo.UserRole = c.Value;
                            }
                            else if (c.Type == "FullName")
                            {
                                jwtInfo.FullName = c.Value;
                            }
                            jwtPayload += '"' + c.Type + "\":\"" + c.Value + "\",";
                        }
                        jwtPayload += "}";
                        HttpContext.Session.SetString("jwtPayload", jwtPayload);
                        HttpContext.Session.SetString("userFullName", jwtInfo.FullName);

                        //jwtInfo.UserName = tokenS.Claims.First(claim => claim.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name").Value;
                        //jwtInfo.UserRole = tokenS.Claims.First(claim => claim.Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/role").Value;
                        //jwtInfo.FullName = tokenS.Claims.First(claim => claim.Type == "FullName").Value;
                        return(RedirectToAction("List", "EmployeeManager"));
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Invalid user details");
                }
            }
            return(View(obj));
        }
Esempio n. 11
0
 public TokenService(IOptions <JwtInfo> jwtInfoOptions)
 {
     _jwtInfo = jwtInfoOptions.Value;
 }